Лучшие практики YSlow с приложениями Django, как их реализовать?

У меня есть приложение django 1.1.1, которое на самом деле находится в разработке, думая о лучших практиках. Я провел тест YSlow (применен набор правил класса E: YSlow V2), он рекомендует:

Оценка F в заголовках "Добавить срок действия"

-Есть 37 статических компонентов без срока годности в далеком будущем.

Оценка F за использование сети доставки контента (CDN)

-Есть 37 статических компонентов, которых нет в CDN.

Оценка F за сжатие компонентов с помощью gzip

-Есть 17 компонентов обычного текста, которые следует отправлять в сжатом виде

Как я могу реализовать это с помощью Django?

Дополнительный контекст: Python 2.5, развертывание на веб-фракции

Пример:

Оценка F за выполнение меньшего количества HTTP-запросов

Эта страница содержит 14 внешних сценариев Javascript. Попробуйте объединить их в один. На этой странице есть 4 внешних таблицы стилей. Попробуйте объединить их в один.

Можно решить с помощью Django-Compress


person panchicore    schedule 07.11.2009    source источник


Ответы (3)


Из трех перечисленных вами, два адресуются на уровне веб-сервера. Например, в Linux/Apache:

Для gzip отредактируйте файл /etc/apache2/mods-available/deflate.conf.

<IfModule mod_deflate.c>  
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript text/javascript text/css application/javascript  
</IfModule>  

Для заголовков Expires сначала нужно включить mod_expires:

>cd /etc/apache2
>sudo ln -s ../mods-available/expires.load mods-enabled/expires.load

Затем вам нужно настроить его для нужных вам типов MIME:

# edit /etc/apache2/sites-available/default  
ExpiresActive On  
ExpiresByType text/css "access plus 12 hours"  
ExpiresByType application/javascript "access plus 12 hours"  
ExpiresByType image/png "access plus 12 hours"  
ExpiresByType image/gif "access plus 12 hours"  

Напишите, почему я рекомендую 12 часов здесь.

Последний элемент (CDN) обычно передается кому-то вроде Akamai. Это также довольно дорого.

person Chase Seibert    schedule 07.11.2009

Я очень согласен с тобой, Чейз. Я разработал несколько процедур django, основанных на работах Стива Содерса и Николаса Закаса.

Мои стандартные практики:

  • Install django-mediagenerator which is the base for:
    • Combine JS and CSS with mediagenerator bundles
    • Настройте медиагенератор для автоматического сжатия JS с помощью google-close и CSS с помощью YUICompressor.
    • ВСЕ статические медиафайлы (не загруженные) также обрабатываются медиагенератором. Это позволяет вам использовать заголовок с истекающим сроком действия в далеком будущем, например, 10 лет.
  • Сведите к минимуму использование изображений и попытайтесь создать большую часть сайта только с помощью CSS.
  • Там, где я должен использовать маленькие изображения, base64 встраивает их в файлы CSS (используя медиагенератор)
  • Там, где это большие изображения, объедините их в спрайт (хотя я очень редко использую большие изображения)
  • Nginx и gunicorn для развертывания

Конфигурация Nginx gzip в nginx.conf:

gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 64 16k;
gzip_disable “MSIE [1-6].(?!.*SV1)”;

Заголовок Nginx far futures expires:

location /media/ {
    alias   /home/domains/example.com/project/_generated_media/;
    expires 10y;
    add_header Cache-Control public;
}   

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

Используя эти методы, я создал сайты с 3 HTTP-запросами. HTML-файл, один запрос CSS в заголовке и один запрос JS в нижнем колонтитуле после отображения страницы.

person AgentK    schedule 12.01.2011

Ни один из них не имеет ничего общего с Django, поскольку YSlow ссылается на статические ресурсы на вашем сайте — JS, CSS и изображения. Обслуживание их через сервер разработки неизбежно приведет к неудовлетворительным оценкам, но успех будет зависеть от того, как вы настроите реальный сервер, который в конечном итоге будет их обслуживать.

person Daniel Roseman    schedule 07.11.2009