Optymalizowanie ilości Http requestów
Jednym ze sposobów na optymalizacje ilości requestów do strony, oraz zmniejszenie ilości przesyłanych danych z serwera jest łączenie i kompresowanie plików ze skryptami java script. Jest to możliwe gdy przeglądarka obsługuje taki format skompresowanych plików js.
Musimy postępować w trzech krokach. Pierwszy z nich polega na utworzeniu reguł w pliku .htaccess by przekierowywać js na pliki js.gz, gdy przeglądarka obsługuje kompresje gzip. Natomiast kolejny krok polega na utworzeniu zbioru archiwów naszych skryptów by obniżyć wielkość transferu. Na dokładkę możemy połączyć wszystkie główne skrypty, które ładują się na każdej stronie w jedno duże archiwum.
By wyszukać wszystkie pliki js i skompresować je wystarczy że użyjemy prostej pętli for
for file in `find js -type f \( -name \*.js \)`; do echo -ne "Generating $file.gz\n\r" gzip -c -f $file > $file.gz done
W zbiorze na którym działa pętla wywołujemy polecenie find i wyszukujemy wszystki plików katalogu zdefiniowanym na sztywno ( w naszym przypadku js/ )
By połączyć główne skrypty w jedno duże archiwum posłużymy się listą plików zapisaną w pliku tekstowym, z której będziemy odczytywać linia po linii kolejne pliki do połączenia.
#!/bin/bash if [ "$1" = "--help" ]; then echo -ne " " else if [ -n "$2" ]; then outputfile="js/merged/$2" echo -ne "--merging files -- \n\r" jslist="$1.txt" if [ -f "$jslist" ]; then index=0 if [ -f "$outputfile" ]; then echo -ne "Deleting existing merged file\n\r" unlink $outputfile else touch $outputfile fi while read line ; do #MYARRAY[$index]="$line" echo -ne "Merging: $line \n\r" if [ -f "$line" ]; then cat $line >> $outputfile else echo -ne "ERROR: File $line does not exists\n\r" fi index=$(($index+1)) done < $jslist gzip -fc $outputfile > $outputfile.gz echo -ne "SUCCESS: Generated: $outputfile.gz \n\r" else echo -ne "ERROR" exit fi else echo -ne "ERROR: Parameter expected try --help to get help" fi fi
Kroki algorytmu:
- Sprawdzamy czy user wpisał –help. Jeżeli tak to wyświetlamy pomoc. W przeciwnym wypadku idź do kroku 2.
- Definiujemy plik wyjściowy oraz listę plików do połączenia
- Jeżeli istnieje plik z listą przejdź do kroku 4. W przeciwnym wypadku wyświetl błąd.
- Jeżeli istnieje plik wyjściowy to usuń plik w przeciwnym wypadku utwórz pusty plik wyjściowy.
- Dopóki read line z pliku $jslist, to jeżeli plik źródłowy istnieje, to jego zawartość przekaż do pliku wyjściowego. W przeciwnym wypadku wyświetl błąd
- Spakuj plik wyjściowy
Konfiguracja .htaccess
By zmniejszyć transfer możemy wymusić na apache’u aby wysyłał pliki js skompresowane, jeżeli przeglądarka akceptuje skompresowane javascripty.
<IfModule mod_headers.c>
<FilesMatch "\.js.gz$">
ForceType text/javascript
Header set Content-Encoding: gzip
</FilesMatch>
</IfModule>
<IfModule mod_rewrite.c>
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_URI} \.js$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule (.*)$ $1\.gz [L,QSA]
</IfModule>
2 komentarzy to Optymalizowanie ilości Http requestów
Leave a Reply
Search
Moje Twitty
- Saved My Day! jQuery Tab On Return Key Press - JavaScript - Snipplr Social Snippet Repository snipplr.com/view/12643/ via @snipplr 2 days ago
- A new favorite: Daydream in Blue Ft. Lupe Fiasco (Bassex Remix) (Play Me Freebie) by @playmerecords soundcloud.com/playmerecords/… on #SoundCloud 4 weeks ago
- A new favorite: Double Trouble by Datsik & Z-Trip by @dubstep soundcloud.com/dubstep/double… on #SoundCloud 4 weeks ago
- A new favorite: Forekast - Samsonite (Original Mix) -- FREE DOWNLOAD by @forekast soundcloud.com/forekast/samso… on #SoundCloud 4 weeks ago
- dubsteppin my ass of! 4 weeks ago
- Rendering emails with Twig in Symfony2 bit.ly/rPqylL 1 month ago
- Need help with Datetime field with null value stackoverflow.com/q/10176459/107… #symfony2 #doctrine2 1 month ago
- A new favorite: KDrew - Bullseye by @KDrewMusic soundcloud.com/kdrewmusic/kdr… on #SoundCloud 1 month ago
- How foreach actually works stackoverflow.com/q/10057671/107… 1 month ago
- A new favorite: Gotye - Somebody That I Used To Know Ft. Kimbra (KDrew Remix) by @KDrewMusic soundcloud.com/kdrewmusic/got… on #SoundCloud 1 month ago
AdTaily
Najnowsze wpisy
Kategorie
- bez kategorii (39)
- c++ (2)
- czas wolny (28)
- java (3)
- kryptografia (5)
- praca (26)
- projekty (24)
- przemyślenia (15)
- uczelnia (13)
- Webdevelopment (35)
- Adobe AIR (2)
- Adobe Flex (2)
- AJAX (3)
- Apache (1)
- cloud computing (1)
- doctrine (3)
- GoogleMaps (4)
- JavaScript (3)
- jQuery (1)
- MySql (3)
- Optymalizacja (1)
- paypal (1)
- php (14)
- symfony (5)
- Symfony 1.4 (2)
- Symfony2 (2)
- TWIG (1)
- WordPress (4)
Dzięki wielkie za dostarczone informacje, dzięki nim udało mi się zoptymalizować ilość odwoła do JSa na stronie. W Google Page Speed udało mi się przeskoczyć o 8 oczek w górę. Będę wracał do twojego sposobu przy kolejnych wdrożeniach.
Nie ma sprawy