SlideShare une entreprise Scribd logo
1  sur  45
Оптимизация JavaScript
      в Drupal
План
План
●   С чего начинается сайт?
●   Анализ текущей ситуации.
●   Виды оптимизации.
●   Обзор существующих Javascript-
    компрессоров.
●   Обзор возможностей оптимизации JS
    ●   В ядре Drupal 6
    ●   Дополнительными модулями
●   Перемещение Javascript в footer
С чего начинается сайт?
Сайт «глазами» браузера
●   Браузер: GET-запрос страницы.
●   Сервер: на этот запрос высылает HTML-код
    страницы.
●   Браузер: разбирает код и начинает загрузку
    всех внешних файлов в порядке их
    следования в коде страницы.
    ●   Обычно браузер использует не более 2х
        потоков для загрузки внешних файлов.
    ●   CSS и JS загружаются в одном потоке.
Как браузер
            рендерит страницу?
●   Парсинг и выполнение JS (внешних файлов
    и inline) откладывается пока не загрузится:
    ●   весь JS из HEAD,
    ●   весь CSS из HEAD.
●   JS выполняется в порядке следования на
    странице.
Что влияет на скорость?
●   Время на каждый запрос зависит от:
    ●   размера возвращаемого ответа,
    ●   загрузки сервера и
    ●   активности на каждой машине на всем пути
        между браузером и сервером.
●   Чем больше размер файла - тем дольше
    он будет доставляться в браузер.
●   Чем больше количество файлов на
    странице - тем дольше будет длиннее
    этап «белой страницы».
Способы ускорения
          загрузки страницы
●   Уменьшить размеры файлов.
●   Уменьшить количество файлов.
●   Использовать HTTP-сжатие.
●   Увеличить количество хостов, с которых
    загружается статика сайта.
●   Поместить JavaScript в footer страницы.
Анализ текущей ситуации
Ищем JavaScript в проекте
●   Найти JS-файлы в проекте можно командой:
    ●   find . -name '*.js'
●   Размер всех JS-файлов:
    ●   find . -name '*.js' -exec ls -l {} ; | awk '{s+=$5}
        END {print s}'
●   JavaScript-файлы в нашем проекте:
    ●   В ядре (D6): 23 файла.
    ●   В доп. темах и модулях: > 1300(!) файлов.
    ●   Общий размер: 15Мб.
Ограничение протокола HTTP
●   Согласно спецификации HTTP 1.1 браузер
    должен устанавливать не более 2
    одновременных соединений к одному хосту.
●   Firefox 2: 2
●   Firefox 3,4: >4
●   Opera 9.26: 4
●   Opera 9.5 beta: 4
●   Safari 3.0.4 Mac/Windows: 4
●   IE 6,7: 2
●   IE 8: 6
Выводы
●   Большинство JS-файлов не
    оптимизированы.
●   Файлов много и их суммарный размер
    значителен.
●   Большое количество внешних файлов на
    странице.
●   Ограничение браузеров на количество
    одновременных соединений с сервером.
Виды оптимизации
Виды оптимизации
●   Минимизация JavaScript
●   Обфускация
●   Аггрегация
●   HTTP-cжатие
Минимизация JavaScript
●   Удаление из кода всех несущественных
    символов.
●   В минимизированном коде удаляются:
    ●   все комментарии,
    ●   незначащие пробелы,
    ●   переносы строк,
    ●   символы табуляции.
●   Утилиты: JSMin и YUI Compressor.
●   Минимизация безопасна.
Обфускация
●   Изменения:
    ●   Удаляются пробельные символы и вырезает
        комментарии (как в минимизации),
    ●   Имена функций и переменных заменяются на
        более короткие
●   Утилиты: Dojo Compressor (ShrinkSafe).
●   Может вносить в код ошибки.
●   Требует правки кода для выделения в нем
    API-функций и других элементов, которые
    не должны быть изменены.
Пример обфускации JS
Аггрегация
●   Объединение нескольких файлов на
    странице в один.
●   Аггрегация безопасна.
●   Позволяет уменьшить количество файлов
    на странице.
●   В Drupal 6 и выше аггрегация CSS и JS-
    файлов встроена в ядро.
●   В Drupal 5 нужно установить доп. модуль.
HTTP-cжатие
●   Сжимается контент (в основном текстовый),
    который передается с веб-серверов через
    интернет в браузеры.
●   Метод доставки сжатого контента
    включен в HTTP/1.1 и все современные
    браузеры поддерживают протокол HTTP/1.1.
●   Используются общедоступные алгоритмы
    сжатия.
●   Преимущество в том, что уменьшается
    размер передаваемых файлов.
Обзор существующих
JavaScript-компрессоров
Javascript-компрессоры (1)
●   JSMin (Традиционный компрессор)
    ●   Написан несколько лет назад Дугласом
        Крокфордом (Douglas Crockford).
    ●   Утилита безопасна.
●   Dojo shrinksafe
    ●   Очень популярный JavaScript компрессор.
    ●   Написан на Java.
    ●   Парсит код, используя библиотеку rhino и
        изменяет имена локальных переменных.
Javascript-компрессоры (2)
●   Packer
    ●   Написан Дином Эдвардсом (Dean Edwards).
    ●   Дает бОльшее сжатие.
    ●   Добавляет распаковку "на лету" во время
        выполнения JavaScript.
●   YUI Compressor
    ●   Новыейший компрессор, написанный Люлиен
        Лекомт (Julien Lecomte)
    ●   Объединяет безопасность JSMin с высочайшим
        уровнем сжатия Dojo Shrinksafe.
    ●   Написан на Java и основан на библиотеке rhino.
Степень сжатия файлов
   разного размера
JS-компрессоры
(без архивирования)
JS-компрессоры
(c Gzip сжатием)
Оптимизация JS в ядре Drupal 6
Стандартные возможности
              ядра Drupal
●   В ядре Drupal 6 реализованы:
    ●   аггрегация JavaScript-файлов
    ●   HTTP-сжатие.
●   Страница настроек «Performance»
    ("Производительность")
    ●   admin/settings/performance
Страница "Performance"
Как работает оптимизация
        JavaScript в ядре Drupal?
●   JS-файлы объединяются в один большой
    файл
    ●   после каждого файла добавляется ";n".
●   Код не изменяется
    ●   см. drupal_build_js_cache()
Недостатки и преимущества
    оптимизации в ядре Drupal
Преимущества:             Недостатки:
●   Уменьшается
    количество файлов
    на странице, а
    значит и количество
    запросов к серверу
Использование HTTP-сжатия
          в ядре Drupal 6
●   Включение сжатия на странице настройки
    производительности ("Perfomance"):
Как работает HTTP-сжатие
                в Drupal 6
●   Фукнция page_set_cache() сохраняет
    сжатый контент страницы в кеше, если:
    ●   сжатие трафика включено и
    ●   Расширение PHP zlib присутствует в системе.
●   Браузер получит сжатый контент, если:
    ●   Accept-Encoding: gzip,deflate
    ●   Сервер настроен отдавать сжатый контент
        (mod_gzip, mod_deflate или директивы в
        .htaccess)
●   JS и CSS файлы кешируются не сжатыми и
    сжимаются «на лету»
Преимущества и недостатки
       сжатия в ядре Drupal
Преимущества            Недостатки
●   Контент страницы    ●   JS и CSS не
    кешируется сжатым       кешируется сжатым.
●   Уменьшается         ●   JS и CSS
    размер                  кешируются «на
    передаваемой            лету»
    страницы            ●   Уровень сжатия
                            маленький
Оптимизация JS
дополнительными модулями
Модуль JavaScript Aggregator
●   http://drupal.org/project/javascript_aggregator
●   Делает минимизацию JS-файлов, используя
    JSMin.
●   Может сжимать уже аггрегированные и
    минимизированные JS-файлы, используя
    gzip-сжатие.
●   Сжатая копия кешируется в файле.
Пример Gzip сжатия
 Имя JS-файла в кеше          Размер,      Комментарий
                               байт
6e13c ... d3b1f.js             289.558 Аггрегирован ядром
                                       Drupal.
6e13c ... d3b1f.jsmin.js       173.243 Минифицирован с
                                       помощью JSMin.
6e13c ... d3b1f.jsmin.js.gz     47.618 Минифицирован и
                                       сжат.
Модуль Parallel
●   http://drupal.org/project/parallel
●   Позволяет браузеру параллельно загружать
    внешние файлы страницы.
●   Для этого создается 3 новых поддомена,
    которые указывают на одну корневую папку
    сайта.
●   Не требует хакать ядро Drupal.
●   Модуль Parallel работет только с JavaScript,
    картинками и CSS.
Перемещение Javascript в footer
Перенос Javascript в footer
●   drupal_add_js($data = NULL, $type = 'module',
    $scope = 'header', $defer = FALSE, $cache =
    TRUE, $preprocess = TRUE)
●   $scope (optional) The location in which you
    want to place the script. Possible values are
    'header' and 'footer' by default. If your theme
    implements different locations, however, you
    can also use these.
●   http://drupal.org/node/784626
    ●   «Make 'footer' the default scope for drupal_add_js()
        so that pages render fast»
Выводы
Рекомендации
●   Хранить сжатые JS-файлы с максмальным уровнем
    сжатия.
●   Использовать более эффективные методы упаковки JS и
    CSS-файлов.
●   Переместить Javascript в footer, чтобы ускорить момент
    показа страницы пользователю.
●   Использовать CDN или модуль Parallel, чтобы увеличить
    количество одновременных соединений, которые может
    позволить себе браузер.
●   Во время разработки использовать методы упаковки JS,
    которые не изменяют код (JSMin), а на production можно
    упаковать с помощью YUI Compressor.
Полезная ссылка




http://shvetsgroup.com/ru/node/62
Оптимизация JavaScript в Drupal

Contenu connexe

Tendances

MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in RussianOleg Kachan
 
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Mail.ru Group
 
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...Mail.ru Group
 
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...Ontico
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Yandex
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5Provectus
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...Kirill Danilov
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Mail.ru Group
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиентыRoman Brovko
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Ontico
 
Redis varnish js
Redis varnish jsRedis varnish js
Redis varnish jsiliakan
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoveryМихаил Тюрин
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизацияRoman Brovko
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Mikhail Davydov
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)Ontico
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностейДенис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностейDev_Party
 
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложенийRoman Brovko
 

Tendances (20)

