Как за 1 минуту ускорить Ваш блог в 3 раза

Сегодня прольем немного света на важный вопрос — скорость загрузки блога на WordPress. Этого дела никогда не бывает много, не так ли? )))

На эту тему уже написано несколько хороших статей, кое-что я уже писал сам на goodwin.wpbot.ru. Основным средством для ускорения блога до сих пор считают плагин WP Cache, и конечно же, не без оснований. Не имею намерений оспаривать полезность этого плагина, просто хочу рассказать еще об одном средстве, которое ему не уступает. Более того, оба средства можно использовать в комбинации, и это поможет получить еще более лучший результат.

Итак, речь пойдет о zlib компрессии. Это одна из традиционых опций на хостинге, которая отвечает за сжатие (компрессию) данных. Ее можно использовать в WordPress, для того, чтобы ускорить загрузку блога.

Что делает zlib? Он собирает php код и сжимает его. При обращении пользователя к интернет-странице, zlib отправляет сжатые файлы в браузер, декомпрессирует их и выводит на экран. Это позволяет загрузить страницу значительно быстрее, чем при отправке несжатых данных, которая используется обычно. Zlib компрессия работает с новыми и старыми версиями браузеров, поэтому проблем с совместимостью не существует.

Эта та базовая техническая информация, которую Вам следует знать для начала. Теперь посмотрим, как подключить сайт к zlib.

Для начала нужно удостовериться, что эта опция подключена к Вашему серверу на хостинге. Для этого есть два пути:

1. Написать в саппорт на хостинг и спросить, подключен ли zlib.
2. Проверить это самостоятельно. Для этого создайте файл, под любым названием, например, proverka.php, вставьте в него код

<?php phpinfo(); ?>

Сохраните и закиньте на сервер по фтп (в корневую директорию блога). После этого наберите в браузере путь

http://www.ваш сайт.ru/proverka.php

и Вы получите лист характеристик Вашего сервера (кстати, это уже сам по себе интересный хак =)). Пролистайте его, найдите блок zlib, если опция включена, то в блоке будет написано enabled. Это значит, что все ок. Если опция disabled, напишите на хостинг и попросите включить ее.

Теперь самое главное — как вставить ускоритель в шаблон. Откройте файл header.php и в самом верху, перед строчкой !DOCTYPE… вставьте этот код:

<?php
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', '1');
?>

В принципе, это все, Ваш блог ускорен. Вы можете зайти на http://tools.pingdom.com/ и проверить скорость загрузки и т.п.

Я поставил эту функцию себе на wpbot.ru, и скорость полной загрузки уменьшилась на 5 секунд. Для такого неповоротливого сайта, набитого скриптами, графикой и ссылками, это отличный результат.

PS Само наличие файла proverka.php для работы функции не требуется. После проверки данных сервера этот файл можно спокойно удалить.

Спасибо Брэду Нэю (bradblogging.com) за это решение.

