Перейти к содержимому



Способы ускорения DataLife Engine (DLE)

#1 GVA

GVA
  • Супермодератор
  • 998 сообщений
  • Репутация: 201
3

Отправлено 11 Январь 2014 - 10:45

Доброго времени суток, уважаемые формучане!

Сегодня хочу рассказать вам о способах ускорения лучшего новостного (и не только) движка.
Кто первый раз сталкивается с ним может почитать его возможности и преимущества на официальном сайте - http://dle-news.ru/
Движок платный, но очень прост в управлении и гибок!

Конечно, некоторые скажут что он и так очень быстрый. Действительно, он оптимизирован замечательно, создаёт минимальную нагрузку на сервер, но это не предел. В этом топике будут рассмотрены методы ускорения DLE (как ускорить DLE). Все советы применимы к актуальной версии DLE и будут успешно работать и для новых версий. По моим наблюдениям, структура DLE в последних версиях не менялась. Так же эти советы подойдут и для более поздних версий, но если у вас что-то не сработало с версией 9.0 и ниже то прошу не захламлять топик вопросами относительно старых версий, а просто обновить её до актуальной.

Итак, начнём, но сначала проверьте свой сайт этим сервисом:

http://developers.go...speed/insights/

а то вдруг у вас всё хорошо, а я заставляю ещё что-то делать :)

1. Кеширование данных.

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

Для этого в корневой файл .htaccess нужно вставить данный код:

<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>

или

<IfModule mod_expires.c>
Header append Cache-Control "public"
FileETag MTime Size
ExpiresActive On
ExpiresDefault "access plus 0 minutes"
ExpiresByType image/ico "access plus 1 years"
ExpiresByType text/css "access plus 1 years"
ExpiresByType text/javascript "access plus 1 years"
ExpiresByType image/gif "access plus 1 years"
ExpiresByType image/jpg "access plus 1 years"
ExpiresByType image/jpeg "access plus 1 years"
ExpiresByType image/bmp "access plus 1 years"
ExpiresByType image/png "access plus 1 years"
</IfModule>


Разбирать за что отвечает каждая строчка кода нет смысла. Стоит сказать, что первый код больше оптимизирован для DLE, но можно использовать и второй.


2. GZIP-СЖАТИЕ

Для включения данной функции, господа, вам нужно проследовать в админку и в настройках системы найти gzip-сжатие для js и css и активировать их. Думаю, сами найдёте?) Даже раздел вам указал.

Дальше вам нужно включить сжатие для CSS файлов, которые, как правило, лежат в main.tpl
Для этого найдём их, они будут у вас выглядеть примерно так:

<link media="screen" href="{THEME}/styles/bbcodes.css" type="text/css" rel="stylesheet" />
<link media="screen" href="{THEME}/styles/slider.css" type="text/css" rel="stylesheet" />
<link media="screen" href="{THEME}/styles/style.css" type="text/css" rel="stylesheet" />
<link media="screen" href="{THEME}/styles/engine.css" type="text/css" rel="stylesheet" />


Вам нужно внимательно посмотреть на код, расположенный выше и преобразовать его в следующий:

<link rel="stylesheet" href="/engine/classes/min/index.php?charset=windows-1251&amp;f={THEME}/style/style.css,{THEME}/style/slider.css,{THEME}/style/bbcodes.css,{THEME}/style/engine.css&amp;7" />

Данный код тоже не объясняю, кому интересно спросите, персонально разъясню каждую деталь. По аналогии делается и с js-файлами, с ними должно получиться что-то в этом роде:

<script type="text/javascript" src="/engine/classes/min/index.php?charset=windows-1251&amp;f={THEME}/js/libs.js,{THEME}/js/script.js&amp;7"></script>


3. Переносим все скрипты в конец страницы.

Задача состоит в том, чтобы перенести из верхней части страницы все скрипты - в нижнюю. Тем самым они будут инициироваться после загрузки основного содержимого. Т.е. мы убираем проблему, когда пользователь заходит на страницу и в течении 10 секунд смотрит на пустой экран (ждёт пока загрузятся все скрипты, а потом контент). Мы же сделаем чтобы сначала загрузился контент и оформление, а затем уже подгружались скрипты.

Для этого в корне сайта открываем index.php
Находим строчку:
$tpl->set ( '{headers}', $metatags."\n".$js_array );

Заменяем на
$tpl->set ( '{headers}', $js_array );
$tpl->set ( '{metatags}', $metatags );

Это всё для того, чтобы после переноса скриптов у вас не оказались и метатеги в самом конце страницы. Так нельзя, для этого и разделяем их вывод.

Открываем main.tpl своего шаблона
Находим {headers} и заменяем на {metatags} и удаляем {AJAX}

Спускаемся в самый низ, находим
</body>
и перед ним вставляем {headers}{AJAX}

