Розробники, що відповідають за створення високопродуктивних рішень в Yahoo, опублікували цікаву презентацію на 76 сторінок, в якій узагальнено досвід компанії, пов’язаний з підвищенням продуктивності web-додатків. В презентації представлені 34 рекомендації web-розробникам, з них 14 порад були описані в попередній доповіді.
Для виявлення проблем з продуктивністю сайтів в Yahoo було розроблене спеціальне доповнення до Firefox-плагіна Firebug — YShow, що дозволяє виявити вузькі місця та оцінити швидкість поетапного завантаження різних частин сторінки.
Поради:
- Виконувати якнайменше HTTP-запитів;
- Користуватись послугами мереж доставки контента (Content Delivery Network), наприклад Akamai;
- Не нехтувати HTTP заголовком “Expires” або “Cache-control”;
- Віддавати сторінки в стиснутому вигляді (наприклад, mod_gzip);
- Вказувати посилання на фали з таблицями стилів (link href) на початку документа;
- Вказувати посилання на JavaScript файли (script src) в кінці документа;
- Не використовувати очислювані (expressions) вирази в CSS;
- Зберігати JavaScript та CSS вставки у вигляді окремих файлів;
- Зменшити кількість звернень до інших доменів на сторінці(наприклад, коли зображення або iFrame завантажуються з іншого сервера, в ідеалі не більше трьох доменів);
- Мінімізувати розмір JavaScript і CSS (наприклад, за допомогою JSMin або YUI compressor, які прибирають зайві пробліли, коментарі, та скорочують змінні);
- Уникати перенаправлень (HTTP Redirect);
- Виключати дублювання JavaScript коду (наприклад, IE повторно завантажує “script src” вставки, що повторюються);
- Налаштувати ETags (“FileETag None” в Apache);
- Кешувати Ajax запити;
- Скидати буфер на початковому етапі генерації сторінки (наприклад, через періодичний виклик flush() в PHP), для того, щоб клієнт отримав посилання на CSS файли та встиг почати їх завантаження);
- Використовувати для Ajax запитів HTTP метод GET (вміщується в 1 TCP пакет, в той час як POST відправляється в два етапи — заголовки і дані);
- Виділення контенту, який можна завантажити в останню чергу (наприклад, відкладене завантаження зображень та JavaScript блоків після завантаження основної частини);
- Виділення скриптів, які слід завантажувати в першу чергу;
- Зменшення числа елементів в дереві DOM (мінімізація числа HTML-тегів на сторінці);
- Розділення контенту по різним доменам: статика через окремий static.domain.com (броузер буде завантажувати дані паралельно);
- Мінімізувати число iFrame-ів, не використовувати iFrame та script src посилання на чужі ресурси (блокує завантаження наступної частини сторінки);
- Недопускати появу 404 помилки (сторінка не знайдена);
- Зменшити розмір Cookie (прибрати зайве, скоротити імена, прив’язати лише до необхідни доменів, визначити тривалість їх життя);
- Для допоміжних сторінок виключити встановлення Cookie (з винесенням зображень, CSS та скриптів на static.domain.com);
- В JavaScript мінімізувати звернення до DOM (дуже повільна операція), виключити повторні запити до DOM за допомогою кешування;
- Оптимізувати обробку подій в JavaScript (замість “onload” використовувати DOMContentLoaded, обережно використовувати onresize, провести аудит за допомогою утиліти YUI Event);
- Завантажувати CSS через “link” на початку сторінки, не використовувати @import (в IE він призводить до завантаження CSS в самому кінці);
- Уникати використання фільтрів в CSS, вони пыдтримуються лише в IE, натомість використовувати PNG8;
- Оптимізувати зображення (мінімізація розміру палітри, перехід на PNG, оптимізація за допомогою pngcrush, optipng чи pngoptimizer, вилучення коментарів в зображеннях, оптимізацыя JPEG через jpegtran);
- Оптимізація CSS спрайтів (css sprite) для створення фонових зображень;
- Фактичний розмір зображення повинен співпадати із вказаним в параметрах width та height, щоб уникнути масштабування;
- favicon.ico повинен бути невеликим (менше 1 Кб) та кешованим (повинен встановлюватись як Expires, 9% всіх запитів в Yahoo Search припадає на favicon.ico !). При використанні Flash слід визначити crossdomain.xml;
- Сторінки, призначені для перегляду на мобільних пристроях, не повинні перевищувати 25Кб (інакше ті не попадуть в кеш iPhone);
- Для мобільних пристроїв краще використовувати multipart блоки, коли доповнення до сторінки(CSS, зображення), упаковуються в самій сторінці у вигляді додатків ;
Джерело: OpenNet.ru