Цитаты о сжатиии

1)https://drupal.ru/node/139622

  • Браузер делает запрос к DNS-серверу, узнает где находится сайт
  • Браузер обращается к серверу, где находится сайт
  • Сервер готовит ответ
  • Сервер отдаёт ответ, а браузер его получает.
  • Браузер загружает связанные ресурсы - изображения, CSS-стили, JS-скрипты
  • Браузер их парсит, интерпретирует, применяет к странице
  • Где-то здесь выполняется реклама

Модули для кеширования сущностей, оптимизации кода сайта и прочее - имеют влияет на TTFB, т.е. это время когда браузер начал получать код HTML. Это стадия "Сервер готовит ответ", и она в вашем случае далеко не самая большая.

На скорость загрузки рекламы и её видимости это никак не влияет, так как в это время нет рекламы, счётчиков и иных пузомерок.
По сути, весь отсчёт идёт уже после того как данные получены.
Вот здесь и наступает время оптимизации фронтэнда.
Про нее у вас написано в PageSpeed, считаю, что это самый доступный для масс инструмент.
И универсальные советы я могу дать аналогичные тем, что даёт PageSpeed - оптимизируйте изображения, выкидывайте лишние скрипты, что-то переводите на асинхронщину, делайте Lazy Load, если у вас много изображений, настраивайте заголовки сервера, чтоб браузер постоянно не грузил ресурсы.

Невозможно дать исчерпывающих рекомендаций для сферического в вакууме проекта.

О том, как простыми действиями на благо сделать хуже было написано 10 лет назад, например
https://drupal.ru/node/35153
За 10 лет - ничего не изменилось, всё так же бездумно "оптимизируют" сайты.

Ну и в качестве "Я пиарюсь"
https://docs.google.com/document/d/1s5zB7e10AhqCgWq5QcTtIp0rXjg9eLiFEiu_...
Там многие заблуждения рассмотрены - 304, HTTP/2, PWA

В случае с джаваскриптами можно сделать вывод, что лучше не использовать агрегацию, когда на разных страницах сайта мы загружаем разные плагины. Это так?

Если вы не собираетесь сами ей управлять то да

"Sinkora" wrote:

Ну, а насчет css-файлов, я думаю, что агрегация полезна, т.к. удаляются лишние определения стилей. Но это верно, если мы все css-свойства
описываем только в одном style.css файле темы..

с css фалами все то же самое как и с js файлами.
бездумная агрегация вредит.

1а)JS

https://drupal.ru/node/35153

Бездумная означает собирать все в один файл что указано на текущей странице.
Такой алгоритм правильный только в одном случае - если у вас на ВСЕХ страницах одни и те же css файлы и js файлы.

Агрегация - это крайне эффективный способ оптимизации процесса загрузки страницы. И использовать его нужно обязательно. НО НЕ В ТОМ автоматическом режиме которые присутствует в друпал по умолчанию.

Разумное ее использование начинается как минимум с простого примитивного шага.
Аудит всех модулей использующих свои js файлы. И сборка ИХ всех в единый js при этом меняя логику добавления js кода на страницу. грубо говоря отключая ее совсем.

вы проигрываете в первой загрузке страницы, потому что пользователь загрузит много ненужного js кода. Но при верно выставленном кешировании более пользователь ничего грузить уже не будет.

Пример что выше крайне примитивен. И на деле же используют значительно более сложные механизмы. Но для демонстрации того как делать лучше вполне сгодится.

1б)еще о js

https://docs.google.com/document/d/1s5zB7e10AhqCgWq5QcTtIp0rXjg9eLiFEiu_WdShIn8/edit?ts=5cd6c79a#

Ошибки в javascript НЕ прекращают рендеринг браузера. Если только под словом рендеринг не подразумевают аварийное завершения текущего цикла событий, который сейчас занимался формированием html.

 

Строго говоря ошибки в javascript прервать рендеринг не могут в принципе. Исключение, если из-за ошибки в движке javascript падает вся вкладка, ну или мы говорим о программной ошибке которая ввела текущий цикл событий в бесконечный цикл.

 

Ошибки в Javascript могут прервать выполнение текущего цикла событий, при условии если программист не позаботился об обработке исключительных ситуаций. И даже в этом случае это не обязательно приведет к нарушению работы всей javascript логики. 

 

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

 

Но по большому счету - это крайне порочная практика (формировать контент для индексации через javascript на стороне клиента). И этого нужно избегать вообще, в силу таких причин как:

 

  1. индексация страницы с выполнением на ней скриптов может быть отложена на недели

  2. индексация таких страниц прямо влияет на индексацию проекта в целом (проекты которые можно корректно проиндексировать только с исполнением скриптов, имеют намного более низкий средний показатель частоты повторной индексации)

 

Все это нужно естественно только тогда, когда вы боритесь за индексацию в Google.

1в) Тема форума https://drupal.ru/node/35153

Разбор доклада https://docs.google.com/document/d/1s5zB7e10AhqCgWq5QcTtIp0rXjg9eLiFEiu_WdShIn8/edit?ts=5cd6c79a

