YSlow дает оценку F файлам, сжатым с помощью mod_deflate

Я использую mod_deflate в Apache 2.2, а уровень сжатия установлен на 9. Я настроил все возможные аспекты сайта на основе рекомендаций YSlow (v2) и смогли получить общую оценку A (общий балл: 91), а также по всем категориям, кроме:

  • Делайте меньше HTTP-запросов (Grade C - я все еще работаю над дальнейшей унификацией изображений)
  • Сжимайте компоненты с помощью gzip (уровень F)

YSlow по-прежнему сообщает об этом с буквой F и говорит мне использовать gzip для моих файлов CSS и JS. Вот скриншот отчета YSlow (домен был размыт из соображений конфиденциальности): снимок экрана с отчетом YSlow

Однако такие сайты, как GIDNetwork GZIP Test, показывают отличные результаты сжатие !!

Раздел mod_deflate моего .htaccess

# Below uses mod_deflate to compress text files. Never compress binary files.
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE

# compress content with type html, text, js, and css
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript text/xml image/svg+xml application/javascript application/x-javascript application/atom_xml application/rss+xml application/xml application/xhtml+xml application/x-httpd-php application/x-httpd-fastphp

# Properly handle old browsers that do not support compression  
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Explicitly exclude binary files from compression just in case
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.avi$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mov$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp3$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.mp4$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.rm$ no-gzip dont-vary

# properly handle requests coming from behind proxies
Header append Vary User-Agent env=!dont-vary
</IfModule>

Кто-нибудь может указать, где я ошибаюсь?

Спасибо, м ^ е


person miCRoSCoPiC_eaRthLinG    schedule 10.06.2009    source источник


Ответы (3)


Возможно, что mod_deflate был настроен неправильно.

Типичная конфигурация mod_deflate может исключать определенные браузеры на основе строк пользовательского агента и может быть настроена только на сжатие определенных типов файлов, определяемых их типом MIME, зарегистрированным на сервере.

Вы должны сжимать все ваши файлы HTML, CSS и Javascript, но не файлы PNG, GIF или JPEG, и в Netscape 4 есть ошибки, которые вы можете или не хотите учитывать. Попробуйте использовать образец кода из документации:

<Location />
    # Insert filter
    SetOutputFilter DEFLATE

    # Netscape 4.x has some problems...
    BrowserMatch ^Mozilla/4 gzip-only-text/html

    # Netscape 4.06-4.08 have some more problems
    BrowserMatch ^Mozilla/4\.0[678] no-gzip

    # MSIE masquerades as Netscape, but it is fine
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    # Don't compress images
    SetEnvIfNoCase Request_URI \
    \.(?:gif|jpe?g|png)$ no-gzip dont-vary

    # Make sure proxies don't deliver the wrong content
    Header append Vary User-Agent env=!dont-vary
</Location> 

Также обратите внимание, что опубликованный вами тест GIDZipTest GZIP не проверяет связанные файлы Javascript и CSS, тогда как YSlow это делает - в тесте GIDZipTest GZIP вам нужно будет протестировать их по отдельности.

Я предполагаю, что также возможно, что ваш интернет-провайдер использует кеширующий прокси - прозрачный или нет - который искажает или удаляет ваш заголовок Accept-Encoding :. Чтобы исключить это как причину, вы можете попросить кого-нибудь протестировать это вне вашего интернет-провайдера.

Также следует отметить, что при сжатии файлов с помощью gzip вы меняете пропускную способность на процессорное время. Выше более низких уровней сжатия вы увидите уменьшение отдачи от экономии полосы пропускания, но при этом огромное увеличение требуемого времени ЦП. К сожалению, с силой сжатия до 9 вы почти наверняка тратите слишком много времени процессора на очень небольшое улучшение сжатия - я всегда рекомендовал бы использовать силу 1.

person thomasrutter    schedule 10.06.2009
comment
Я добавил deflate часть моего htaccess выше ... она более или менее соответствует примеру, который вы показали здесь. Что касается процессорного времени, мы работаем на выделенном сервере, и никакие другие процессы (кроме MySQL) не работают вместе с Apache. Должна ли загрузка ЦП вызывать беспокойство в таком сценарии? - person miCRoSCoPiC_eaRthLinG; 10.06.2009
comment
Что касается GIDZipTest, я последовал вашему предложению и проверил сжатие файлов JS и CSS по отдельности, а не всей страницы ... и он сообщил о сжатии 70% и 77,3% соответственно. - person miCRoSCoPiC_eaRthLinG; 10.06.2009
comment
Возможно ли, что в Firefox вы заходите на сайт через прокси? Возможно, прокси-сервер может отбрасывать заголовок Accept-Encoding:, который отправляет ваш браузер, для его кеширования (прокси также может быть прозрачным). Если попросить кого-нибудь из стороннего провайдера проверить это с помощью своего собственного Firefox, это подтвердит или исключит это как причину. - person thomasrutter; 11.06.2009
comment
Я совсем забыл об этом посте ... на полпути моя проблема была решена. На самом деле это произошло из-за того, что на моем рабочем месте работал доверенное лицо. Они избавились от этого, и все было хорошо :) Спасибо за помощь .. - person miCRoSCoPiC_eaRthLinG; 30.07.2009

Чтобы сделать то же самое с ASP.NET, прочтите эту статью - http://coder.informisk.com/post/2010/01/10/Get-Grade-A-in-YSlow.aspx

person sam    schedule 10.01.2010

этот веб-сайт http://www.rubyrobot.org/article/5-tips-for-faster-loading-web-sites сказал мне, что AddOutputFilterByType не будет работать в .htaccess

person bengkoang    schedule 23.03.2010
comment
Это правда лишь отчасти. AddOutputFilterByType доступен в Apache 2.0.33 и более поздних версиях, даже в 2.2 он все еще есть (однако он устарел с версии 2.1). И он доступен во всех контекстах, включая .htaccess. - person Jürgen Thelen; 27.05.2012