Jak przyspieszyć pobieranie witryn przez przeglądarki

W celu przyspieszenia pobierania witryn webowych można wykonać kilka optymalizacji po stronie serwera apache oraz w plikach witryny.

Potrzebne narzędzia

Za pomocą własnego repozytorium pakietów należy zainstalować w systemie:

pkg install -y graphics/jpegoptim graphics/optipng devel/py-jsmin www/py-cssmin

Oprogramowanie służy do optymalizacji odpowiednio:

Optymalizacja plików graficznych

Poniżej sposób użycia narzędzi do optymalizacji plików.

jpegoptim

find ./ -name '*.jpg' -exec jpegoptim -spP {} \;

optipng

find ./ -name '*.png' -exec optipng -strip all -preserve -o4  {} \;

Optymalizacja kodu JS

Narzędzie nie potrafi zrobić optymalizacji "w locie", tak więc trzeba pliki oryginalne przekopiować na nazwy tymczasowe i utworzyć pliki na nowo:

for f in `ls *.js`; do cp -p $f ${f}.orig; python -m jsmin ${f}.orig > $f; done

Optymalizacja plików CSS

Narzędzie nie potrafi zrobić optymalizacji "w locie", tak więc trzeba pliki oryginalne przekopiować na nazwy tymczasowe i utworzyć pliki na nowo:

for f in `ls *.css`; do cp -p $f ${f}.orig; cssmin < ${f}.orig > $f; done

Optymalizacja kodu HTML

Na bazie własnych doświadczeń:

  1. Wszelkie obiekty "blokujące" jak JavaScript czy CSS należy przenieść na konic pliku HTML (patrz dokumentacja Page Speed)

  2. Odwołania do CSSów związanych z czcionkami zapisać na końcu HTMLa (po znaczniku zamykającym).
  3. (!) TBA

Konfiguracja po stronie serwera www

Po stronie serwera apache do wykorzystania są następujące moduły:

mod_deflate

Moduł służący kompresji danych. Należy tylko uważać rozważnie w przypadku witryn z szyfrowaniem (bezpieczeństwo). Konfiguracja umieszczana jest w następujących sekcjach:

Sekcja Directory

<Directory ...>
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
    </IfModule>
</Directory>

Sekcja VirtualHost

W konfiguracji serwera wirtualnego należy umieścić następującą konfigurację (z wykorzystaniem mod_headers):

      <IfModule mod_headers.c>
          <IfModule mod_deflate.c>
              # Serve gzip compressed CSS files if they exist
              # and the client accepts gzip.
              RewriteCond "%{HTTP:Accept-encoding}" "gzip"
              RewriteCond "%{REQUEST_FILENAME}\.gz" -s
              RewriteRule "^(.*)\.css" "$1\.css\.gz" [QSA]

              # Serve gzip compressed JS files if they exist
              # and the client accepts gzip.
              RewriteCond "%{HTTP:Accept-encoding}" "gzip"
              RewriteCond "%{REQUEST_FILENAME}\.gz" -s
              RewriteRule "^(.*)\.js" "$1\.js\.gz" [QSA]

              # Serve correct content types, and prevent mod_deflate double gzip.
              RewriteRule "\.css\.gz$" "-" [T=text/css,E=no-gzip:1]
              RewriteRule "\.js\.gz$" "-" [T=text/javascript,E=no-gzip:1]

              <FilesMatch "(\.js\.gz|\.css\.gz)$">
                  # Serve correct encoding type.
                  Header append Content-Encoding gzip

                  # Force proxies to cache gzipped &
                  # non-gzipped css/js files separately.
                  Header append Vary Accept-Encoding
              </FilesMatch>
          </IfModule>

mod_expires

Moduł ustawia czas życia obiektów w lokalnym cache przeglądarki. Konfiguracja do wykonania w ramach sekcji Directory:

<Directory ...>
    <IfModule mod_expires.c>
        Header set cache-control: public
        ExpiresActive on
        ExpiresDefault "access plus 1 month"
        ExpiresByType text/html             "access plus 1 hour"
        ExpiresByType application/rss+xml   "access plus 1 hour"
        ExpiresByType image/png             "access plus 3 month"
        ExpiresByType image/jpg             "access plus 3 month"
        ExpiresByType image/jpeg            "access plus 3 month"
        ExpiresByType video/ogg             "access plus 3 month"
        ExpiresByType audio/ogg             "access plus 3 month"
        ExpiresByType video/mp4             "access plus 3 month"
        ExpiresByType image/x-icon          "access plus 1 year"
        ExpiresByType font/ttf              "access plus 1 year"
        ExpiresByType image/svg+xml         "access plus 1 year"
    </IfModule>
</Directory>

mod_headers

Potrzebny w celu uruchomienia optymalizacji kompresji dla mod_deflate.

Dodatkowo w konfiguracji dla VirtualHost należy ustawić:

      <IfModule mod_headers.c>
          # roczne cache obrazk/ow (g/l/ownie chodzi o gravatar.com)
          <FilesMatch "\.(ico|gif|jpg|jpeg|png|flv|pdf)$">
              Header set Cache-Control "max-age=29030400"
          </FilesMatch>
      </IfModule>
   </VirtualHost>

Źródła w sieci internet


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

GooglePageSpeed (ostatnio edytowane 2016-05-02 10:44:59 przez wtps0n)