Моя тема https://drupal.ru/node/139622

2)Для Друпал 7

https://drupal.ru/node/128202

В разделе производительность включил кэширование, минимальное время, сжатие ccs, html.

pr-cy.ru и гугл спидтест показывают:
Оптимизируйте время ответа сервера.
Включите сжатие gzip
Не настроено сжатие изображений
В верхней части страницы найден блокирующий CSS (и JS)

в файле /etc/nginx/nginx.conf

Вот эти строки нужно раскомментировать:

gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

Скорость вырастает на 25% приблизительно, а то и больше. Минусы тоже есть.

Advanced CSS/JS Aggregation только настройка сложная но хорошая штука

последнее время обхожусь без этого модуля. Использую minify модуль

gzip включено на drupalhosting.ru и jino.ru
так что обратитесь к хостеру или переезжайте.
Адваг не дает пользы, потому что он тормозит работу сайта для авторизованных (долгие sql-запросы), минифи лучше, хотя это особо не влияет.
спустите в templates/html.tpl.php вывод скриптов в самый низ до закрытия тега body.
и также избавьтесь от лишних скриптов, например, на тлито написано, как отключить все скрипты (тлито работает без скриптов js, так как они грузят процессор пользователя на сайтах новичков без пользы, неэффективно).
пример оптимизации сайта на тлито: http://tlito.ru/node/276/

При отключении jquery размер страниц уменьшился на 85Кб.

Colorbox, Syntaxhighlighter, требующие jquery, не подходят.

Более оптимальная альтернатива Syntax Highlighter не Prettify, не HighlightJS, а GeShi Filter! Geshi работает на php и совершенно не требует js, и не подключает js.

Был отключен Advagg, который мешал отключить скрипты, делал нерабочим этот хук удаления всех javascript.

Из оптимизации страниц остались только Boost - для анонимов и Minify, а для админа Authcache + File Cache .

3)Для Друпал 5

https://drupal.ru/node/16712 

Сжатие страничек
Странички сжать легко до безумия, в корне сайта лежит файлик index.php - открываем его и ищем строчку:
"print theme('page', $return);"

сразу перед ней вставляем новую строчку:
"ob_start("ob_gzhandler");"

почему это делаем не в page.tpl.php ? да потому, что я хотел чтобы и служебные странички выводились сжатыми, да и на сайте была возможность выбирать свою тему оформления, а пробегать по всем темам и добавлять эту строчку - лень, быстрее ее добавить, после очередного апдейта друпала.

И так - теперь все странички уходят сжатыми.

Объединение CSS и JS
Открываем /admin/settings/performance и включаем "Объединение и сжатие файлов CSS:", таким образом все CSS-файлы будут объедены в один. Так как мы знаем, что наш хостинг не дает сжимать, то все равно на выходе будет пусть и один, но не сжатый CSS файл, но мы это исправим =).

Для тех у кого 6 Друпал - включаем объединение и ява-скриптов, что умее и само ядро с 6 версии, но вот 5 друпал такого еще не умеет, поэтому надо исправить это - для этого устанавливаем модуль "Javascript Aggregator" (http://drupal.org/project/javascript_aggregator). Настраиваем его как указано в readme. Теперь на /admin/settings/performance появились опции для объединения JS-файлов и под 5.

После всего проделанного у на при запросе странички уходят только:
1. сама страничка (уже сжатая)
2. один css (еще не сжатый )
3. один JS (еще не сжатый )
4. графические файлы

Теперь надо сжать эти jss и js.

Сжатие CSS и JS
И вот тут нам поможет модуль SmartCache (http://drupal.org/project/smartcache) есть для 5 и 6 Drupal.

Скачиваем его и настраиваем.
1. создаем в /modules/ папку "smartcache"
2. загружаем файл "load.php" из скаченного архива в /modules/smartcache/
3. создаем в в /modules/smartcache/ новую папку 'cache' т.е. /modules/smartcache/cache
4. устанавливаем на папку cache права 775

Проверяем как работает это сжатие открытием странички:
http://ВАШ_САЙТ/modules/smartcache/load.php?file=misc/drupal.js
если вы увидили обычный js - то все прошло как надо =) , если же нет - то придется почитать readme.txt из состава модуля.

И так, если мы увидели этот скрипт, то идем далее. Открываем .htaccess из корня сайта ищем последнюю строчку с "RewriteRule" и на новой строчке после нее вставляем три новых строчки:

  RewriteRule ^(.*\.((js)|(css)))$ /modules/smartcache/load.php?file=$1
  RewriteRule \.css$ /modules/smartcache/load.php?file=$1
  RewriteRule \.js$ /modules/smartcache/load.php?file=$1

Незнаю почему, но он у меня "из коробки" не захотел сжимать собранные модулями файлы, т.е. при включении объединения css и js уходили без сжатия, как только выключал объединение - все уходили сжатыми, но только CSS было более 10 =(. Поэтому помимо правила из readme добавил еще 2 последних правила

Также если в .htaccess из папки "files" есть правило
RewriteEngine on
то удаляем его, именно это правило не дает срабатывать необходмым правилам и получать сжатые файлы.