Далее между
{headers}{AJAX}
и
</body>
подключаем все щётчики посещаемости (притом не десять(!), вам хватит и одного "ливера" ), прочие скрипты в том числе и код соц кнопок, код вк и так далее.


4. Оптимизация изображений

Ну, думаю тут вообще всё просто. Этот пункт так же применим ко всем движкам. Вам нужно сократить размер всех изображений. Если у вас Интернет быстрый, то проблем с их загрузкой у Вас нет. Но а как же, если он медленный? И не у вас, а у ваших посетителей? Для этого поработайте над изображениями.

Для этого используйте (или хотя бы старайтесь использовать) изображения такого размера, которого нужно показывать на сайте. Не надо с помощью CSS изменять огромную картинку на миниатюру. Для уменьшения изображения воспользуйтесь фотошопом.
Альтернатива фотошопу очень хорошая бесплатная программка "PaintNET". Там можно уменьшить размер изображения до нужных параметров.

Так же в том же паинтнете при сохранении картинки есть ползунок, который может принимать значения от нудя до ста. Эта настройка - качество изображения. Поставьте, скажем, на 70. Тем самым вы уменьшите качество картинки без потери для зрения человека, и, тем самым, сократить его размер.



В заключении проверьте свой сайт ещё раз с помощью этого сервиса

http://developers.go...speed/insights/

и скажите, сколько вам удалось выиграть баллов, после проделанных действий?


Материал был подготовлен специально для форума masterWEBS.ru
Данные советы не моя разработка, возможно, многие о них знают, а кто-то только что узнал.
Автор: Вадим Домашнев (GVA)

 

 

Сообщение отредактировал GVA: 11 Январь 2014 - 19:39

  • 1

#2 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 11 Январь 2014 - 12:40

Если на сервере установлен nginx, если не ошибаюсь, то сжатие некоторых типов файлов, например js, можно настроить только в конфинге nginx. Файл настроек htaccess здесь не поможет

Сообщение отредактировал Ixman: 11 Январь 2014 - 21:22

  • 0

#3 GVA

GVA
    Topic Starter
  • Супермодератор
  • 998 сообщений
  • Репутация: 201

Отправлено 11 Январь 2014 - 13:16

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

В этом случае не кешируется только js, вы правы. Всё остальное прекрасно кешируется
  • 0

#4 Thrash

Thrash
  • Пользователь PRO
  • 620 сообщений
  • Репутация: 53

Отправлено 11 Январь 2014 - 18:10

Классная статья, жаль что плюсик только один раз в неделю можно ставить :(

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"

Я так понял, что картинки этот код кеширует на месяц? "1 month" — 1 месяц. А можно, чтобы навсегда?

Сообщение отредактировал Thrash: 11 Январь 2014 - 18:10

  • 0
Изображение


#5 GVA

GVA
    Topic Starter
  • Супермодератор
  • 998 сообщений
  • Репутация: 201

Отправлено 11 Январь 2014 - 18:20

Поняли правильно.

Можете поставить один год - "access plus 1 years" это тоже очень много, чуть меньше, чем "навсегда" :)
Ну а реально навсегда сохранить их в кэше не получится, лично я такого решения не подскажу вам, да и незачем их туда на столько пихать :)
  • 0

#6 Thrash

Thrash
  • Пользователь PRO
  • 620 сообщений
  • Репутация: 53

Отправлено 11 Январь 2014 - 18:59

а почему именно месяц?
  • 0
Изображение


#7 GVA

GVA
    Topic Starter
  • Супермодератор
  • 998 сообщений
  • Репутация: 201

Отправлено 11 Январь 2014 - 19:27

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

Допустим, что, по вашему мнению, будет, если вы существенно поменяете файлы стилей и измените картинки, при этом кеширование всего стоит на год?


  • 0

#8 Thrash

Thrash
  • Пользователь PRO
  • 620 сообщений
  • Репутация: 53

Отправлено 11 Январь 2014 - 21:08

GVA, ну если изменить картинки, кеширование должно произойти заново.
  • 0
Изображение


#9 GVA

GVA
    Topic Starter
  • Супермодератор
  • 998 сообщений
  • Репутация: 201

Отправлено 11 Январь 2014 - 21:18

Thrash, да, до тех пор пока не изменился кешируемый контент.
Кешировать все, что поддается кешированию и при этом не изменяется относительно долго. Кешировать бессмысленно лишь ту информацию, которая постоянно меняется Поэтому, особой разницы в том, поставить месяц или год я не вижу. Если я в чём то неправ, то, надеюсь, меня поправят более узкие специалисты в конкретном вопросе :)
  • 0

#10 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 11 Январь 2014 - 21:24

Да тема полезная, но не полная по работе с PageSpeed. Кстати я хотел подобную темку накатать, только общую для всех движков
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru