РИТ++ 2017, Frontend Сonf
Зал Мумбаи, 6 июня, 10:00
Тезисы:
http://frontendconf.ru/2017/abstracts/2586.html
Каждый разработчик сталкивается с добавлением сторонних счетчиков и прочего чужого кода на сайт. А современный e-commerce хочет знать о пользователе все. Поэтому мы прошли путь от нескольких сторонних скриптов до сотни.
Как сделать так, чтобы они не затрагивали производительность приложения и минимально влияли на качество кода проекта? Я расскажу о том, как нам удалось этого добиться.
...
15. Adding analytics.js to Your Site http://bit.ly/1IwFjPf
“The code should be added near the top of
the <head> tag and before any other script or CSS tags …”
15
Пример: google analytics
16. Adding analytics.js to Your Site http://bit.ly/1IwFjPf
“The code should be added near the top of
the <head> tag and before any other script or CSS tags …”
16
Пример: google analytics
17. Defer vs async
<script>
HTML parsing
HTML parsing paused
Script download Script execution
async vs defer attributes http://bit.ly/2rhhZnx
17
18. <script>
HTML parsing
HTML parsing paused
Script download Script execution
async vs defer attributes http://bit.ly/2rhhZnx
<script async>
18
Defer vs async
19. <script>
HTML parsing
HTML parsing paused
Script download Script execution
<script async>
<script defer>
19
Defer vs async
async vs defer attributes http://bit.ly/2rhhZnx
20. Prefer DEFER Over ASYNC by Steve Souders
http://bit.ly/2pMZ6Zz
20
Defer vs async
25. Чего добились
• Уменьшили время загрузки страницы
• Вначале загружается и исполняется только наш js-код
25
26. Чего добились
• Уменьшили время загрузки страницы
• Вначале загружается и исполняется только наш js-код
• Сторонний код загружается и исполняется, когда пользователь
уже может взаимодействовать со страницей
26
37. • Согласовываем какие данные могут собираться и куда отправляться
• Content Security Policy
• Размер кода < 60kb и время ответа партнерских сервисов < 1s
37
Требования к партнерам
38. • Согласовываем какие данные могут собираться и куда отправляться
• Content Security Policy
• Размер кода < 60kb и время ответа партнерских сервисов < 1s
• Service worker
38
Требования к партнерам
39. • Service worker
• программируемый сетевой прокси
39
Требования к партнерам
40. • Service worker
• программируемый сетевой прокси
• https only
40
Требования к партнерам
41. • Service worker
• программируемый сетевой прокси
• https only
• fetch API
41
Требования к партнерам
42. 42
Требования к партнерам
• Согласовываем какие данные могут собираться и куда отправляться
• Content Security Policy
• Размер кода < 60kb и время ответа партнерских сервисов < 1s
• Service worker
• Согласовываем имена в коде
46. • Тег – фрагмент стороннего js-кода
• Контейнер – загрузчик тегов
46
Сервисы для организации скриптов
47. • Тег – фрагмент стороннего js-кода
• Контейнер – загрузчик тегов
• Правило – условие, при котором исполняется тег
47
Сервисы для организации скриптов
61. Выводы
• С осторожностью относитесь к чужому коду
• Сторонние сервисы избавляют от велосипедов
61
62. Выводы
• С осторожностью относитесь к чужому коду
• Сторонние сервисы избавляют от велосипедов
• Перфоманс – большая тема, но очевидные решения – самые
действенные
62
банеры даже когда вы уйдете с ламоды будете видеть наши банеры везде)
предсказание размеров пользователю
персонализированный поиск
Рекомендации
Собственная баннерная система !!!!
Персональные скидки
Давайте все делать сами?
Не можем позволить себе все разрабатывать сами, быстро меняющиеся требования
Сложно, дорого и сложно; разные алгоритмы
ЗАЧЕМ ВСЕ ЭТО НУЖНО?
несколько версий одного и того же
тормозит/не грузится если что-то из скриптов не отвечает
нет возможности отладить в тестовой среде
Загружаем скрипты как можно позже, чтоб не вредить пользователю, чтобы он быстрее мог взаимодействовать со страницей
не знаем что делает чужой код и как, как его контролировать и управлять им
Навести как-то во всем порядок, написать какую-то админку? Положить куда-то на ftp для скорости исправления?
Как не засорять свою кодовую базу?
DEFER scripts никогда не блокируют синхронные скрипты,
В то время как ASYNC – зависит того как быстро они загрузились.
Блокировка инстраграм domcontentloaded на 0.5s
=>
Графики для каталога !!!
Нагрузка js-кода на CPU (html и css – существенно меньше)
Работает быстро
Но как понимаете
риск сломать все, все еще есть
=>
У нас есть список требований который мы даем нашим партнерам
=>необходимо понимать куда отсылать данные
Механизм обеспечения безопасности, защита от xss (атаки подмены контента)
Все что не разрешено – запрещено, т е по-умолчанию блокируется все
По-умолчанию запрещен eval и inline
Пример заголовка, выставляется в nginx, на странице
Загружать с того же домена что и сама страница
Грузить скрипты с определенного домена и поддоменов
Разрешить inline-script
Стандартный формат отсылается браузером, если проверка не прошла
Для теста можно использовать: cspro
disposition: report or enforce
Nginx, оперативное редактирование??,
очень длинные заголовки
Отдельный поток неблокирующий DOM,
Offline first,
рассматриваем перевод всей аналитики на него
Однако, Для нас важно сейчас и с чего решили начать: это юзать как прог сетев прокси
поддерживают последние версии firefox с флагами
Или диспетчеры тегов
Используем gtm - бесплатен
Терминологии, код загружается в админку сервиса
Скрипт который загружает и исполняет теги в зависимости от..