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:

  1. Sprawdzamy czy user wpisa?? –help. Je??eli tak to wy??wietlamy pomoc. W przeciwnym wypadku id?? do kroku 2.
  2. Definiujemy plik wyj??ciowy oraz list? plik??w do po???czenia
  3. Je??eli istnieje plik z list? przejd?? do kroku 4. W przeciwnym wypadku wy??wietl b???d.
  4. Je??eli istnieje plik wyj??ciowy to usu?? plik w przeciwnym wypadku utw??rz pusty plik wyj??ciowy.
  5. 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
  6. 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 myśli nt. „Optymalizowanie ilo??ci Http request??w

  1. Mateusz

    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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>