Обсуждение (85)
  1. slaFFik:

    У нас с тобой мысли очень часто в одном русле идут))) Замечательное решение — поставьте все, кто имеет на то возможность!

  2. Алексей:

    Мой рекорд — с 18 сек. уменьшил время загрузки до 7,6 сек. При этом сервис показал все то, что тормозило сайт.
    Мерси за совет!

  3. Гончая:

    И для меня актуально, а то Мажордомо постоянно блокирует Гончую на 10 минут 3-4 раза в день

  4. Зайва Игорь Леонидович:

    Хорошее дело, тоже опробую сейчас, а то блог просто ужас как виснет у меня… м… надеюсь, это только у меня :)

    Хотел спросить, а можно ли как-то проверить скриптом наличие и включение сей библиотеки, чтоб воткнул код и не парился при переезде?

  5. PromoBear:

    Вот это да!
    Наконец-то я нормально ускорил свои блоги!
    Спасибо огроменное!

  6. Goodwin:

    к комментарию 4

    php phpinfo, читайте в тексте.

  7. Plazik:

    Можно ли использовать этот прием и с другими движками? Не только вордпресс?

    • Карп:

      Сегодня попробовали на ждулме, результат тема стала голой, страницы пропали, меню визуально исчезло, но при наводке палец появлялся, при клике строка оставалась также. Вшивалось в тело темы, так как тема не имеет файла header.php. вот такие вот дела)

  8. Yohan:

    Такой вопрос — а как к пожатым страницам относятся поисковые боты? C этим все ок?

  9. Goodwin:

    К комментарию 7, Plazik, извините, не могу ответить на Ваш вопрос.

  10. Goodwin:

    Yohan, здравствуйте, боты видят тот же исходный код, что и Вы, поэтому проблем с этим нет. Причем, проблем нет также и с другими ботами, например, с саповскими — проверил на своем блоге.

  11. elektrod:

    Что-то не понятно, у меня допустим стоит плагин кеширования hypercache, там есть опция сжатия страниц gzip. Ее нужно отключать, когда используешь zlib? Просто не ясно, эти функции идентичны или работают они по-разному.

  12. dr_fucker:

    К комментарию 7: да, так можно сжать ЛЮБУЮ страницу, даже вне CMS. Главное, чтобы хостинг поддерживал эту функцию.

  13. Goodwin:

    elektrod, хорошо, что спросили, это важный вопрос. На самом деле, вместе zlib и gzip не работают. В данном случае, либо одно, либо другое.

    dr_fucker, спасибо.

  14. elektrod:

    Тут более интересно, что меньше грузит CPU сервера. Думаю все-таки использование zlib компрессии меньше загружает процессор, т.к эта функция «встроена» в хостинг, можно сказать интегрирована на более низком уровне, нежели через функции плагина.

    Кстати, не могу адекватно потестить, что все-таки предпочтительней в плане загрузки. Пользовался несколькими сервисами по оцениванию скорости загрузки сайтов, так у меня что с включенным кешированием, что без оного разница в доли секунды. Пробовал на нескольких сайтах, которые установлены на VDS, правда они малость оптимизированы :-)

  15. Goodwin:

    elektrod, наверное, у Вас сайт и так грузится моментально )))

  16. lolken:

    А у меня вот такая ошибка вылезает, хотя сделал как говорили

    Parse error: parse error, unexpected ‘)’ in /pub/home/blblabla/blogdoc/wp-content/themes/Basic/header.php on line 3

    zlib включён.

  17. dibor:

    Спасибо, Goodwin, скорость загрузки уменьшилась на 4,7 (с 11,3 до 6,6)

  18. RodgerFox:

    Если пользователь ещё не знает подлючен ли zlib. Эти 2 строчки в header.php не повредят?
    Ну если точнее, не подключая zlib, и если будут написаны эти строчки, то нечего существенного не случится, да?! (*^_^*)
    Заранее большое спасибо.

    • Goodwin:

      2 RodgerFox, не нужно действовать наобум. проверьте доступность функции с помощью теста, а потом подсоединяйте саму функцию.

  19. elektrod:

    Goodwin, а вы уверены, что нужно использовать косые кавычки в коде, у меня при их использовании неправильно подсвечивается синтаксис(типа неправильный php код), с прямыми кавычками все ОК. Использовал Editplus

    • Goodwin:

      elektrod, Вы правы. Косые кавычки — это дефект использования плагина code colorer, с помощью которого я вывожу коды в записях и комментариях. Попробую исправить. Кавычки, конечно же, должны быть прямые.

  20. ortus:

    В очередной раз большой РЕСПЕКТ тебе goodwin

  21. krivylkin:

    Спасибо goodwin, сайт просто начал летать.
    Спасибо!
    Спасибо!
    Спасибо!

    • Goodwin:

      мне то за что ))) спасибо чуваку bradblogging.com, я же просто оказался в нужное время, в нужном месте )))

  22. Alex:

    Немного не поняла. Код надо вставлять как есть? Я вставляю, и у меня вместо одинарных кавычек — кракозябры. Кодировка — utf8 без сигнатур. Или кавычки в коде надо заменить на обычные английские одинарные кавычки?

    • Goodwin:

      Alex, дело было в кавычках — я подправил в коде: кавычки должны быть одинарные прямые. Попробуйте снова.

  23. ImidgX:

    Как альтернативу, можно использовать такой код:
    <?php ob_start(«ob_gzhandler»); ?>
    так же включает gzip сжатие.
    Проверить включен gzip или нет можно здесь — whatsmyip.org/http_compression/

  24. klionpsy:

    проверил , всё включено.
    поставил код в header
    теперь вот что выдает
    ��W[sE~�_ьU�`�Lv��DvCi�%U�T��dufzg[��L�n�&����J������A�/��#�3�;;��2�>$��s.Ӎ#�ﭵ>8s�uT��>�� Ӷ�ͯ��zk���v�ӬfͱV��T*�ܷ����(�n��~���[Q�٭ {�l�Hy�r�k�n��?L�S���se�4|����4���� �!���$jK_V� �r(��Ю��W G�*6��]�kkQ�D���N, � fMC�me�����$���z�\6�M�T��7�W_Y��k�����A���w���י���c

  25. Goodwin:

    klionpsy, ну если не работает — либо напишите на хостинг в саппорт, попросите помочь, либо откажитесь от этого варианта. Поставьте wp super cache для ускорения.

  26. klionpsy:

    Гудвин, я просто хочу понять почему у меня не работает=))

    вот текст
    ZLib Support enabled
    Stream Wrapper support compress.zlib://
    Stream Filter support zlib.inflate, zlib.deflate

    может подскажете чего? =)

    интересно мне очень.
    спасибо=)

  27. Антон:

    Спасибо за способ, реально скорость увеличилась в 2 раза, но есть небольшое но… с таким кодом отказывается работать All in One SEO Plugin, случайно заметил когда увидел неоптимизированные заголовки, если удалить строки gzip то всё ок, может подскажите как их подружить?

  28. Pavels Misins:

    Вау, спасиба :)

  29. Алексей:

    На графике видны все процессы, которые подгружают сайт.Посмотрел на графике самый тормозящий плагин и убрал его и теперь летаю, словно выпил red bull. Goodvin, спасибо!

  30. Artem:

    поставил wp-cashe
    Вылезает такое…

    Warning: sem_get() [function.sem-get]: failed for key 0x152b: Permission denied in /home/u*****/********/www/wp-content/plugins/wp-cache/wp-cache-phase2.php on line 98

    Warning: Cannot modify header information — headers already sent by (output started at /home/u*****/888888888/www/wp-content/plugins/wp-cache/wp-cache-phase2.php:98) in /home/u*****/***********/www/wp-login.php on line 290

    Посоветуйте как избавиться от этого, пожалуйста.

  31. Goodwin:

    Artem, я не работал с wp-cache, поэтому нечего не могу вам подсказать. попробуйте спросить на mywordpress.ru/support

  32. dibor:

    2 Алексей, пост 33

    я что-то пролетел мимо, а где там можно эти графики посмотреть?

    Кстати, инфу можно получить и без файла proverka.php, достаточно набрать в адресной строке — yoursite/info.php

  33. RodgerFox:

    а как сделать так чтобы ограничить трафик для каждого ип, это будет интиресное решения чтобы оградить wp от DoS

  34. Алексей:

    dibor, график загрузки страницы в сек.(
    Load time in seconds)Напротив графика загрузки, url, а там уже можно прикинуть что за зверь тормозит процесс.

  35. Бабай:

    Спасибо!
    Сработало на обеих сайтах.

  36. klionpsy:

    Гудвин, а вот в .htacess есть код для сжатия .

    Это тоже самое?

    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/javascript text/css application/x-javascript
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4.0[678] no-gzip
    BrowserMatch bMSIE !no-gzip !gzip-only-text/html

  37. mirrors:

    Интересная штука получается.
    zlib у хостера подключен. Пишу этот код в header.php и выдает крякозябры. Убираю знак подчеркивания между слов «output_compression» в обеих строчках — работает.
    НО! Без этого кода время загрузки 2,9-3,9 секунд, а с кодом 4,7-5 секунд.

  38. 1nSane:

    ini_set(‘zlib.output_compression_level’, ‘1’);

    А сколько уровней есть? почему именно 1-й ставить?

  39. Goodwin:

    Здравствуйте, а почему Вы думаете, что 1 это указание уровня?

  40. 1nSane:

    Отсюда: php.ru/manual/ref.zlib.html
    Читаем: zlib.output_compression_level (integer) = Уровень сжатия.
    Потом нашел совет (там играют Level’ом от 1 до 9)… I would *strongly* recommend not setting it above 1. 1 is the best cost-to-performance you will likely get out of it. 2 and above provide minimal gains in performance (i.e. the size of the page doesn’t shrink very appreciably) but the performance hit is much greater.

  41. Goodwin:

    Спасибо. Я этого не знал. Теперь, благодаря Вам, буду знать.

  42. ws256:

    Гудвин, а как насчет совместного использования с кешем Макса? Я знаю вы его использовали.

  43. Goodwin:

    ws256, кэш от Макса использую постоянно. насколько я себе представляю, если этот кэш включен, то вышеописанный метод не понадобится.

  44. ws256:

    Я тоже купил себе этот скрипт. Но тут такой момент, если вам интересно (я тоже люблю делать шаблоны на wp и вот мое последнее творение ввв.vmasshtabe.ру) сам сайт весит 450 кб (это довольно много) половина из общего объема это жава скрипты. Так вот в этой статье используется метод сжатия отдаваемого трафика на уровне а апача, вот если бы у меня работал gzip, то было бы не 450 а 140 кб, так вот я думаю, а если подключить zlib на уровне отдачи трафика в скрипте макса, тогда возможно будет такой же результат… Интересно ваше мнение по этому вопросу.

  45. Нодар:

    zlib включен, код поставил — ничего не ругается, но ничего не ускорилось :(

  46. mid:

    «При обращении пользователя к интернет-странице, zlib отправляет сжатые файлы в браузер, декомпрессирует их и выводит на экран.»
    А я всегда думал, что РНР выполняется на WEB-сервере (серверные скрипты), а в браузер отправляется HTML-код..?

  47. BimBom:

    Goodwin, подскажите пожалуйста, хостер ответил, что эта опция включена. В этом случае понадобится вставлять код или нет?

  48. Gorets:

    Спасибо, Goodwin!
    Великолепный пост! Подсказка просто от души!
    Ускорился в два раза — с 8 до 4 секунд.

  49. Olega:

    Доброго суток. А Вы знаете ув. Гудвин, у меня до установки ускорителя скорость на одном из блогов была 2.8 сек, после установки 3.6. Вот парадокс. Он правда маленький пока, но несколько погодя.

  50. Иван Синявский:

    Огромное спасибо, как оказалось zlib работает. Включил код в шаблон. Скорость увеличилась.

  51. BimBom:

    Полёт нормальный:-)Один сайт порадовал, а второй — менее забитый,улетел и обещал вернуться) Спасибо!

  52. Фёдор Ашифин:
    <p>Нужно выбирать либо Hyper Cache либо zlib.</p>
    <p>Сам напоролся на эту ошибку, сразу не протестил в браузерах Опера и Экспловер вышли ошибки...</p>
    <p>Мозила показала всё отлично.</p>
    <p>Сейчас оставил Hyper Cache</p>
    Кому интересно ashifin.net/stati/vnimanie-kak-snyat-tormoza-s-wordpress.html - вот что я пробовал.
    </a>
  53. Карп:

    Доброго времени суток. У меня сайт имеет много изо. и некоторые люди жалуются что мол долго грузится, шаблон разрезан не очень хорошо, видно поленился парень который его делал, попробовал решить таким способом, в среднем стало 1.21 seconds, но все равно жалуются, решил изменить цифру 1 в коде,

    ini_set('zlib.output_compression_level', '1');

    на 9, стало 2.45 seconds. Параллельно стоит wp-cashe. Возник вопрос, это влияет на степень сжатия? Если да, то почему время увеличилось? И можно ли как то применить этот код к определенному изображению в шаблоне, ну чтобы она легче стала? И если можно еще вопрос, несколько не в тему, за что прошу простить. — как включить форматирование текста, на сайте не отображает черточки и точки и нумерацию
    1. Написать …..
    2. Проверить ….
    В редакторе их видно а на сайте нет, приходится перед текстом ставить только цифры(((

    Спасибо в очередной раз! )))

    • Goodwin:

      менять уровень не нужно. что касается увеличения скорости загрузки, тут играет роль все — наполнение, наличие технической графики, используемые плагины. Попробуйте избавиться от лишних плагинов, пересохраните техническую графику шаблона (которая используется в дизайне) с более низкими параметрами (и, соответственно, с более меньшим весом). попробуйте бесплатную версию кэша от Макса. понимаю, что это общие вещи, но честно говорю, что я не программер, и остерегусь давать советы в тех областях, в которых не являюсь специалистом.

      • Карп:

        Спасибо за скорый ответ! Большинство из предложенного сделано, техническая графика ужата (пришлось пожертвовать качеством). Плагинов минимум. Вы абсолютно правы что это общие вещи, но они не маловажны!))) Но все равно спасибо, завтра попытаюсь узнать у хостера, при дельном совете с их стороны отпишу. Goodwin, а по поводу маркеров, нумерации, и многоуровневой нумерации не подскажите? Там надо поменять на то что это точно а вот на что, где и как ))) Спасибо еще раз!))

  54. RodgerFox:

    Убирайте графику! используйте css3 как можно меньше графики, иконочки и картинки к пастам. из 7.4с. теперь грузится 0.1 =)
    Большое спасибо Гудвин.

    • Goodwin:

      css3 пока не нужно внедрять — его еще не все браузеры понимают.

      • RodgerFox:

        не все? ну если только опера и то под неё дописать 1 строчку. А вот IE))) Ухх…

  55. ZetRider:

    Выдает ошибку :(

    Warning: ini_set() [ref.outcontrol]: Cannot change zlib.output_compression - headers already sent in /home/.../www/wp-content/themes/cleanPRESS-theme/cleanPRESS/header.php on line 2
  56. BimBom:

    Что то не пойму. На одном сайте работает нормально. На другой вставляю код и после этого выдаёт ошибку при переходе на главную страницу. Попробовал ввести другие страницы сайты — переходит нормально. Но при нажатии на кнопку главная или на картинку в хэдере показывает ошибку.

    • BimBom:

      Ещё на одном вставил, главная страница открывается но над шапкой такой код вылазит Warning: ini_set() [ref.outcontrol]: Cannot change zlib.output_compression — headers already sent in /home/здесь идёт название дирректории/header.php on line 2

      • Goodwin:

        Игорь, привет, а хостинг у тебя один и тот же или разные? Если один — то это очень странно. Если разные — нормально ))

        • BimBom:

          Привет Алекс, хостинг один и тот же. На двух Эмуляторах работает. На Калине тоже работало. Потом переделал сайт и забыл сделать это действие. Сейчас попробовал, но не вышло. Проверил как раз на новом сайте, та же история.

          • Goodwin:

            а тестом проверил на новом аккаунте наличие этой функции в настройках сервера?

            • BimBom:

              Сама функция включена, но во втором столбце:
              Local Value Master Value
              zlib.output_compression Off Off
              zlib.output_compression_level -1 -1
              zlib.output_handler no value no value

  57. Irina:

    здравствуйте, вставила ваш код как сказано, но сайт вовсе пропал…просто бг отображается чистый и все….подскажите пожалуйста с чем это связанно…

    • Goodwin:

      Здравствуйте,
      либо вставили некорректно, либо для Вашего хостинга такой вариант не подходит. Просто зайдите на Ваш сервер по FTP, откройте header.php в папке темы и удалите этот код. Все вернется на место. Если не знаете Ваших настроек FTP — спросите у хостера или посмотрите сами в панели управления на хостинге, обычно все эти вещи прописаны там.

      • Ирина:

        как вернуть то понятно…читала файлик инфо написано опция включена)
        сайт сам на странной весьма теме которая настраивается (шрифт отступы количество сайтбаров и т д) с админке ВП. может ли это как то повлиять на то что этот метод не сработал?

        • Goodwin:

          Сложно сказать, не зная сайта и темы… Вы можете легко это проверить — поставьте на пару минут любую другую тему, ночью, когда посещаемость снижается, и включите в нее код, посмотрите, будет ли повторение ситуации.

  58. Al-Iskander:

    А у меня ничего не изменилось… как без кода сайт загружался за 0,9 секунды, так и с кодом — без изменений. о_О

  59. Sveta:

    Проверила, zlib, включен на хостинге. Для большей уверенности спросила на хостинге. Они сказали что есть и прислали такое:
    zlib
    ZLib Support enabled
    Stream Wrapper support compress.zlib://
    Stream Filter support zlib.inflate, zlib.deflate
    Compiled Version 1.2.3
    Linked Version 1.2.3

    Но когда я код вставляю в heder.php, сайт становится недоступен и пишет такую ошибку:

    Страница, которую вы пытаетесь просмотреть, не может быть показана, так как она использует неверную или неподдерживаемую форму компрессии

    В чем может быть проблема?

    • Goodwin:

      Я не могу технически, на уровне админа хостинга, объяснить Вам механизм совместимости данной опции с настройками Вашего сервера. Да и нужно ли оно Вам? ))) Попробуйте, в таком случае, другие способы оптимизации — кэширование, уменьшение веса графики и т.п.

      • Sveta:

        Так и сделаю, просто я думала, что можно что-нибудь в коде подправить, чтоб и у меня заработало. Ведь этого дела никогда не бывает много, не так ли? )))

  60. Денис:

    А у меня чудеса какие-то, вот результаты по скорости загрузки с сайта tools.pingdom.com/

    1. До установки вышеозначенного кода — 3,5 сек
    2. После установки кода — 4,7 сек
    3. После удаления кода — 1,8 сек

    Как Вы думаете, в чем фишка?

    Не то, чтобы я критикую этот метод, на другом сайте он у меня нормально отработал, а на этом я и сам не ожидал подобного.

    Чисто из любопытства, отчего такое может быть?

  61. Борис netocrat Ходорковский:

    Попробовал, деятельно дает отличный результат.
    Единственный момент, одна из страниц выдала ошибку:

    Ошибка 330 (net::ERR_CONTENT_DECODING_FAILED):
    Неизвестная ошибка.

    Что это может быть, коллеги?
    Адрес страницы: httр://odessacamp.com.ua/barcamp-participants-bloggers

    Спасибо за подсказку.

    • Goodwin:

      непонятно. страница на первый взгляд в порядке. а чем сделана таблица? плагином? какой-то скрипт?

  62. Noisy Wizard:

    «Что делает zlib? Он собирает php код и сжимает его. При обращении пользователя к интернет-странице, zlib отправляет сжатые файлы в браузер, декомпрессирует их и выводит на экран.»
    Звучит просто жутко))) php-код никто не сжимает, он просто выполняется, а сжимается то, что сервер отправляет браузеру, и браузер, естественно, сам декодирует сжатые данные, а не библиотека на сервере)