PageSpeed ​​- Wyeliminuj JavaScript i CSS blokujące renderowanie w treści widocznej na ekranie


15

Pracuję magento 1.9i korzystam RWD sliderz Magento 1.9 na stronie głównej.

Google's PageSpeedtego nie lubi i mówi:

Wyeliminuj JavaScript blokujący renderowanie i CSS w treści widocznej na ekranie

Jak mogę to zrobić dla tego pliku skryptu Java, który wywołuje suwak:

http://www.MYDOMAIN/media/js/sdhfksjfhdsjvbskj8e4w.js

Odpowiedzi:


14

Rozwiązuję Usuń problem z blokowaniem renderowania JavaScript w Magento-1.9.x w następujący sposób:

<script src="filename.js"></script>
Replace with Following:  
<script src="filename.js" defer></script>
<script src="filename.js" async="async"></script>

lub

<action method="addJs"><script>prototype/prototype.js</script></action>  
Replace with Following:  
<action method="addJs"><script>prototype/prototype.js</script><params>defer</params></action>  
<action method="addJs"><script>prototype/prototype.js</script><params>async</params></action>

wskazówki: może znajdować się w temacie podstawowym

app \ design \ frontend \ base \ default \ layout \ page.xml o linii: 38,

Jeśli używasz aktywnego motywu inną ścieżkę np. Dla rwd jako app \ design \ frontend \ base \ default \ layout \ page.xml


Gdzie to dodajesz? w którym pliku magento xml?
— styzzz

@styzzz, tak, a także plik nagłówka / stopki. lepiej znaleźć google sugerowane zablokowane js
— matinict

@styzz to zlokalizuj w podstawowej kompozycji app \ design \ frontend \ base \ default \ layout \ page.xml o linii: 38 ,. Jeśli używasz aktywnego motywu inną ścieżkę np. Dla rwd jako app \ design \ frontend \ base \ default \ layout \ page.xml
— matinict

1
Podążałem za Tobą. Rozwiązuje problem wglądu w stronę Google, ale powoduje wiele błędów w konsoli w Google Chrome
— Shoeb Mirza

@MDSHOEBMIRZA, to nie rozwiązało problemu
— Stevie G,

5

Technika opisana przez „Mohana Gsa” tutaj nie zadziała.

Z powodu ścieżki js /media/js/wygląda na to, że używa scalania js . Oznacza to, że wszystkie pliki js dodane standardowym sposobem xml

  • <action method="addJs">...
  • <action method="addItem"><type>js</type>..

zostanie połączony w jeden duży /media/js/<hash>.js.

Dodano pliki Magento core js

  • <action method="addJs"><script>prototype/prototype.js</script></action>

także w ten sposób.

Istnieje również wiele szablonów wykorzystujących wbudowane js, które zależą od obiektów / funkcji zdefiniowanych w plikach head js.

W tym momencie nie wystarczy przenieść tylko pliki head js na dół. Musisz przenieść wszystkie deklaracje wbudowane js za głową js i przed nim </body>.

We wszystkich / wielu przypadkach nie jest możliwe oddzielenie wbudowanego js od szablonów, ponieważ używają one zmiennych specyficznych dla szablonu.

Możesz użyć tylko ogólnej metody, takiej jak parsowanie końcowego html i przenieść to razem w odpowiedniej kolejności.

Spójrz na rozszerzenie Pagespeed .


Przykro mi - wciąż nie mogę się dowiedzieć, co robić. Który plik powinienem edytować? Czy mówisz, że powinniśmy edytować pliki XML i przenieść linię wywołującą JS do innej sekcji? Mogę edytować plik XML, ale nie jestem pewien, który i gdzie przenieść linię, która wywołała skrypt JS. Proszę daj mi znać.
— styzzz

Moja odpowiedź powinna wyjaśnić, że może nie przenieść JavaScript wywołuje xml do innej sekcji. Doprowadzi to do błędów. Możesz wypróbować wspomniane rozszerzenie.
— Steven Fritzsche,

Cześć Steven, próbowałem twojego modułu. Nic się nie zmieniło. Nie przeniesiono javascript ani css. Również konfiguracja strony prędkości strony administratora pokazuje 404
— Sandeep

@ Sandeep: To nie jest miejsce na twój komentarz. Utwórz szczegółowy raport / problem na github .
— Steven Fritzsche,

4

Ten kod mówi: poczekaj na załadowanie całego dokumentu, a następnie załaduj plik zewnętrzny defer.js.

<script type="text/javascript">
    function downloadJSAtOnload() {
        var element = document.createElement("script");
        element.src = "defer.js";
        document.body.appendChild(element);
    }
    if (window.addEventListener)
        window.addEventListener("load", downloadJSAtOnload, false);
    else if (window.attachEvent)
        window.attachEvent("onload", downloadJSAtOnload);
    else window.onload = downloadJSAtOnload;
</script>

Oto kroki, które musisz wykonać.

  1. Skopiuj powyższy kod.

  2. Wklej kod do kodu HTML tuż przed </body>tagiem (w dolnej części pliku HTML).

  3. Zmień defer.jsnazwę na zewnętrzny plik JS.

  4. Upewnij się, że ścieżka do pliku jest poprawna. Przykład: jeśli właśnie umieścisz defer.js, plik defer.jsmusi znajdować się w tym samym folderze co plik HTML.

Aby uzyskać więcej informacji, zapoznaj się z tym artykułem


1

Oto rozszerzenie open source do rozwiązania tego https://github.com/mediarox/pagespeed

Aktualne funkcje

  • Przenieś wszystkie tagi Javascript (head & inline) na dół. ({stripped_html} {js})
  • w tym jednostki warunkowe js ({wiele tagów js})
  • w tym zewnętrzne tagi js, w tym tagi „wbudowane” js
  • Przenieś wszystkie tagi CSS (head & inline) na dół. ({stripped_html} {css})
  • w tym warunkowe jednostki css ({wiele tagów css})
  • w tym zewnętrzne tagi css
  • w tym wbudowane tagi css

Zgodność

Od Magento 1.5.x do Magento 1.9.x.

Konfiguracja backendu

Wszystkie moduły (Pagespeed_Js, Pagespeed_Css) są domyślnie wyłączone.

Ścieżka konfiguracji: System> Konfiguracja> ZAAWANSOWANE> Prędkość strony

Jak to działa ?

Po prostu przeanalizuj końcowy strumień HTML w zdarzeniu „kontroler-front_send_send_response_before”.


Poszedł do GitHub i stwierdził, że skrypt został ostatnio zaktualizowany 23 września 2015 r. Ponadto nie ma wzmianki o Magento 2. Czy działałoby to w przypadku Magento 2, czy nie? Jeśli nie, masz jakieś inne rekomendacje / sugestie?
— marikamitsos
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.