1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Увеличение скорости загрузки форума на XenForo

Тема в разделе "Оптимизация XenForo", создана пользователем Mefodian, 31.01.2013.

Загрузка
  1. Mefodian

    Mefodian Местный

    Регистрация:
    20.01.12
    Сообщения:
    493
    Симпатии:
    220
    Версия XF:
    1.1.3
    Наткнулся в всемирной паутине на интересную статью по увеличению скорости загрузки страниц.
    Протестировал - работает. Скорость загрузки согласно плагину "PageSpeed Insights (by Google)" увеличилась.
    Грех будет не поделиться.

    Все браузеры давно умеют кешировать статические данные (картинки, скрипты, css и т.д.), но для этого веб-сервер должен сообщить браузеру на сколько он должен кешировать эти данные с момента первого обращения к этим данным. Т.е. Если пользователь зашёл на сайт - загрузились к примеру 4 скрипта по 10кб - это 40кб, вроде бы не страшно, однако при каждом переходе по страницам сайта браузер будет загружать эти скрипты вновь и вновь, потому что думает, что скрипт обновляется при каждом обращении к нему. Поэтому логично "сказать" браузеру, что бы он проверял не обновился ли этот скрипт не при каждом обращении, а лишь раз в месяц или раз в год.

    Как раз для указания "времени жизни" закешированных данных, правильной обработки HTTP-заголовков браузерами и предназначен этот код:

    Код:
    <IfModule mod_expires.c>
        ExpiresActive on
     
        ExpiresDefault "access plus 1 month"
     
        # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5)
        ExpiresByType text/cache-manifest "access plus 0 seconds"
     
        # html
        ExpiresByType text/html "access plus 0 seconds"
     
        # XML
        ExpiresByType text/xml "access plus 0 seconds"
        ExpiresByType application/xml "access plus 0 seconds"
     
        # RSS
        ExpiresByType application/rss+xml "access plus 1 hour"
     
        # Favicon
        ExpiresByType image/x-icon "access plus 1 week"
     
        # Картинки
        ExpiresByType image/gif "access plus 1 month"
        ExpiresByType image/png "access plus 1 month"
        ExpiresByType image/jpeg "access plus 1 month"
        ExpiresByType image/jpg "access plus 1 month"
     
        # HTC файлы  (например css3pie)
        ExpiresByType text/x-component "access plus 1 month"
     
        # Нестандартные шрифты сайта
        ExpiresByType application/x-font-ttf "access plus 1 month"
        ExpiresByType font/opentype "access plus 1 month"
        ExpiresByType application/x-font-woff "access plus 1 month"
        ExpiresByType image/svg+xml "access plus 1 month"
        ExpiresByType application/vnd.ms-fontobject "access plus 1 month"
     
        # CSS и javascript
        ExpiresByType text/css "access plus 1 year"
        ExpiresByType application/javascript "access plus 1 year"
     
    </IfModule>
     
    # Cache-Control браузера
    <ifModule mod_headers.c>
        # 30 дней
        <filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
        Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
        # 30 дней
        <filesMatch "\.(css|js)$">
        Header set Cache-Control "max-age=2592000, public"
        </filesMatch>
        # 2 дня
        <filesMatch "\.(xml|txt)$">
        Header set Cache-Control "max-age=172800, public, must-revalidate"
        </filesMatch>
        # 1 день
        <filesMatch "\.(html|htm|php)$">
        Header set Cache-Control "max-age=172800, private, must-revalidate"
        </filesMatch>
    </ifModule>
     
    <IfModule mod_setenvif.c>
        #Эта конструкция для говнобраузера
        #Запрет отдачи HTTP-заголовков Vary
        BrowserMatch "MSIE" force-no-vary
        BrowserMatch "Mozilla/4.[0-9]{2}" force-no-vary
    </IfModule>



    Как видно код разбит на блоки-условия. Если какой то из используемых в коде модулей не включен - блок будет пропущен.
    Так же в коде прокомментированы сроки, на которые кешируются статические данные и представлен фикс для IE.

    Для подключения его нужно вставить в самое начало файла .htaccess и обновить кеш в админке + в браузере для проверки.
     
    fly_indiz, Telia, Lex и ещё 1-му нравится это.
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Если что, по дефолту скрипты, как и картинки грузятся из кеша браузера. Во всяком случае Firefox точно ксеновские скрипты повторно не грузит. Т.е. он получает заголовок 304 (Not modified), на что адекватно реагирует. При этом никаких манипуляций на сервере делать не требуется.
    Не знаю, может быть хром как-то иначе интерпретирует этот заголовок и пытается загрузить их по новой... Возможно. Я не проверял, так как хромом не пользуюсь.
     
    Oleg-2012 нравится это.
  3. Karlitos

    Karlitos Активный пользователь

    Регистрация:
    10.01.11
    Сообщения:
    45
    Симпатии:
    4
    Версия XF:
    1.1.1
    Реально быстрей стал грузить, хром покрайней мере
     
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ну я проверял в FireBug во вкладке "Сеть". Там видно, что грузится, откуда и с какими заголовками. Если хром вдруг после тех манипуляций стал работать быстрее, то мне грустно, что разрабы хрома кладут на стандарты... Ведь 304 заголовок четко дает указание, что контент не изменился, а поэтому его не нужно грузить повторно.
     
  5. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    700
    Симпатии:
    297
    Хром, так себе браузер и в плане безопасности тоже, а на стандарты они с самого начала создания своего браузера кладут !

    Вот, что значит реклама и пиар, ведь реально этот браузер так себе и в плане технологий, однако сейчас больше половины рунета сидит на нём !:eek:
     
    Finelai нравится это.
  6. 1981

    1981 Местный

    Регистрация:
    15.10.11
    Сообщения:
    273
    Симпатии:
    19
    Версия XF:
    1.1.4
    Куда данный код вставить нужно?
     
  7. Mefodian

    Mefodian Местный

    Регистрация:
    20.01.12
    Сообщения:
    493
    Симпатии:
    220
    Версия XF:
    1.1.3
    последний абзац первого сообщения прочтите
     
    1981 нравится это.
  8. Karlitos

    Karlitos Активный пользователь

    Регистрация:
    10.01.11
    Сообщения:
    45
    Симпатии:
    4
    Версия XF:
    1.1.1
    Но как то жестко он стал кешировать, чтобы увидеть сообщение нужно два раза обновить страницу
     
  9. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Эх. Еще раз повторю. В ксене все заголовки корректно формируются. Поэтому нет необходимости производить какие-то манипуляции на стороне сервера. То, что было в 1 посте темы, это фактически попытка исправить некорректные настройки сервера и какие-либо странные выдачи движком контента.
    Если все работает, то не пытайтесь делать такие настройки. Результат масла масляного - в посте 8 этой темы.
    Можно и главную страницу форма закешировать по самое не могу, но вот оно надо?

    И я уже говорил, что можно проверить, как грузятся страницы и дополнительный контент в том же FireBug (для Firefox). Думаю, что и для Chrome существуют подобные средства. Вот сначала проверьте, а уже потом что либо пробуйте сделать.

    И вот еще какой нюанс. Проверять кеш браузера нужно при рефреше страницы, либо при переходе на другую страницу форума. Ведь хотя бы один раз нужно что-то загрузить, чтобы оно в кеш попало. Если, к примеру, при переходе на другую страницу форума вы увидите во вкладке "Сеть" FireBug (для Firefox), что скрипты с форума и оттуда же css не подгружаются повторно (будут блеклыми), значит кеш браузера работает. Думаю, что и в хроме должно быть аналогично.

    P.S. Что-то в последнее время вредных советов стало появляться много....
     
    Karlitos, Oleg-2012 и Yoskaldyr нравится это.
  10. Oleg-2012

    Oleg-2012 Местный

    Регистрация:
    21.04.12
    Сообщения:
    700
    Симпатии:
    297
    А может завести раздел: "Вредные советы" ?:D
     
  11. eLigan

    eLigan Местный

    Регистрация:
    27.03.11
    Сообщения:
    92
    Симпатии:
    19
    Версия XF:
    1.5.2
    Как на nginx + php-fpm это реализовать? Что в nginx.conf писать нужно?
    Заранее благодарен ...
     
  12. Averus

    Averus Пользователь

    Регистрация:
    26.03.12
    Сообщения:
    51
    Симпатии:
    5
    Версия XF:
    1.1.2
    не дописывает в заголовки не пойму почему... Гугл спид тест говорил - нет кеша
     
  13. Union

    Union Местный

    Регистрация:
    12.10.11
    Сообщения:
    306
    Симпатии:
    86
    Версия XF:
    1.1.2
    Код:
     
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
            expires 7d;
    }
    добавить в секцию server
     
    eLigan нравится это.
  14. n20pro

    n20pro Местный

    Регистрация:
    18.12.12
    Сообщения:
    82
    Симпатии:
    1
    Версия XF:
    1.1.1
    А можно просто рестануть vds без перестройки кеша , а то стрёмно
     

Поделиться этой страницей