MongoDB basics in Russian
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
 
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...Особенности работы backend для мобильных приложений или Python Django UWSGI в...
Особенности работы backend для мобильных приложений или Python Django UWSGI в...
 
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
Использование Python для построения сетевых моделей, Алексей Лобозов, ГК «Про...
 
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
HTML GL - возьмите столько FPS, сколько вам нужно, и немного эффектов в прида...
 
Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"Алексей Андросов "Криокамера для статики"
Алексей Андросов "Криокамера для статики"
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...nw.js  введение в кросс-платформенные десктопные приложения на javascript (mo...
nw.js введение в кросс-платформенные десктопные приложения на javascript (mo...
 
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
Что отличает джуниора от сениора или как питонисту не иметь проблем с поиском...
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
 
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
Спасение 6 млн файлов в условиях полного хецнера (Даниил Подольский, Дмитрий ...
 
Redis varnish js
Redis varnish jsRedis varnish js
Redis varnish js
 
pgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recoverypgconf.ru 2015.avito postgresql recovery
pgconf.ru 2015.avito postgresql recovery
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
 
Introduction in Node.js (in russian)
Introduction in Node.js (in russian)Introduction in Node.js (in russian)
Introduction in Node.js (in russian)
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностейДенис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
Денис Противенский, Percona — Percona Server for MongoDB: обзор возможностей
 
01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений01 - Web-технологии. Архитектура Web приложений
01 - Web-технологии. Архитектура Web приложений
 
Drupal Do
Drupal DoDrupal Do
Drupal Do
 
Major mistakes in site moving
Major mistakes in site movingMajor mistakes in site moving
Major mistakes in site moving
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 

Similaire à Оптимизация JavaScript в Drupal

Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Yandex
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?Danil Negrienko
 
Сборка Front-end’a
Сборка Front-end’aСборка Front-end’a
Сборка Front-end’aDelphiCon
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupalYury Glushkov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...IT-Portfolio
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.DrupalForumZP2012
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыUA Mobile
 
Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Yandex
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Alexey Kostin
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview ReleaseDenis Shestakov
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияYandex
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)Ontico
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...DrupalCamp MSK
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5OdessaFrontend
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3Technopark
 

Similaire à Оптимизация JavaScript в Drupal (20)

Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
 
Как сделать сайт быстрее?
Как сделать сайт быстрее?Как сделать сайт быстрее?
Как сделать сайт быстрее?
 
Сборка Front-end’a
Сборка Front-end’aСборка Front-end’a
Сборка Front-end’a
 
Client optimization drupal
Client optimization drupalClient optimization drupal
Client optimization drupal
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.Создаем Drupal дистрибутив: от идеи до сопровождения.
Создаем Drupal дистрибутив: от идеи до сопровождения.
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"Михаил Корепанов "Инкрементальные обновления на клиенте"
Михаил Корепанов "Инкрементальные обновления на клиенте"
 
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
 
Ice Php Framework Preview Release
Ice Php Framework Preview ReleaseIce Php Framework Preview Release
Ice Php Framework Preview Release
 
Иван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизацияИван Карев — Клиентская оптимизация
Иван Карев — Клиентская оптимизация
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Lime.JS
Lime.JSLime.JS
Lime.JS
 
Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5Webpack для самых маленьких | Odessa Frontend Meetup #5
Webpack для самых маленьких | Odessa Frontend Meetup #5
 
HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3HighLoad весна 2014 лекция 3
HighLoad весна 2014 лекция 3
 

Plus de Vlad Savitsky

Looking for Vulnerable Code. Vlad Savitsky
Looking for Vulnerable Code. Vlad SavitskyLooking for Vulnerable Code. Vlad Savitsky
Looking for Vulnerable Code. Vlad SavitskyVlad Savitsky
 
Art of Estimation. Vlad Savitsky
Art of Estimation. Vlad SavitskyArt of Estimation. Vlad Savitsky
Art of Estimation. Vlad SavitskyVlad Savitsky
 
Css Intro. Vlad Savitsky
Css Intro. Vlad SavitskyCss Intro. Vlad Savitsky
Css Intro. Vlad SavitskyVlad Savitsky
 
HTML. Быстрое погружение. Влад Савицкий
HTML. Быстрое погружение. Влад СавицкийHTML. Быстрое погружение. Влад Савицкий
HTML. Быстрое погружение. Влад СавицкийVlad Savitsky
 
How to be a believer online. Vlad Savitsky. Novomedia forum 2011
How to be a believer online. Vlad Savitsky. Novomedia forum 2011How to be a believer online. Vlad Savitsky. Novomedia forum 2011
How to be a believer online. Vlad Savitsky. Novomedia forum 2011Vlad Savitsky
 
Vlad savitsky. Church Site in 15 minutes
Vlad savitsky. Church Site in 15 minutesVlad savitsky. Church Site in 15 minutes
Vlad savitsky. Church Site in 15 minutesVlad Savitsky
 
Dmitry Drozdik. how to make friendship between drupal and content manager. dr...
Dmitry Drozdik. how to make friendship between drupal and content manager. dr...Dmitry Drozdik. how to make friendship between drupal and content manager. dr...
Dmitry Drozdik. how to make friendship between drupal and content manager. dr...Vlad Savitsky
 
Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...
Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...
Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...Vlad Savitsky
 
Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011
Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011
Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011Vlad Savitsky
 
Dennis popov. scrum for drupal. drupal camp kyiv 2011
Dennis popov. scrum for drupal. drupal camp kyiv 2011Dennis popov. scrum for drupal. drupal camp kyiv 2011
Dennis popov. scrum for drupal. drupal camp kyiv 2011Vlad Savitsky
 
Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011
Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011
Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011Vlad Savitsky
 
Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011
Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011
Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011Vlad Savitsky
 
Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011
Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011
Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011Vlad Savitsky
 
Evgeniy Karelin. Mongo DB integration example solving performance and high lo...
Evgeniy Karelin. Mongo DB integration example solving performance and high lo...Evgeniy Karelin. Mongo DB integration example solving performance and high lo...
Evgeniy Karelin. Mongo DB integration example solving performance and high lo...Vlad Savitsky
 
Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011
Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011
Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011Vlad Savitsky
 
Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...
Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...
Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...Vlad Savitsky
 

Plus de Vlad Savitsky (18)

Looking for Vulnerable Code. Vlad Savitsky
Looking for Vulnerable Code. Vlad SavitskyLooking for Vulnerable Code. Vlad Savitsky
Looking for Vulnerable Code. Vlad Savitsky
 
Art of Estimation. Vlad Savitsky
Art of Estimation. Vlad SavitskyArt of Estimation. Vlad Savitsky
Art of Estimation. Vlad Savitsky
 
Varnish and Drupal.
Varnish and Drupal.Varnish and Drupal.
Varnish and Drupal.
 
Chapter18
Chapter18Chapter18
Chapter18
 
Css Intro. Vlad Savitsky
Css Intro. Vlad SavitskyCss Intro. Vlad Savitsky
Css Intro. Vlad Savitsky
 
HTML. Быстрое погружение. Влад Савицкий
HTML. Быстрое погружение. Влад СавицкийHTML. Быстрое погружение. Влад Савицкий
HTML. Быстрое погружение. Влад Савицкий
 
How to be a believer online. Vlad Savitsky. Novomedia forum 2011
How to be a believer online. Vlad Savitsky. Novomedia forum 2011How to be a believer online. Vlad Savitsky. Novomedia forum 2011
How to be a believer online. Vlad Savitsky. Novomedia forum 2011
 
Vlad savitsky. Church Site in 15 minutes
Vlad savitsky. Church Site in 15 minutesVlad savitsky. Church Site in 15 minutes
Vlad savitsky. Church Site in 15 minutes
 
Dmitry Drozdik. how to make friendship between drupal and content manager. dr...
Dmitry Drozdik. how to make friendship between drupal and content manager. dr...Dmitry Drozdik. how to make friendship between drupal and content manager. dr...
Dmitry Drozdik. how to make friendship between drupal and content manager. dr...
 
Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...
Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...
Alexey Kostin. Increase site ctr in serp using google rich snippets. DrupalCa...
 
Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011
Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011
Oleg Natalushko. Drupal server anatomy. DrupalCamp Kyiv 2011
 
Dennis popov. scrum for drupal. drupal camp kyiv 2011
Dennis popov. scrum for drupal. drupal camp kyiv 2011Dennis popov. scrum for drupal. drupal camp kyiv 2011
Dennis popov. scrum for drupal. drupal camp kyiv 2011
 
Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011
Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011
Andriy Kushnarov. BOND: a giant drupal in a huge company. DrupalCamp Kyiv 2011
 
Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011
Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011
Pavlenko Sergey. Drush: using and creating custom commands. DrupalCamp Kyiv 2011
 
Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011
Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011
Danilenko Alexander. Drupal 7 theming on Omega. DrupalCamp Kyiv 2011
 
Evgeniy Karelin. Mongo DB integration example solving performance and high lo...
Evgeniy Karelin. Mongo DB integration example solving performance and high lo...Evgeniy Karelin. Mongo DB integration example solving performance and high lo...
Evgeniy Karelin. Mongo DB integration example solving performance and high lo...
 
Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011
Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011
Oleksandr Masovets. Forms in Drupal. Drupal Camp Kyiv 2011
 
Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...
Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...
Yuriy Gerasimov. Drupal Services. Integration with third party applications. ...
 

Оптимизация JavaScript в Drupal

  • 3. План ● С чего начинается сайт? ● Анализ текущей ситуации. ● Виды оптимизации. ● Обзор существующих Javascript- компрессоров. ● Обзор возможностей оптимизации JS ● В ядре Drupal 6 ● Дополнительными модулями ● Перемещение Javascript в footer
  • 5. Сайт «глазами» браузера ● Браузер: GET-запрос страницы. ● Сервер: на этот запрос высылает HTML-код страницы. ● Браузер: разбирает код и начинает загрузку всех внешних файлов в порядке их следования в коде страницы. ● Обычно браузер использует не более 2х потоков для загрузки внешних файлов. ● CSS и JS загружаются в одном потоке.
  • 6. Как браузер рендерит страницу? ● Парсинг и выполнение JS (внешних файлов и inline) откладывается пока не загрузится: ● весь JS из HEAD, ● весь CSS из HEAD. ● JS выполняется в порядке следования на странице.
  • 7. Что влияет на скорость? ● Время на каждый запрос зависит от: ● размера возвращаемого ответа, ● загрузки сервера и ● активности на каждой машине на всем пути между браузером и сервером. ● Чем больше размер файла - тем дольше он будет доставляться в браузер. ● Чем больше количество файлов на странице - тем дольше будет длиннее этап «белой страницы».
  • 8. Способы ускорения загрузки страницы ● Уменьшить размеры файлов. ● Уменьшить количество файлов. ● Использовать HTTP-сжатие. ● Увеличить количество хостов, с которых загружается статика сайта. ● Поместить JavaScript в footer страницы.
  • 10. Ищем JavaScript в проекте ● Найти JS-файлы в проекте можно командой: ● find . -name '*.js' ● Размер всех JS-файлов: ● find . -name '*.js' -exec ls -l {} ; | awk '{s+=$5} END {print s}' ● JavaScript-файлы в нашем проекте: ● В ядре (D6): 23 файла. ● В доп. темах и модулях: > 1300(!) файлов. ● Общий размер: 15Мб.
  • 11. Ограничение протокола HTTP ● Согласно спецификации HTTP 1.1 браузер должен устанавливать не более 2 одновременных соединений к одному хосту. ● Firefox 2: 2 ● Firefox 3,4: >4 ● Opera 9.26: 4 ● Opera 9.5 beta: 4 ● Safari 3.0.4 Mac/Windows: 4 ● IE 6,7: 2 ● IE 8: 6
  • 12. Выводы ● Большинство JS-файлов не оптимизированы. ● Файлов много и их суммарный размер значителен. ● Большое количество внешних файлов на странице. ● Ограничение браузеров на количество одновременных соединений с сервером.
  • 14. Виды оптимизации ● Минимизация JavaScript ● Обфускация ● Аггрегация ● HTTP-cжатие
  • 15. Минимизация JavaScript ● Удаление из кода всех несущественных символов. ● В минимизированном коде удаляются: ● все комментарии, ● незначащие пробелы, ● переносы строк, ● символы табуляции. ● Утилиты: JSMin и YUI Compressor. ● Минимизация безопасна.
  • 16. Обфускация ● Изменения: ● Удаляются пробельные символы и вырезает комментарии (как в минимизации), ● Имена функций и переменных заменяются на более короткие ● Утилиты: Dojo Compressor (ShrinkSafe). ● Может вносить в код ошибки. ● Требует правки кода для выделения в нем API-функций и других элементов, которые не должны быть изменены.
  • 18. Аггрегация ● Объединение нескольких файлов на странице в один. ● Аггрегация безопасна. ● Позволяет уменьшить количество файлов на странице. ● В Drupal 6 и выше аггрегация CSS и JS- файлов встроена в ядро. ● В Drupal 5 нужно установить доп. модуль.
  • 19. HTTP-cжатие ● Сжимается контент (в основном текстовый), который передается с веб-серверов через интернет в браузеры. ● Метод доставки сжатого контента включен в HTTP/1.1 и все современные браузеры поддерживают протокол HTTP/1.1. ● Используются общедоступные алгоритмы сжатия. ● Преимущество в том, что уменьшается размер передаваемых файлов.
  • 20.
  • 22. Javascript-компрессоры (1) ● JSMin (Традиционный компрессор) ● Написан несколько лет назад Дугласом Крокфордом (Douglas Crockford). ● Утилита безопасна. ● Dojo shrinksafe ● Очень популярный JavaScript компрессор. ● Написан на Java. ● Парсит код, используя библиотеку rhino и изменяет имена локальных переменных.
  • 23. Javascript-компрессоры (2) ● Packer ● Написан Дином Эдвардсом (Dean Edwards). ● Дает бОльшее сжатие. ● Добавляет распаковку "на лету" во время выполнения JavaScript. ● YUI Compressor ● Новыейший компрессор, написанный Люлиен Лекомт (Julien Lecomte) ● Объединяет безопасность JSMin с высочайшим уровнем сжатия Dojo Shrinksafe. ● Написан на Java и основан на библиотеке rhino.
  • 24. Степень сжатия файлов разного размера
  • 27. Оптимизация JS в ядре Drupal 6
  • 28. Стандартные возможности ядра Drupal ● В ядре Drupal 6 реализованы: ● аггрегация JavaScript-файлов ● HTTP-сжатие. ● Страница настроек «Performance» ("Производительность") ● admin/settings/performance
  • 30. Как работает оптимизация JavaScript в ядре Drupal? ● JS-файлы объединяются в один большой файл ● после каждого файла добавляется ";n". ● Код не изменяется ● см. drupal_build_js_cache()
  • 31. Недостатки и преимущества оптимизации в ядре Drupal Преимущества: Недостатки: ● Уменьшается количество файлов на странице, а значит и количество запросов к серверу
  • 32. Использование HTTP-сжатия в ядре Drupal 6 ● Включение сжатия на странице настройки производительности ("Perfomance"):
  • 33. Как работает HTTP-сжатие в Drupal 6 ● Фукнция page_set_cache() сохраняет сжатый контент страницы в кеше, если: ● сжатие трафика включено и ● Расширение PHP zlib присутствует в системе. ● Браузер получит сжатый контент, если: ● Accept-Encoding: gzip,deflate ● Сервер настроен отдавать сжатый контент (mod_gzip, mod_deflate или директивы в .htaccess) ● JS и CSS файлы кешируются не сжатыми и сжимаются «на лету»
  • 34. Преимущества и недостатки сжатия в ядре Drupal Преимущества Недостатки ● Контент страницы ● JS и CSS не кешируется сжатым кешируется сжатым. ● Уменьшается ● JS и CSS размер кешируются «на передаваемой лету» страницы ● Уровень сжатия маленький
  • 36. Модуль JavaScript Aggregator ● http://drupal.org/project/javascript_aggregator ● Делает минимизацию JS-файлов, используя JSMin. ● Может сжимать уже аггрегированные и минимизированные JS-файлы, используя gzip-сжатие. ● Сжатая копия кешируется в файле.
  • 37. Пример Gzip сжатия Имя JS-файла в кеше Размер, Комментарий байт 6e13c ... d3b1f.js 289.558 Аггрегирован ядром Drupal. 6e13c ... d3b1f.jsmin.js 173.243 Минифицирован с помощью JSMin. 6e13c ... d3b1f.jsmin.js.gz 47.618 Минифицирован и сжат.
  • 38. Модуль Parallel ● http://drupal.org/project/parallel ● Позволяет браузеру параллельно загружать внешние файлы страницы. ● Для этого создается 3 новых поддомена, которые указывают на одну корневую папку сайта. ● Не требует хакать ядро Drupal. ● Модуль Parallel работет только с JavaScript, картинками и CSS.
  • 39.
  • 41. Перенос Javascript в footer ● drupal_add_js($data = NULL, $type = 'module', $scope = 'header', $defer = FALSE, $cache = TRUE, $preprocess = TRUE) ● $scope (optional) The location in which you want to place the script. Possible values are 'header' and 'footer' by default. If your theme implements different locations, however, you can also use these. ● http://drupal.org/node/784626 ● «Make 'footer' the default scope for drupal_add_js() so that pages render fast»
  • 43. Рекомендации ● Хранить сжатые JS-файлы с максмальным уровнем сжатия. ● Использовать более эффективные методы упаковки JS и CSS-файлов. ● Переместить Javascript в footer, чтобы ускорить момент показа страницы пользователю. ● Использовать CDN или модуль Parallel, чтобы увеличить количество одновременных соединений, которые может позволить себе браузер. ● Во время разработки использовать методы упаковки JS, которые не изменяют код (JSMin), а на production можно упаковать с помощью YUI Compressor.