Upload
stanislaw-aurek
View
50
Download
7
Embed Size (px)
DESCRIPTION
Разгони свой сайт. Лекция 7: «Ненавязчивый» JavaScript. Мациевский Николай. 1 / 2 2. webo.in. Содержание. «Отложенная» загрузка «Ненавязчивый» JavaScript «Ненавязчивая» реклама «Ненавязчивые» счетчики. 2 / 2 2. webo.in. «Отложенная» загрузка. 3 / 2 2. webo.in. - PowerPoint PPT Presentation
Citation preview
Разгони свой сайтЛекция 7: «Ненавязчивый» JavaScript
Мациевский Николай
1 / 22webo.in
Содержание
• «Отложенная» загрузка
• «Ненавязчивый» JavaScript
• «Ненавязчивая» реклама
• «Ненавязчивые» счетчики
2 / 22webo.in
«Отложенная» загрузка
webo.in 3 / 22
Событие DOMContentLoaded
• Срабатывает по готовности DOM– По окончанию второй стадии загрузки
• У пользователя сформированная страница– Загрузка страницы для него завершилась
• Загружаем дополнительные файлы– Например, JavaScript
4 / 22webo.in
Кроссбраузерный подход
5 / 22webo.in
• IE: атрибут defer + onreadystatechange
• Дополнительный «мнимый» скрипт
• Safari: document.readyState
• Проверяем с заданным интервалом
• «Старые» браузеры: window.onload
• Для обратной совместимости
Неблокирующая загрузка
6 / 22webo.in
• JavaScript-вызовы блокируют загрузку– Не дают применять параллельные потоки
• Динамическая загрузка скриптов– DOM-методы по onload – лучше всего– defer / document.write – только в IE– XHR + eval – выполняется долго– XHR + script.innerText – еще сложнее– Iframe – дополнительная нагрузка
«Ненавязчивый» JavaScript
webo.in 7 / 22
Обратная совместимость
9 / 22webo.in
• Ссылки ведут на соответствующие страницы
• Даже если с onclick
• Анимация работает на CSS
• Везде, где это возможно
• Страница функционирует без JavaScript
• JavaScript – только дополняет!
Очищаем код
8 / 22webo.in
• Семантический HTML
• Разметка соответствует смыслу
• HTML отделен от CSS
• Содержание от представления
• HTML отделен от JavaScript
• Содержание от взаимодействия
Доступ к DOM-дереву
10 / 22webo.in
• Доверять, но проверять
• Элемента или метода может не быть
• DOM-методы
• getElementById
• getElementsByTagName
• getElementsByClassName (не везде)
Обработчики событий
11 / 22webo.in
• Для одного элемента
• .onclick , .onload и т.д.
• или attachEvent / addEventListener
• Для группы
• родитель отвечает за обработку
• источник определяем по e.target
«Ненавязчивая» реклама
webo.in 12 / 22
Внешняя реклама на сайте
• Блокирует отрисовку страницы
• iframe спасает, но не всегда возможен
• Скорость загрузки зависит от скорости доступа к внешним ресурсам
• Логика отображения рассчитывается через браузер
13 / 22webo.in
Добавление элементов
14 / 22webo.in
• document.write• Блокируют загрузку• Нужно вставлять максимально близко к
концу страницы
• innerHTML• Требует подготовленного контейнера• Можно использовать на любой стадии
загрузки
Виды размещения
15 / 22webo.in
• Контекстная реклама• Можно загружать в «отложенном» режиме
• TopLine / RichMedia / банеры• Можно вставлять в подготовленные блоки
на странице
• PopUnder• Раздражает больше всего
Архитектура рекламной сети
16 / 22webo.in
• Вся логика вычисляется на сервере• Пользователь получает
готовый файл / текст
• Вся реклама вызывается на третьей или четвертой стадии• Через отложенную загрузку
• Статистика считается через логи
• Коллизии при кэшировании?
«Ненавязчивые» счетчики
webo.in 17 / 22
Общая структура
• .gif файл вызывается с сервера статистики
• Все параметры передаются в GET-запросе
• Внешняя библиотека загружается для дополнительной бизнес-логики
18 / 22webo.in
Вставка .gif файла
• document.write– Блокируем отображение страницы– Устаревшая технология
• new Image().src– Поддерживается всеми браузерами– Не блокирует загрузку страницы
19 / 22webo.in
«Отложенные» счетчики
• Находим document.write
• Анализируем параметры у .gif
• Преобразуем вызов в new Image()
• Используем в любом месте– Вставляем в сам HTML-файл– Вставляем в JavaScript-библиотеку– Вызываем при каком-то условии– И т.д.
20 / 22webo.in
Динамическая статистика
• Библиотека на своем сервере– Полный контроль (максимальное сжатие)– Нет обращений к внешнему хосту– Нет контроля изменений
• «Отложенный» вызов– Динамическое добавление библиотеки– Проверяем по timeout, загрузился ли файл– Вызываем функцию счетчика
21 / 22webo.in
В следующей лекцииБыстрый JavaScript
• Замыкания и утечки памяти
• «Тяжелые» JavaScript-вычисления
• Быстрый DOM
• Кэширование в JavaScript
• Элементарные операции
22 / 22webo.in