Задать вопрос
@ben187

Почему gzip не ускоряет время загрузки сайта?

Читал про время загрузки страниц сайтов и почти везде пишется что для ускорения загрузки можно в том числе использовать gzip. В качестве тестов взял простую конфигурацию nginx:
user nginx;
worker_processes 4;
pid     /run/nginx.pid;
error_log       /var/log/nginx/error.log;
events {
        worker_connections 1024;
}
http {
        access_log      /var/log/nginx/access.log;
        server {
                listen          80;
                server_name	localhost;
		gzip	       	on;
		gzip_types text/html text/plain image/png image/jpeg text/css text/xml text/javascript application/x-javascript application/xml;
                
		location / {
                        root /data/www;
                }
        }
}

В /data/www закинул index.html из обычных символов, без картинок и прочего, весом 1мб.

В итоге без gzip имею следующее:
5a17d2a07bc06099414643.png5a17d2b31992f976793233.pngВключаю gzip:
5a17d2cd08ac2026371919.png5a17d2d97ea24004893490.png

Вопрос - почему время загрузки страницы не ускорилось? Пробовал так же разные опции gzip, но результат тот же.
  • Вопрос задан
  • 1154 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 2
Вопрос - почему время загрузки страницы не ускорилось?


Ну наверно потому, что у Вас неправильно настроено сжатие gzip.
Например писать gzip_types image/png image/jpeg бессмысленно, т.к. бинарные данные картинок итак сжаты и никакого выигрыша Вы не получите.

Правильно написать так:

http {
   ....
   gzip on;
   gzip_http_version 1.0;
   gzip_min_length 512;
   gzip_buffers 64 8k;
   gzip_comp_level 5;
   gzip_proxied any;
   gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
   ...
}


В секции server { } можете ничего не писать если не планируете менять параметры.

Потом берем curl и проверяем:
curl -H "Accept-Encoding: gzip,deflate" -I http://mysite.ru/index.html


получаем ответ

HTTP/1.1 200 OK
Server: nginx
Date: Fri, 24 Nov 2017 11:32:00 GMT
Content-Type: text/html
Last-Modified: Tue, 12 Apr 2016 06:48:17 GMT
Connection: keep-alive
ETag: W/"570c9a31-576"
Content-Encoding: gzip


Обращаем внимание на поле Content-Encoding

Для теста из консоли берем утилиту Apache Benchmark:
ab -n 1 -H "Accept-Encoding: gzip,deflate" http://mysite.ru/index.html


Смотрим на поля помеченные жирным, при выключенном gzip они увеличиваются.

Concurrency Level: 1
Time taken for tests: 0.128 seconds
Complete requests: 1
Failed requests: 0
Total transferred: 3405 bytes
HTML transferred: 3025 bytes
Requests per second: 7.80 [#/sec] (mean)
Time per request: 128.249 [ms] (mean)
Time per request: 128.249 [ms] (mean, across all concurrent requests)
Transfer rate: 25.93 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 90 90 0.0 90 90
Processing: 38 38 0.0 38 38
Waiting: 38 38 0.0 38 38
Total: 128 128 0.0 128 128


Ну и берем Firefox и смотрим там поля Передано и Размер, если сжатие работает, то Передано должно быть меньше Размер.
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Веб-разработка
Судя по панели Network был передан всё же несжатый файл - 0.99 Mb.
Например, на этой странице подключается файл
https://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic&subset=latin,cyrillic

В Network его размер показан 1.1 Kb, а если сохранить на диск - 4.1 Kb. То есть, панель показывает реальный переданный по сети размер. В вашем случае это означает, что сжатие для этого клиента по какой-то причине не работает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы