Вилизуємо DLE до блиску
Створюю і просуваю комерційні сайти та інтернет-магазини з 2008 року. 14-05-2015, 22:13 22 021 0Оптимізація DLE здається зайвою справою, адже двигунчик і так реактивний , проте при великій кількості додаткових скриптів, хаків та модулів це стає необхідною справою.
Увага! Стаття для ДЛЕ 10-11 версій.... В 12 версії це вже не актуально!!!
1. Перенесемо скрипти в кінець сторінки:
Перше, що найпростіше зробити в чистій верстці для прискорення сторінки - покласти всі скрипти в кінець сторінки, перед тегом </ body>.
У DLE такого немає і ми це виправимо.
1.1) Відкриваємо до 10.4 - index.php, для 10.4 endgine/modules/main.php
знаходимо:
$tpl->set ( '{headers}', $metatags."\n".$js_array );
міняємо на:
$tpl->set ( '{headers}', $js_array );
$tpl->set ( '{metatags}', $metatags );
1.2) Відкриваємо шаблон main.tpl і вверху шаблону замість {headers} вставляємо {metatags}
Знаходимо і видаляємо {AJAX}.
Потім перед </ body> вставляємо:
{AJAX}
{headers}
Нижче цих тегів підключаємо всі скрипти, що підключаються до шаблону, інакше втрачається сенс оптимізації.
2. Стискаємо скрипти та стилі:
Оптимізація номер два - gzip-стиснення скриптів і стилів
Для цього необхідно пройти в адмінку - Оптимізація і включити "Увімкнути Gzip-компресію JS-файлів", або зробити це в ручну:
припустимо у нас є 2 файли стилів:
<link media="screen" href="{THEME}/style/styles.css" type="text/css" rel="stylesheet" />
<link media="screen" href="{THEME}/style/engine.css" type="text/css" rel="stylesheet" />
міняємо на:
<link rel="stylesheet" href="/engine/classes/min/index.php?charset=windows-1251&f={THEME}/style/styles.css,{THEME}/style/engine.css&7" />
ДЕ:
charset=windows-1251& - вказане кодування сайту.
&7 - кількість днів на які кешується.
У підсумку істотно збільшується швидкість завантаження сторінок. Однак потрібно мати на увазі, що при редагуванні файлів необхідно очищати кеш DLE і кеш браузера.
УВАГА! При перенесені скриптів в кінець сторінки можливо, що перестануть працювати деякі модулі, наприклад чат.
3. Заставляємо браузер кешувати наш сайт.
Якщо користувач зайшов на сайт - завантажилися до прикладу 4 скрипта по 10кб - це 40Кб, начебто не страшно, однак при кожному переході по сторінках сайту браузер буде завантажувати ці скрипти знову і знову, тому що думає, що скрипт оновлюється при кожному зверненні до нього. Тому логічно "сказати" браузеру, що б він перевіряв не оновиться цей скрипт не при кожному зверненні, а лише раз на місяць або раз на рік.
3.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 и jаvascript
ExpiresByType text/css "access plus 1 year"
ExpiresByType application/jаvascript "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>
Представлений код - результат збору даних з різних джерел та оптимізації його під DLE. Для підключення його потрібно вставити в самий початок файлу .htaccess і оновити кеш в адмінці.
4. Включаємо кеш для гостей:
В папці /engine/cache/ створюємо папку fcache и ставимо на неї права 777
Відкриваємо файл index.php
Находимо:
define ( 'DATALIFEENGINE', true );
Вище добавляємо:
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
{
$fcache = $_SERVER['DOCUMENT_ROOT'] . '/engine/cache/fcache/' . md5( $_SERVER['REQUEST_URI'] ) . '.html';
if ( file_exists( $fcache ) && filemtime( $fcache ) > time() - 3600*3 ) exit( file_get_contents( $fcache ) );
}
Находимо:
GzipOut();
Вище добавляємо:
if( $_SESSION['dle_user_id'] == false && $_SERVER['REQUEST_METHOD'] == "GET" )
file_put_contents( $fcache, ob_get_contents() );
3600*3 — означаеє что час життя кеша 3 години.
Підгледів інфу у Пафнутого.