{"id":435,"date":"2015-04-06T18:49:16","date_gmt":"2015-04-06T16:49:16","guid":{"rendered":"http:\/\/webowiec.net\/blog\/?p=435"},"modified":"2015-04-08T16:25:14","modified_gmt":"2015-04-08T14:25:14","slug":"optymalizacja-strony-www-przegladarka","status":"publish","type":"post","link":"https:\/\/webowiec.net\/blog\/optymalizacja-strony-www-przegladarka\/","title":{"rendered":"Optymalizacja strony www &#8211; przegl\u0105darka"},"content":{"rendered":"<p>Odk\u0105d Google wymusi\u0142o od w\u0142a\u015bcicieli stron nie tylko optymalizacj\u0119 samych tre\u015bci na stronie, ale te\u017c ca\u0142ej strony pod wzgl\u0119dem technicznym, optymalizacja sta\u0142a si\u0119 bardzo wa\u017cnym etapem publikowania strony www.<\/p>\n<blockquote><p>W\u00a0po\u0142owie kwietnia 2015 roku Google\u00a0wprowadza now\u0105 polityk\u0119 oceniania stron, w my\u015bl kt\u00f3rej strona musi dostosowywa\u0107 si\u0119 do urz\u0105dzenia u\u017cytkownika. Nie do\u015b\u0107, \u017ce strona ma dobrze wygl\u0105da\u0107 na komputerze, tablecie czy telefonie\u00a0(responsywno\u015b\u0107),\u00a0to\u00a0powinna te\u017c dzia\u0142a\u0107 szybko.<\/p><\/blockquote>\n<p>Korzystaj\u0105c, np. z bootstrap-a mo\u017cemy \u0142atwo umo\u017cliwi\u0107 dostosowanie strony do wszystkich urz\u0105dze\u0144, ale optymalizacja strony nadal wymaga nieco wi\u0119kszego nak\u0142adu pracy i zaanga\u017cowania.<\/p>\n<p>Poni\u017cej kilka wskaz\u00f3wek, kt\u00f3re pomog\u0105\u00a0w \u0142atwy spos\u00f3b przyspieszy\u0107 stron\u0119 nawet kilkukrotnie:<!--more--><\/p>\n<p><strong>1) U\u017cycie frameworka HTML\/CSS.<\/strong><\/p>\n<p>Nie chodzi tylko o wgranie przyk\u0142adowo &#8211; bootstrap-a, ale te\u017c o jego pe\u0142ne wykorzystanie, np.\u00a0\u00a0wszystkie ikonki na stronie w postaci plik\u00f3w graficznych\u00a0zast\u0105pi\u0107\u00a0pakietem &#8220;Glyphicons&#8221;.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>2) Nie wczytujmy tego, co u\u017cytkownik nie zobaczy.<\/strong><\/p>\n<p>Strona w stylu portalu, cz\u0119sto ma du\u017co miniaturek, kt\u00f3re domy\u015blnie wczytuj\u0105 si\u0119 z chwil\u0105 \u0142adowania strony. Prowadzi to do sytuacji, w kt\u00f3rej u\u017cytkownik chc\u0105c tylko sprawdzi\u0107 najnowszy news na stronie, dostaje porcje 60 plik\u00f3w graficznych, kt\u00f3re wy\u015bwietlane s\u0105 na samym dole strony w panelu z &#8220;losowymi artyku\u0142ami&#8221;.<\/p>\n<p>Rozwi\u0105zaniem problemu jest technika &#8220;lazy load&#8221; &#8211; wczytywanie obrazk\u00f3w tylko wtedy, gdy u\u017cytkownik ma szanse je zobaczy\u0107, czyli z chwil\u0105 pojawienia si\u0119 na ekranie. Po zapytaniu wuja Google o &#8220;lazy image load jquery&#8221; dostaniemy w odpowiedzi mas\u0119 wtyczek do op\u00f3\u017anionego \u0142adowania grafiki.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>3) CSS u g\u00f3ry, JavaScript na dole.<\/strong><\/p>\n<p>Cz\u0119sto w sekcji BODY umieszcza si\u0119 zar\u00f3wno pliki CSS, jak i JS. \u0141adowanie CSS przed sekcj\u0105 body jest bardzo dobr\u0105 praktyk\u0105, ale pliki JS tylko spowalniaj\u0105 uruchamianie strony, co powoduje, \u017ce u\u017cytkownik przez jaki\u015b czas musi zadowoli\u0107 si\u0119 &#8220;bia\u0142ym ekranem&#8221;.<\/p>\n<p>Tak wi\u0119c pliki JS warto umie\u015bci\u0107 na samym dole strony, tu\u017c przed zamkni\u0119ciem tagu BODY. W przypadku WordPress, mo\u017cemy wykorzysta\u0107 fragment kodu, kt\u00f3ry trzeba umie\u015bci\u0107 w pliku szablonu <code>function.php<\/code>:<\/p>\n<p>[php]<br \/>\n\/**<br \/>\n * Automatically move JavaScript code to page footer, speeding up page loading time.<br \/>\n *\/<br \/>\nfunction footer_enqueue_scripts() {<br \/>\n    remove_action(&#8216;wp_head&#8217;, &#8216;wp_print_scripts&#8217;);<br \/>\n    remove_action(&#8216;wp_head&#8217;, &#8216;wp_print_head_scripts&#8217;, 9);<br \/>\n\/\/    remove_action(&#8216;wp_head&#8217;, &#8216;wp_enqueue_scripts&#8217;, 1);<br \/>\n    add_action(&#8216;wp_footer&#8217;, &#8216;wp_print_scripts&#8217;, 5);<br \/>\n\/\/    add_action(&#8216;wp_footer&#8217;, &#8216;wp_enqueue_scripts&#8217;, 5);<br \/>\n    add_action(&#8216;wp_footer&#8217;, &#8216;wp_print_head_scripts&#8217;, 5);<br \/>\n}<br \/>\nadd_action(&#8216;after_setup_theme&#8217;, &#8216;footer_enqueue_scripts&#8217;);<br \/>\n[\/php]<\/p>\n<p>Powy\u017cszy kod usunie skrypty JS z sekcji HEAD i przeniesie je do sekcji FOOTER. Jednak obejmuje on jedynie te pliki JS, kt\u00f3re zosta\u0142y dodane do szablonu funkcjami <code>wp_enqueue_script<\/code> (<code>wp_register_script<\/code>). Zakomentowane fragmenty kodu to polecenia przeniesienia do FOOTER r\u00f3wnie\u017c styli CSS.<\/p>\n<p><strong>4) Asynchroniczno\u015b\u0107 JS<\/strong><\/p>\n<p>Synchroniczne (zsynchronizowane), czyli &#8220;jedno po drugim&#8221; uruchamianie plik\u00f3w JS jest domy\u015blne stosowane na stronach. Maj\u0105c przyk\u0142adowy kod:<\/p>\n<p>[html]&lt;script src=&quot;\/jquery.min.js&quot;&gt;&lt;\/script&gt;<br \/>\n &lt;script src=&quot;\/bootstrap.min.js&quot;&gt;&lt;\/script&gt;<br \/>\n &lt;script src=&quot;\/docs.min.js&quot;&gt;&lt;\/script&gt;[\/html]<\/p>\n<p>Pliki zostan\u0105 za\u0142adowane po kolei, co jest poprawne, bo <strong>bootstrap.min.js<\/strong> potrzebuje <strong>jquery.min.js<\/strong> do funkcjonowania, a <strong>docs.min.js<\/strong> potrzebuje <strong>bootstrap.min.js<\/strong>.<\/p>\n<p>Jednak je\u015bli mamy taki uk\u0142ad:<\/p>\n<p>[html]&lt;script src=&quot;\/jquery.min.js&quot;&gt;&lt;\/script&gt;<br \/>\n &lt;script src=&quot;\/bootstrap.min.js&quot;&gt;&lt;\/script&gt;<br \/>\n&lt;script src=&quot;\/wtyczka1.js&quot; async=&quot;async&quot;&gt;&lt;\/script&gt;<br \/>\n&lt;script src=&quot;\/wtyczka2.js&quot; async=&quot;async&quot;&gt;&lt;\/script&gt;[\/html]<\/p>\n<p>mo\u017cemy zastosowa\u0107 znacznik <strong>async=&#8221;async&#8221;<\/strong> co spowoduje asynchroniczno\u015b\u0107 w \u0142adowaniu skrypt\u00f3w. Po uruchomieniu si\u0119 <strong>jquery.min.js<\/strong> i <strong>bootstrap.min.js<\/strong>, obie wtyczki: <strong>wtyczka1.js<\/strong> i <strong>wtyczka2.js<\/strong> wczytaj\u0105 si\u0119 w tym samym momencie, co znacznie przyspieszy \u0142adowanie si\u0119 strony.<\/p>\n<p>Zalecany jest 1 plik JS \u0142adowany synchronicznie, wszystkie pozosta\u0142e powinny si\u0119 uruchamia\u0107 asynchronicznie (r\u00f3wnocze\u015bnie). Jak si\u0119 \u0142atwo domy\u015ble\u0107, ten 1 plik musi mie\u0107 w sobie zawarte wszystkie zale\u017cno\u015bci, wi\u0119c jQuery, Bootstrap, itd, o czym w kolejnym punkcie.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>5) Minimalizacja plik\u00f3w CSS, JS:<\/strong><\/p>\n<p>Na pocz\u0105tek JS. Zaleca si\u0119 &#8220;upchni\u0119cie&#8221; wszystkich plik\u00f3w JavaScript do 1 pliku, uruchamiaj\u0105c go domy\u015blnie &#8211; synchronicznie na stronie. Na stronie powinny zosta\u0107 tylko te skrypty JS, kt\u00f3rych nie mo\u017cna spakowa\u0107 do 1 pliku, np. reklamy, statystyki, zewn\u0119trzne wtyczki (social plugin) i wszystkie one powinny si\u0119 \u0142adowa\u0107 z dopiskiem &#8220;async&#8221;.<\/p>\n<p>Analogicznie CSS, z tym, \u017ce w tym przypadku w gr\u0119 wchodzi jedynie spakowanie wszystkich mniejszych plik\u00f3w do 1 wi\u0119kszego.<\/p>\n<p>Z pomoc\u0105 przy tej \u017cmudnej i niewdzi\u0119cznej pracy przychodz\u0105 wtyczki do CMS, np. dla WordPress, s\u0105 to np. W3 Total Cache, gdzie t\u0105 funkcjonalno\u015b\u0107 nazwano &#8220;Minify&#8221;.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-437\" src=\"https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/04\/Zaznaczenie_002-1024x524.png\" alt=\"Zaznaczenie_002\" width=\"1024\" height=\"524\" srcset=\"https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/04\/Zaznaczenie_002-1024x524.png 1024w, https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/04\/Zaznaczenie_002-300x154.png 300w, https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/04\/Zaznaczenie_002-273x140.png 273w, https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/04\/Zaznaczenie_002.png 1031w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><strong>6) Minimalizacja plik\u00f3w graficznych:<\/strong><\/p>\n<p>D\u0105\u017c\u0105c co minimalizacji ilo\u015bci przesy\u0142anych danych, nie mo\u017cna zapomnie\u0107 o plikach graficznych, obrazkach, miniaturkach, ikonkach. Wszystkie pliki graficzne powinny by\u0107:<\/p>\n<p>&#8211; dostosowane rozmiarowo do obszaru, kt\u00f3re zajmuj\u0105: je\u015bli na stronie wy\u015bwietlana jest miniaturka, kt\u00f3ra ma rozmiary: 120 x 120px, to faktyczne wymiary pliku graficznego nie powinny przekracza\u0107 tych wymiar\u00f3w. B\u0142\u0119dem jest wysy\u0142anie do usera pliku 1200x800px i skalowanie do w CSS do wymiar\u00f3w miniaturki 120x120px.<\/p>\n<p>&#8211; optymalizacja \u017ar\u00f3d\u0142a pliku. Cz\u0119sto pliki graficzne zawieraj\u0105 tzw &#8220;meta tagi&#8221;, kt\u00f3re potrafi\u0105 z ma\u0142ej ikonki uczyni\u0107 nawet kilkadziesi\u0105t razy ci\u0119\u017cszy plik. Na szczeg\u00f3ln\u0105 uwag\u0119 zas\u0142uguj\u0105 pliki wygenerowane np. przez Photoshop, kt\u00f3re w 1szej kolejno\u015bci nadaj\u0105 si\u0119 na optymalizacje \u017ar\u00f3d\u0142a. Owa optymalizacja mo\u017ce by\u0107 przeprowadzona albo na serwerze, co b\u0119dzie obejmowa\u0142o wszystkie pliki, lub po stronie usera, przed wgraniem na stron\u0119. Zobacz: Google: &#8220;optymalizacja png, jpg&#8221;<\/p>\n<p>&#8211; ma\u0142e obrazki, ikonki (dla plik\u00f3w do 10kb jest to zabieg op\u0142acalny) wrzucamy bezpo\u015brednio w kod HTML, jako &#8220;base64 URI&#8221;, zobacz google: &#8220;base64 image online&#8221;.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>7) Obiekty wychodz\u0105ce:<\/strong><\/p>\n<p>Podczas optymalizacji d\u0105\u017cymy do tego, aby strona generowa\u0142a maksymalnie 20 obiekt\u00f3w wychodz\u0105cych. Jako obiekt wychodz\u0105cy uznajemy ka\u017cdy &#8220;wiersz&#8221; (medium) w testach na szybko\u015b\u0107 dzia\u0142ania strony, wi\u0119c ka\u017cdy plik png,jpg,gif,css,js,html, itd.<\/p>\n<p>Jak \u0142atwo zauwa\u017cy\u0107 sam dokument html ze stylem css i kilkoma JS i obrazkami to ju\u017c ok 10 obiekt\u00f3w. Je\u015bli strona bez reklam, zewn\u0119trznych statystyk czy wtyczek social generuje wi\u0119cej jak 20 obiekt\u00f3w, to znaczy, \u017ce co\u015b z optymalizacj\u0105 nie jest ok \ud83d\ude09<\/p>\n<p><strong>Jak zmniejszy\u0107 ilo\u015b\u0107 plik\u00f3w? <\/strong><br \/>\nNajpro\u015bciej ograniczy\u0107 do minimum wtyczki social, uruchamiaj\u0105c je tylko wtedy, gdy user na pewno chce z nich korzysta\u0107, np. po najechaniu myszk\u0105 na przycisk &#8220;facebook&#8221; lub po klikni\u0119ciu w wysuwany panel. Kolejnym pomys\u0142em jest u\u017cycie base64 do najmniejszych miniaturek na stronie. Warto r\u00f3wnie\u017c przegl\u0105dn\u0105\u0107 dok\u0142adnie zewn\u0119trzne wtyczki i usun\u0105\u0107 te, kt\u00f3re same w sobie generuj\u0105 wiele &#8220;obiekt\u00f3w&#8221; i zast\u0105pi\u0107 je bardziej zoptymalizowanymi.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>8) Testy, testy, testy..<\/strong><\/p>\n<p>&#8211; przegl\u0105darka Chrome, Firefox, ma bardzo fajne narz\u0119dzia do testowania szybko\u015bci \u0142adowania strony, uruchamiamy je &#8220;Ctril+Schift+J&#8221; i klikamy &#8220;Network&#8221;,<br \/>\n&#8211; narz\u0119dzia online &#8211; http:\/\/tools.pingdom.com\/fpt\/<\/p>\n<p>&nbsp;<\/p>\n<p><strong>9) Optymalizacja serwera \/ CMS<\/strong><\/p>\n<p>W powy\u017cszym artykule omawiany zosta\u0142 tylko aspekt u\u017cytkownika, czyli moment po wygenerowaniu strony przez serwer. Osobnym tematem jest optymalizacja strony po stronie serwera i o tym w kolejnym razem \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Odk\u0105d Google wymusi\u0142o od w\u0142a\u015bcicieli stron nie tylko optymalizacj\u0119 samych tre\u015bci na stronie, ale te\u017c ca\u0142ej strony pod wzgl\u0119dem technicznym, optymalizacja sta\u0142a si\u0119 bardzo wa\u017cnym etapem publikowania strony www. W\u00a0po\u0142owie kwietnia 2015 roku Google\u00a0wprowadza now\u0105 polityk\u0119 oceniania stron, w my\u015bl &hellip; <a href=\"https:\/\/webowiec.net\/blog\/optymalizacja-strony-www-przegladarka\/\" class=\"btn btn-sm btn-primary\"><i class=\"glyphicon glyphicon-link\"><\/i> Czytaj ca\u0142o\u015b\u0107<\/a><\/p>\n","protected":false},"author":1,"featured_media":436,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[663,5,3],"tags":[659,658,58,662,661,660],"class_list":["post-435","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-optymalizacja-strony-www","category-poradniki","category-porady-dla-webmasterow","tag-jak-przyspieszyc-strone","tag-optymalizacja-bloga","tag-optymalizacja-strony","tag-optymalizacja-strony-pod-google-szybkosc-dzialania","tag-przyspieszenie-strony-www","tag-strona-dziala-wolno-co-robic"],"_links":{"self":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/435","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/comments?post=435"}],"version-history":[{"count":6,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/435\/revisions"}],"predecessor-version":[{"id":480,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/435\/revisions\/480"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/media\/436"}],"wp:attachment":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/media?parent=435"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/categories?post=435"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/tags?post=435"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}