Оптимізація javascript і css-файлів в drupal, drupal bloggers
Даний сайт спроба підвищити комунікацію найактивніших розробників на CMS Drupal - блогерів. Якщо Ви ведете свій блог про друпалі, значить Ви готові ділитися вашими знаннями, допомогти іншим. Не завжди ваші знання доходять до споживача. Завдання даного сайту агрегувати знання різних блогів в єдину стрічку і привести на Ваші блоги активних користувачів.
Активність користувачів на Вашому сайті буде додатковим стимулом до подальшої роботи.
Удачі у всіх Ваших починаннях!
З чого починається сайт?
- Для браузера сайт починається з GET-запиту сторінки.
- Сервер на цей запит висилає HTML-код сторінки.
- Браузер розбирає код та почне завантажувати всіх зовнішніх файлів (JS, CSS, Flash і ін.) В порядку їх слідування в коді.
- Зазвичай браузер використовує не більше 2-х потоків для завантаження зовнішніх файлів, а CSS і JS завантажуються взагалі в одному потоці.
- Час на кожен запит залежить від розміру повертається відповіді, завантаження сервера і активності на кожній машині на всьому шляху між браузером і сервером.
- Чим більше розмір файлу - тим довше він буде доставлятися браузеру.
- Чим більше кількість файлів - тим довше буде завантажуватися вся сторінка.
Таким чином, щоб збільшити швидкість завантаження сторінки потрібно:
- modules / comment / comment.js
- modules / profile / profile.js
- modules / openid / openid.js
- modules / taxonomy / taxonomy.js
- modules / system / system.js
- modules / block / block.js
- modules / color / color.js
- modules / user / user.js
- misc / autocomplete.js
- misc / drupal.js
- misc / collapse.js
- misc / batch.js
- misc / farbtastic / farbtastic.js
- misc / form.js
- misc / tableselect.js
- misc / ahah.js
- misc / tabledrag.js
- misc / textarea.js
- misc / progress.js
- misc / tableheader.js
- misc / teaser.js
- misc / jquery.form.js
- misc / jquery.js
CSS-файли
У вашому проекті кількість і сумарний розмір буде інший.
Команда для самостійної перевірки розміру CSS файлів:
find. -name '* .css' -exec ls -l # 123; # 125; \; | awk 'END'
У нашому проекті, крім файлів ядра, є ще близько 450-ти в додаткових модулях і темах.
Загальний розмір усіх CSS-файлів - 1'674'793 байт.
Що стосується CSS-файлів в ядрі Drupal 6, то ось вони:
- modules / locale / locale.css
- modules / aggregator / aggregator-rtl.css
- modules / aggregator / aggregator.css
- modules / update / update.css
- modules / update / update-rtl.css
- modules / poll / poll.css
- modules / poll / poll-rtl.css
- modules / comment / comment-rtl.css
- modules / comment / comment.css
- modules / tracker / tracker.css
- modules / forum / forum-rtl.css
- modules / forum / forum.css
- modules / book / book.css
- modules / book / book-rtl.css
- modules / profile / profile.css
- modules / search / search-rtl.css
- modules / search / search.css
- modules / openid / openid.css
- modules / node / node-rtl.css
- modules / node / node.css
- modules / taxonomy / taxonomy.css
- modules / system / system-menus-rtl.css
- modules / system / admin-rtl.css
- modules / system / admin.css
- modules / system / maintenance.css
- modules / system / defaults-rtl.css
- modules / system / defaults.css
- modules / system / system-rtl.css
- modules / system / system-menus.css
- modules / system / system.css
- modules / block / block.css
- modules / color / color.css
- modules / color / color-rtl.css
- modules / help / help.css
- modules / help / help-rtl.css
- modules / dblog / dblog.css
- modules / dblog / dblog-rtl.css
- modules / user / user.css
- modules / user / user-rtl.css
- misc / print-rtl.css
- misc / farbtastic / farbtastic.css
- misc / print.css
- themes / bluemarine / style.css
- themes / bluemarine / style-rtl.css
- themes / garland / print.css
- themes / garland / style.css
- themes / garland / minnelli / minnelli.css
- themes / garland / color / preview.css
- themes / garland / style-rtl.css
- themes / garland / fix-ie.css
- themes / garland / fix-ie-rtl.css
- themes / pushbutton / style.css
- themes / pushbutton / style-rtl.css
- themes / chameleon / common-rtl.css
- themes / chameleon / style.css
- themes / chameleon / marvin / style.css
- themes / chameleon / marvin / style-rtl.css
- themes / chameleon / common.css
- themes / chameleon / style-rtl.css
Сумарний розмір CSS-файлів на порядок менше, ніж розмір JS-файлів. Але потрібно врахувати, що CSS-файлів на сторінці набагато більше, ніж JS-файлів - приблизно в 2 рази більше. Крім того, стилі, як правило, завантажуються для всіх сторінок (це стилі теми) і тільки стилі модулів можуть завантажуватися для певних сторінок. Таким чином і файли стилів, і скрипти потребують нашої уваги в однаковій мірі.
Обмежений Internet Explorer
Браузер IE 6-8 має обмеження на кількість і розмір CSS-файлів:
- Всі теги додавання стилів після перших 31 тегів ігноруються.
- Всі CSS-правила після перших 4,095 правил ігноруються.
- На сторінках, які використовують правило @import для імпорту зовнішніх таблиць стилів, які імпортують інші зовнішні таблиці стилів, таблиці стилів з рівнем вкладеності більше 3 - ігноруються.
Обмеження протоколу HTTP
Цікаво чи є у браузерів обмеження на кількість АJAX-з'єднань?
Згідно зі специфікацією HTTP 1.1 браузер повинен встановлювати не більше 2 одночасних з'єднань (і це справедлівао для IE6 / 7) до одного хосту. У Firefox і Opera цей параметр настроюється і становить не менше 4 за замовчуванням. За деякими даними в IE8 - 6 з'єднань з одним хостом.
Джерело інформації: Raising network.http.max-persistent-connections-per-server?
- Firefox 2: 2
- Firefox 3 beta 4: 4
- Opera 9.26: 4
- Opera 9.5 beta: 4
- Safari 3.0.4 Mac / Windows: 4
- IE 7: 2
- IE 8: 6
- Більшість JS і CSS-файлів не оптимізовані.
- Файлів багато і їх сумарні розміри значні.
- Маємо проблеми з браузером IE, який обмежує кількість CSS-файлів на сторінці.
- Проблеми зі швидкістю завантаження сторінки через великої кількості зовнішніх файлів і обмеження браузерів на кількість одночасних з'єднань з сервером.
Запит на сервер і сервер віддає стислий контент
- Оптимізація CSS не робиться, коли сайт знаходиться в режимі Maintenance ( "Обслуговування") або запущено оновлення (update.php).
- До оптимізованим файлів додається рядок у вигляді параметра, яка дозволяє контролювати кешування файлів браузером. Коли запускається update.php або робиться повний скидання кеша, - змінюється цей рядок, що змушує браузери перезавантажити нові версії файлів, так як вони вважають, що URL змінився.
- Чи буде файл брати участь в оптимізації вирішує 4й аргумент функції drupal_add_css () - $ preprocess, який визначає чи буде даний файл брати участь в оптимізації, якщо вона буде включена. За замовчуванням файл буде брати участь в оптимізації.
- Спочатку формується 2 списку файлів, які не беруть участі в оптимізації CSS - окремо (1) для модулів і окремо (2) для тем.
- Далі створюється ім'я файлу, який буде зберігати оптимізований CSS і викликається функція drupal_build_css_cache (). яка аггрегірует і оптимізує CSS файли.
- Отриманий файл зберігається в папці sites / default / files / css (в мультісайтового установці буде інший шлях, але, - я думаю, - що ви і самі знаєте де вони будуть зберігатися).
Що в себе включає оптимізація?
Отже, оптимізація, яку нам пропонує ядро Drupal є насправді мінімізацією з аггрегаціі в один файл.
Недоліки методу оптимізації в ядрі Drupal
Метод оптимізації, який використовується в ядрі Drupal безпечний, тобто він не призводить до помилок в коді. Але метод не настільки ефективний, як здається.
Справа в тому, що на сторінці може бути десятка 2 різних скриптів, які збираються в унікальний файл, який для даної сторінки кешируєтся. Скрипти на сторінці можуть довантажувати в залежності від прав доступу користувача або ще яких-небудь умов, що збільшує кількість варіантів для однієї-єдиної сторінки.
- Якщо вибрано використання стиснення трафіку на сторінці налаштування продуктивності,
- Розширення PHP zlib) присутній в системі,
CSS-хакі, які працюють:
Тестування швидкості завантаження сторінки
Було проведено замір часу завантаження сторінки, щоб з'ясувати наскільки зміниться середній час завантаження при різних методах оптимізації JS-файлів. Тестовий сайт має понад 1300 JS-файлів і майже 450-CSS-файлів. Встановлено 227 модулів (включаючи модулі ядра). Були досліджені різні методи оптимізації:
Умови проведення тесту
налаштування браузера
- Проверяемая сторінка: головна сторінка тестованого сайту
- Браузер: Firefox 3.6.13
- Кеш браузера: 500М
- Інструмент виміру: Yslow 2.1.0
- Проксі сервер: чи не використовувався
- Сервер має: Accelerator
- Операційна система: Linux
- Версія ядра: 2.6.29-5
- Архітектура: x86_64
Налаштування в Drupal
- Користувач в Drupal: суперадмін
- Caching mode: Normal
- Minimum cache lifetime: none
- Page compression: enabled
- Block cache: enabled
- Optimize CSS files: enabled
Результати тестування
Середній час завантаження сторінки
Діаграма часу завантаження сторінки в різних режимах
Аналіз результатів тестування
Корисні посилання
Компресори скриптів
Порядок завантаження елементів сторінки браузером