Såååe, er der en nem måde at fixe det på? Kan det fx gøres i .htaccess?
htaccess? nej, du kan ikke fixe gengivelsesblokkerende js og css via htaccess. reelt findes der ikke nogen decideret nem måde at løse det på. det første man skal gøre er at forstå hvad det reelt vil sige at et script eller en css fil er blokkerende. Når man har forstået det, skal man forstå hvad det er Google PageSpeed Insight måler på og ikke måler på. og man skal sætte sig ind i hvad der reelt skal til for at et script eller en css fil ikke er blokkerende.
Det kan siges meget kort.
eksterne javascripts skal ned og ligge under folden, helst helt nede ved afsluttende bodytag, og de skal være async.
Eksterne css filer skal loades via javascript, hvilket betyder at de reelt skal fjernes 100% fra html, og skrives enten inline i javascript også nede ved afsluttende bodytag
De to ovenstående punkter er der ikke mange der forstår hvordan eller hvorfor det skal gøres sådan for at de er ikke blokkerende. Det er altså ikke nok bare at smide dem under folden, som Google PageSpeed insights reelt tester.
Ser man på hvordan W3TC, Wp rocket klare ærterne er det en blanding af skanning af sidens eksterne scripts via preg_match_all/preg_match (en PHP funktion), samt det at wordpress kan se hvilke scripts og css filer der er enqued.
Tænker man lidt videre, kan man faktisk bruge samme metode til at lave sin egen løsning hvor man rent faktisk flytter de scripts ned under folden. ikke svært for en programmør.
W3TC kan sagtens bruges, men man skal se på hvor problemerne kan opstå. Fx går det ikke at man rykker jQuery ned under folden, uden også at rykke de scripts som behøver jquery, dette gælder også de inline scripts som behøver jquery. det samme gør sig gældende for alle andre scripts man rykker ned. en god løsning til at omgås det, er netop brugen af preg_match_all/preg_match til at finde de scripts som er på siden, for derefter at loope igennem dem og derefter skrive dem i bunden af html koden lige inden afsluttende bodytag.
Tænker man endnu mere videre, kunne man lave en løsning som også undlader nogle scripts og css filer i at blive loadet asynkront og under folden. Fx hvis man gerne vil inkluderer det direkte i html koden. formår man at gøre dette, og samtidig lige ser på prioritering af synligt indhold, så vil denne løsning være langt bedre end det man fx ser i Mod_PageSpeed Løsningen som deMib nævner. og hvis man ville kunne man jo også bygge Mod_PageSpeed ovenpå for lige at gøre endnu mere. Men, det er ikke en nødvendighed.
læs mere her:
https://developers.google.com/speed/docs/insights/BlockingJS#InlineJS
http://kim-tetzlaff.dk/google-pagespeed-insights-del-1.html
http://kim-tetzlaff.dk/fjern-gengivelsesblokerende-javascript-og-css-fra-indholdet-over-skillelinjen.html
https://developers.google.com/speed/docs/insights/PrioritizeVisibleContent
https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery#example
http://php.net/manual/en/function.preg-match-all.php
http://php.net/manual/en/function.file-get-contents.php
http://php.net/manual/en/function.ob-start.php
Det er vigtigt at forstå før man kan gøre noget ved det :) også selvom det er så simpelt som at sætte et plugin som W3TC op. Det kan mere end folk lige tror.