вторник, 23 сентября 2014 г.

Ускорение работы сайта с помощью минификации и объединения в Composite C1

Пакет минификации и объединения в Composite C1 CMS
При достаточно высокой конкуренции по определенным ключевым словам веб-страница получит дополнительное преимущество, если будет загружаться быстро, если вообще не моментально, по сравнению с конкурентами.

Поэтому оптимизация скорости работы сайта можно и нужно относить к оптимизации для поисковиков (SEO).

Для ускорения работы сайта уже давно используют два метода:
  • минификацию, или минимизацию (minification)
  • объединение, или конкатенацию (bundling)
Вкратце, при минификации из определенных файлов (которые можно условно отнести к текстовым - HTML, Java-скрипты, стили CSS и т.п.) удаляются ничего не значащие символы (всякие там пробелы и переносы строк и т.п.). Файл становится меньше по размеру и быстрее загружается браузером.

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

Ну, и понятно, что если такие файлы и объединить, и минифицировать одновременно, то прирост скорости в некоторых случаях будет весьма значительным.

Именно для этих целей для Composite C1 CMS недавно был выпущен специальный пакет Composite.Web.BundlingAndMinification. Все что вам нужно - передать содержимое страницы в специальную C1-функцию, а она сделает свое дело.

К слову, последние версии стартового сайта Venus уже используют этот пакет и оптимизируют с его помощью свои страницы.


Установка и использование пакета Bundling & Minification


Установить пакет вы можете стандартным способом:

Раздел "Система" / Пакеты / Доступные пакеты / Composite.Web / Composite.Web.BundlingAndMinification

Установка пакета объединения и минификации в Composite C1

Однако пред установкой этого пакета вам нужно установить еще один пакет: Composite.Web.Css.Less, причем версии не ниже 1.2.4.

Текущая версия пакета Bundling & Minification 1.0.4 и его можно установить на Composite C1 CMS версии не ниже 4.2. Минимальная версия для LESS CSS 1.2.4 - тоже 4.2




Использование пакета Bundling & Minification


Для оптимизации страницы нужно ее содержимое передать в параметр Page функции Composite.Web.BundlingAndMinification.

Удобнее всего это сделать с помощью шаблонов страниц.
  1. Откройте шаблон страницы в разделе "Макет".
  2. Добавьте XML-код функции перед <html> тегом:

    <f:function name="Composite.Web.BundlingAndMinification" xmlns:f="http://www.composite.net/ns/function/1.0">
         <f:param name="Page">
         </f:param>
    </f:function>
    <html xmlns="http://www.w3.org/1999/xhtml" class="no-js" lang="@Lang">
      <head><!-- пропущено --></head>
      <body><!-- пропущено --></body>
    </html>

  3. Переместите все содержимое тегов <html></html>, включая сами теги, в параметр Page:

    <f:function name="Composite.Web.BundlingAndMinification" xmlns:f="http://www.composite.net/ns/function/1.0">
         <f:param name="Page">
             <html xmlns="http://www.w3.org/1999/xhtml" class="no-js" lang="@Lang">
             <head><!-- пропущено --></head>
             <body><!-- пропущено --></body>
             </html>
         </f:param>
    </f:function>

  4. Сохраните шаблон.
  5. Повторите шаги 1-4 для всех шаблонов, где нужна оптимизация.


Что и как кэшируется пакетом? 


Пакет устанавливает срок в 1 год в HTTP-заголовке Expires (когда истекает срок).

Если какой-нибудь из оптимизированных файлов (JS, CSS) меняется, оптимизационная платформа ASP.NET сгенерирует новый маркер (token), благодаря чему браузер всегда получить последние версии файлов с оптимизацией.

А вот  c LESS-файлами немного все по-другому. В "объединение" (bundle) включается CSS файл, генерируемый с LESS-эквиалента. Поэтому когда вы вносите изменения в LESS-файл, эти изменения не попадут в оптимизированное "объединение". Нужно просто заставить систему перегенерить CSS файл.в таком случае: либо удалите такой файл, либо перезапустите сервер.

Важные замечания:

Пакет не работает с эталонными/главными страницами (ASP.NET Master Pages) и функциями на основе пользовательских элементов управления (User Control Functions). 

Но работает с XML- и Razor- шаблонами и С1 XSLT- и Razor-функциями.

В своей работе пакет использует Платформу веб-оптимизации ASP.NET от Microsoft.

Пакет работает со стилями (CSS и LESS) и Java-скриптами, включая стили в "объединение" с виртуальным названием "~/Bundles/Styles[ключ файлов страницы]", а скрипты - с названием "~/Bundles/Scripts[ключ файлов страницы]"

Не работает с ссылками на CDN.

Оптимизация отключена для вас, если вы в данный момент зашли в админку.


Как отключить оптимизацию?


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

Можно также отключить оптимизацию вообще - через Web.config:
  1. Найдите в Web.config параметр по пути system.web/compilation/@debug.
  2. Установите ему значение true.
  3. Сохраните изменения.
<system.web>
    <compilation debug="true" />
    <!-- пропущено -->
</system.web>


(Статья актуальна на момент написания для версии Composite C1 4.2 Update 1 и пакетов Composite.Web.BundlingAndMinification 1.0.4 и Composite.Web.Css.Less 1.2.4.)

Комментариев нет:

Отправить комментарий