Одна из самых важных вещей при разработке веб-приложений — сделать их быстрыми . В AppFuse мы попытались включить многие из 14 правил для более быстрой загрузки веб-сайтов . У нас был фильтр gzip до того, как он остыл (2003), и мы заменили его на EhCache . Однако у пользователей возникли проблемы с обоими из них, как с XFire / CXF, так и с WebWork / Struts 2 и JSP . Из-за этих проблем мы отключили gzipping несколько выпусков назад.
Эта статья предназначена для того, чтобы показать вам, как вы можете сделать ваше веб-приложение AppFuse быстрее, без изменения какого-либо кода. Хорошей новостью является то, что это применимо к любому веб-приложению, которое вы можете развернуть за Apache.
В прошлую пятницу я отправил электронное письмо добрым людям в Contegix, чтобы узнать, могут ли они установить mod_pagespeed на сервер Apache, который находится перед * .appfuse.org. Моя цель состояла в том, чтобы улучшить оценки YSlow и PageSpeed приложений, размещенных на demo.appfuse.org . Я обнаружил, что они получают удручающий счет 24 и полагал, что мы могли бы сделать намного лучше. mod_pagespeed ускоряет работу вашего сайта и сокращает время загрузки страницы благодаря автоматическому применению лучших рекомендаций по производительности в Интернете. Это казалось простым решением.
К сожалению, мы не смогли использовать mod_pagespeed. От парней из Contegix:
Пытаясь установить mod_pagespeed, как вы и просили, мы обнаруживаем, что для этого требуются Apache httpd 2.2 и libstdc ++ 4.1.2, которые не поддерживаются в RHEL4. Чтобы заставить mod_pagespeed работать на вашей нынешней операционной системе, в основном означает перекатывание основных компонентов, что сделает их неподдерживаемыми. Боюсь, mod_pagespeed просто не подходит для вашей текущей конфигурации.
Поскольку я все еще хотел улучшить производительность, я выбрал другой маршрут: использование mod_deflate (для gzipping) и mod_expires (для заголовков expires). Я также включил KeepAlive в соответствии с рекомендациями PageSpeed Insights .
mod_deflate
mod_deflate уже был установлен в Apache (версия 2.0.52), поэтому все, что мне нужно было сделать, это настроить его. На RHEL4 Apache установлен в / etc / httpd и есть каталог conf.d, который содержит все файлы конфигурации. Я создал файл в /etc/httpd/conf.d/deflate.conf и заполнил его следующим:
# # mod_deflate configuration # <IfModule mod_deflate.c> SetOutputFilter DEFLATE AddOutputFilterByType DEFLATE text/plain text/html text/xml text/css application/xml application/xhtml+xml application/rss+xml application/javascript application/x-javascript DeflateCompressionLevel 9 BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html DeflateFilterNote Input instream DeflateFilterNote Output outstream DeflateFilterNote Ratio ratio LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%)' deflate </IfModule>
Сначала у меня были отдельные строки для всех типов контента (как рекомендовано в этой статье ). Команда поддержки Contegix выяснила решение (все, что нужно, чтобы быть на одной линии) за 14 минут, обновила конфигурацию и проверила, что она работает, используя страницу тестирования сжатия http .
mod_expires
mod_expires уже был установлен, поэтому я добавил файл конфигурации в /etc/httpd/conf.d/expires.conf . Я использовал это руководство и попросил Contegix о помощи, когда она не сработала. Их ответ на этот раз занял немного больше времени (49 минут), но они еще раз поняли:
Похоже, что FilesMatch не любит играть будет JkMount. Он работает с использованием типа контента.
Мой окончательный конфиг для expires.conf :
<IfModule mod_expires.c> ExpiresActive On <FilesMatch "\.(jpe?g|png|gif|js|css)$"> ExpiresDefault "access plus 1 week" </FilesMatch> ExpiresByType image/jpeg "access plus 1 week" ExpiresByType image/png "access plus 1 week" ExpiresByType image/gif "access plus 1 week" ExpiresByType text/css "access plus 1 week" ExpiresByType application/javascript "access plus 1 week" ExpiresByType application/x-javascript "access plus 1 week" </IfModule>
Я использовал «1 неделю», потому что сейчас мы немного меняем ситуацию, и у нас еще нет интегрированной идентификации ресурсов .
KeepAlive
Последнее, что я сделал для повышения производительности, — включил KeepAlive, отредактировав /etc/httpd/conf/httpd.conf и изменив значение Off на On .
# # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On
Резюме
В результате этих изменений наш показатель PageSpeed изменился с 24 до 96, а YSlow — с 90 до 98. Когда я начал этот эксперимент, я только пытался исправить demo.appfuse.org. Тем не менее, он также улучшил скорость всех других сайтов * .appfuse.org, включая Confluence , Bamboo , JIRA и FishEye . Спасибо за помощь Contegix! Есть хороший шанс, что вы возвращали мне несколько минут каждый день.