Очень часто приходится описывать различные объекты и программы с помощью предметно-специализированных языков программирования. В докладе будет рассказано, как можно разработать для своего языка программирования интерпретатор и компилятор в JavaScript с помощью популярного генератора парсеров Jison.
Ускорение client-side для мобильных устройств. Failoverconf 2014Yuri Ustinov
Доклад для технологической конференции failoverconf.ru. Москва, 23 мая 2014.
Доступность современного онлайн-бизнеса 24/7 - это не только бесперебойная работа сайта, но и его удобство и работоспособность с мобильных устройств в условиях низкого качества связи.
Доля посетителей и покупателей, использующих мобильные устройства, стремительно увеличивается. Несмотря на это, мы практически не учитываем интересы мобильных пользователей при разработке или оптимизации сайтов и интернет-магазинов.
В докладе мы поговорим об ускорении client-side для мобильных устройств. Рассмотрим инструменты для измерения скорости загрузки и тестирования страниц в реальных «мобильных» условиях.
С ростом количества CSS на клиенте, разработчики озаботились его минимизацией: сначала простыми заменами, а потом и структурной оптимизацией. Первым иструментом, где появилась такая оптимизация, был CSSO и он оставался лучшим, пока не был заброшен. Не так давно он снова вернулся к жизни. Принципы работы CSSO, новые идеи оптимизаций и изменения в последних релизах от нового мейнтейнера проекта.
Рассказывается о кроссплатформенном движке Cocos2d, его возможностях и основных принципах работы с движком.
Презентация к внутреннему докладу ООО Инним https://youtu.be/OKE6XdreE2g
Ускорение client-side для мобильных устройств. Failoverconf 2014Yuri Ustinov
Доклад для технологической конференции failoverconf.ru. Москва, 23 мая 2014.
Доступность современного онлайн-бизнеса 24/7 - это не только бесперебойная работа сайта, но и его удобство и работоспособность с мобильных устройств в условиях низкого качества связи.
Доля посетителей и покупателей, использующих мобильные устройства, стремительно увеличивается. Несмотря на это, мы практически не учитываем интересы мобильных пользователей при разработке или оптимизации сайтов и интернет-магазинов.
В докладе мы поговорим об ускорении client-side для мобильных устройств. Рассмотрим инструменты для измерения скорости загрузки и тестирования страниц в реальных «мобильных» условиях.
С ростом количества CSS на клиенте, разработчики озаботились его минимизацией: сначала простыми заменами, а потом и структурной оптимизацией. Первым иструментом, где появилась такая оптимизация, был CSSO и он оставался лучшим, пока не был заброшен. Не так давно он снова вернулся к жизни. Принципы работы CSSO, новые идеи оптимизаций и изменения в последних релизах от нового мейнтейнера проекта.
Рассказывается о кроссплатформенном движке Cocos2d, его возможностях и основных принципах работы с движком.
Презентация к внутреннему докладу ООО Инним https://youtu.be/OKE6XdreE2g
CSSO – инструмент для минификации CSS, который недавно вернулся к активной разработке. Зачем?
Дело в том, что минификация CSS – задача сложная. Сейчас нет идеального минификатора, и чтобы эффективным был и делал все правильно. Ведь нужно учитывать не только особенности CSS, который постоянно меняется, но и уровень его поддержки браузерами, их баги, префиксы, хаки и т.д. Все это требует решения ряда непростых задач. Поговорим об этом, а так же принципах работы CSS-минификаторов, новых идеях и развитии CSSO.
Подробнее: http://www.slideshare.net/basisjs/csso-compress-css-english-version
Как правильно делать анимацию и добиться 60fps на различных девайсах | Odessa...OdessaFrontend
Анимация — неотъемлемая часть любого нынешнего веб-интерфейса. Виталий Калашников рассказывает про аппаратное ускорение анимаций, как использовать вычислительную технику при создании динамического веб-приложения. Как с его помощью заставить анимацию работать 60 кадров в секунду даже на мобильном устройстве и при этом не допустить падение браузера у пользователей. А также рассказывает про CSS vs JS анимации и сравнивает производительность.
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
Промостраницы — это отдельный жанр в вёрстке. Маленькие, лаконичные и обязательно с фишкой — вот всё, что обычно они из себя представляют. Чаще всего вёрстка промостраницы длится не более двух дней. Так должно было быть и на этот раз, но...
Шаблонизация основанная на работе с DOM становится трендом: React, Ractive, Basis.js уже используют этот подход, другие идут в эту сторону. Главным преимуществом подхода считается скорость, но оно далеко не единственное!
В докладе немного рассказано о возможностях, что дает DOM подход.
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Конференция FrontTalks, Екатеринбург, 19 сентября
Видео: https://vimeo.com/107694664
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Суперсилы Chrome DevTools — Роман Сальников, 2ГИСYandex
В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом.
Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
Расскажу о небольшом исследовании, в котором мы думали о том, можем ли мы себе позволить использовать React для отдельных элементов на сайте, как устроен серверный рендеринг в VK; и получилось ли связать одно с другим. Упомяну о строковых шаблонизаторах, виртуальной DOM и LR-парсерах.
Тестировать регресс верстки скриншотами модно, этим никого не удивишь. Мы давно хотели внедрить этот вид тестирования у себя. Все время смущали вопросы простоты поддержки и применения, но в большей степени вопрос пропускной способности решений (производительности). Хотелось решения, простого в использовании и быстрого в работе. Готовые решения не подошли, и мы взялись делать свое.
В докладе расскажем, что из этого вышло, какие задачи решали и как мы добились того, чтобы тестирование скриншотами практически не влияло на общее время прохождения тестов.
Видео: https://youtu.be/ULwdj_Vr_WA
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
За последние 15 лет веб сильно изменился и ускорился. Но большинство по-прежнему боится большого количества данных и сложной логики на клиенте. Потому что "тормозит".
Я хочу сломать стереотипы и показать, как начать делать крутые штуки на client-side. Тысячи и сотни тысяч объектов, разные типы, зависимые вычисляемые свойства, агрегация, множество вариантов отображения. Все это в вашем браузере. Без тормозов, регистраций, смс.
Видео этого доклада на конференции DUMP, Екатеринбург, 14 марта 2014: https://vimeo.com/90836493
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareYandex
Дмитрий расскажет о:
применении фильтров и эффектов для изображений прямо в браузере;
достоинствах и недостатках Canvas, WebGl, SVG и CSS-фильтров и шейдеров;
неизведанном мире SVG-фильтров, его продуманных до мелочей устоях, синтаксисе и правилах;
возможностях обработки изображений — от простых чёрно-белых картинок до нелинейных искажений и градиентных карт.
В докладе будет минимум скучной теории и максимум живых примеров.
CSSO – инструмент для минификации CSS, который недавно вернулся к активной разработке. Зачем?
Дело в том, что минификация CSS – задача сложная. Сейчас нет идеального минификатора, и чтобы эффективным был и делал все правильно. Ведь нужно учитывать не только особенности CSS, который постоянно меняется, но и уровень его поддержки браузерами, их баги, префиксы, хаки и т.д. Все это требует решения ряда непростых задач. Поговорим об этом, а так же принципах работы CSS-минификаторов, новых идеях и развитии CSSO.
Подробнее: http://www.slideshare.net/basisjs/csso-compress-css-english-version
Как правильно делать анимацию и добиться 60fps на различных девайсах | Odessa...OdessaFrontend
Анимация — неотъемлемая часть любого нынешнего веб-интерфейса. Виталий Калашников рассказывает про аппаратное ускорение анимаций, как использовать вычислительную технику при создании динамического веб-приложения. Как с его помощью заставить анимацию работать 60 кадров в секунду даже на мобильном устройстве и при этом не допустить падение браузера у пользователей. А также рассказывает про CSS vs JS анимации и сравнивает производительность.
Олег Мохов "Драматическая история одной маленькой промостранички"Yandex
Промостраницы — это отдельный жанр в вёрстке. Маленькие, лаконичные и обязательно с фишкой — вот всё, что обычно они из себя представляют. Чаще всего вёрстка промостраницы длится не более двух дней. Так должно было быть и на этот раз, но...
Шаблонизация основанная на работе с DOM становится трендом: React, Ractive, Basis.js уже используют этот подход, другие идут в эту сторону. Главным преимуществом подхода считается скорость, но оно далеко не единственное!
В докладе немного рассказано о возможностях, что дает DOM подход.
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Конференция FrontTalks, Екатеринбург, 19 сентября
Видео: https://vimeo.com/107694664
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Суперсилы Chrome DevTools — Роман Сальников, 2ГИСYandex
В своей работе мы постоянно используем инструменты, призванные облегчить нам жизнь. Но как хорошо мы ими на самом деле владеем? И почему мы пренебрегаем их суперсилами? Например, Chrome DevTools — это не только отладчик и инспектор HTML. Но когда у нас в руках молоток, кругом мерещатся гвозди. Десятки мегабайт и процентов загрузки процессора на вкладку браузера — верный признак того, что пора учиться пользоваться микроскопом.
Роман предложит освоить что-то посложнее молотка и расскажет о том, какую реальную пользу можно получить от профилирования, как найти в огромном отчёте проблему с кодом и что лучше — написать в коде десяток console.log или async debug.
React со скоростью света: не совсем обычный серверный рендерингTimophy Chaptykov
Расскажу о небольшом исследовании, в котором мы думали о том, можем ли мы себе позволить использовать React для отдельных элементов на сайте, как устроен серверный рендеринг в VK; и получилось ли связать одно с другим. Упомяну о строковых шаблонизаторах, виртуальной DOM и LR-парсерах.
Тестировать регресс верстки скриншотами модно, этим никого не удивишь. Мы давно хотели внедрить этот вид тестирования у себя. Все время смущали вопросы простоты поддержки и применения, но в большей степени вопрос пропускной способности решений (производительности). Хотелось решения, простого в использовании и быстрого в работе. Готовые решения не подошли, и мы взялись делать свое.
В докладе расскажем, что из этого вышло, какие задачи решали и как мы добились того, чтобы тестирование скриншотами практически не влияло на общее время прохождения тестов.
Видео: https://youtu.be/ULwdj_Vr_WA
Не бойся, это всего лишь данные... просто их многоRoman Dvornov
За последние 15 лет веб сильно изменился и ускорился. Но большинство по-прежнему боится большого количества данных и сложной логики на клиенте. Потому что "тормозит".
Я хочу сломать стереотипы и показать, как начать делать крутые штуки на client-side. Тысячи и сотни тысяч объектов, разные типы, зависимые вычисляемые свойства, агрегация, множество вариантов отображения. Все это в вашем браузере. Без тормозов, регистраций, смс.
Видео этого доклада на конференции DUMP, Екатеринбург, 14 марта 2014: https://vimeo.com/90836493
Как сделать Instagram в браузере — Дмитрий Дудин, xbSoftwareYandex
Дмитрий расскажет о:
применении фильтров и эффектов для изображений прямо в браузере;
достоинствах и недостатках Canvas, WebGl, SVG и CSS-фильтров и шейдеров;
неизведанном мире SVG-фильтров, его продуманных до мелочей устоях, синтаксисе и правилах;
возможностях обработки изображений — от простых чёрно-белых картинок до нелинейных искажений и градиентных карт.
В докладе будет минимум скучной теории и максимум живых примеров.
Алексей Андросов "Тотальная заморозка = быстрая загрузка"Yandex
Все знакомы с различными способами ускорения загрузки страницы. Эта тема уже давно исследована. Но перед каждым проектом встает вопрос: а как жить в условиях постоянных релизов, когда пользователям приходится часто скачивать обновленный код? Как уменьшить объем загрузки или оптимизировать процесс, чтобы частые релизы не сильно увеличивали время загрузки? В докладе пойдет речь о том, как можно грузить файлы по хэшу от контента, а не по урлу с версией, какие инструменты для этого есть и как измерять эффективность этих способов.
Александр Русаков - TypeScript 2 in actionMoscowJS
В докладе речь пойдет об основных нововведениях TypeScript 2.0 и 2.1 (literal types, discriminated unions, mapped types...) и их использовании в реальных проектах.
Виктор Розаев - Как не сломать обратную совместимость в Public APIMoscowJS
Представьте что у вас есть публичный JavaScript API. Им пользуются сторонние девелоперы от Индии до Канады, чтобы писать свои облачные сервисы. Эти сервисы продают телекомуникационные компании с многомиллиардными оборотами превышающими стоимость вашей компании. Любая остановка сервиса - миллионные убытки. Представили? А нам и представлять не надо - это наша работа. Добро пожаловать в нашу реальность. В рамках доклада мы расскажем о том, как сохранить обратную совместимость при активном развитии и неизвестных пользователях, ну и причем тут вообще интерны.
Контекст в React, Николай Надоричев, MoscowJS 31MoscowJS
Контекст стал документированной фичей сравнительно недавно, но его использование либо осуждается, либо не понимается. Такие библиотеки как react-redux или react-router успешно используют для своих нужд. В докладе рассмотрим основные аспекты работы с контекстом: зачем он нужен и какие проблемы решает.
Верстка Canvas, Алексей Охрименко, MoscowJS 31MoscowJS
Зачем? Как и когда нужно создавать пользовательский интерфейс с помощью Canvas и как обогнать React Native - обо всем этом вы узнаете из этого доклада.
Команда разработчиков Angular2 провела огромную работу над Change Detector, он стал быстрым и "умным". В докладе рассмотрим две основные фазы Angular2 приложения, куда все таки делся $apply(), и почему Angular2 обещает быть фантастически быстрым (в сравнении с AngularJs).
Создание WYSIWIG-редакторов для веба, Егор Яковишен, Setka, MoscowJs 33MoscowJS
В 2016 году интернет-изданиям недостаточно просто писать интересные материалы, нужно быстро и качественно их оформлять и показывать на разных устройствах. Я расскажу о нашем опыте создания JS-редактора, с помощью которого ежедневно публикуются десятки постов для 3 миллионов читателей.
"Опыт разработки универсальной библиотеки визуальных компонентов в HeadHunter...MoscowJS
При увеличении количества проектов в компании, разработчики сталкиваются с задачей унификации кодовой базы. Решением подобной задачи может быть библиотека, фреймворк или общий набор компонент. Такой инструмент позволит разработчикам сконцентрироваться только на новых задачах, избежать дублирования кода и повысить производительность.
В HeadHunter с такой задачей столкнулись в 2014 году. Решением данной проблемы стало создание унифицированной библиотеки компонент, которая успешно используется на всех проектах HH. В своем докладе я хотел бы поделиться опытом развития библиотеки, проблемами, которые возникали при разработке, и их последовательным решением.
"Во все тяжкие с responsive images", Павел Померанцев, MoscowJS 29MoscowJS
Разработчики давно ищут способы оптимизации размера изображения без потери качества. Если вы готовы пуститься во все тяжкие, я расскажу как это сделать. Профит гарантирован!
"AMP - технология на три буквы", Макс Фролов, MoscowJS 29MoscowJS
Для большинства пользователей мобильный интернет полон боли и страданий. При том что пользователей становится только больше — проблема не решается, а становится острее. Вас ожидает увлекательнейший доклад о том, как удалось разогнать до космической скорости мобильную Lenta.ru.
13. Анимировать будем так...
function animate() {
var col = document.querySelectorAll('.snowflake');
for (var i = 0; i < col.length; i++) {
var rect = col[i].getBoundingClientRect();
col[i].style.top = ..., col[i].style.left = ...
}
setTimeout(animate, 0);
}
13
26. Есть еще"дерево рендеринга"
Это длинный текст, который браузер
разобьет на прямоугольники (свой под
каждую строку) в зависимости от
размеров родительского блока, размера
шрифта, гарнитуры и даже этого кота.
Набор этих прямоугольников составит
"дерево рендеринга". Тут еще немного текста чтобы получилось
красиво…
26
27. Есть еще"дерево рендеринга"
Это длинный текст, который браузер
разобьет на прямоугольники (свой под
каждую строку) в зависимости от
размеров родительского блока, размера
шрифта, гарнитуры и даже этого кота.
Набор этих прямоугольников составит
"дерево рендеринга". Тут еще немного текста чтобы получилось
красиво…
27
28. Layout — пересчет дерева рендеринга на основании стилей элементов
и других входных параметров, например размера окна браузера.
Это дорогая операция!
28
29. Что приводит к инвалидации дерева
рендеринга?
• Изменение определенных стилей элемента
• Размер, гарнитура шрифта
• Геометрия (width, height, margin, etc…)
• etc…
• Изменение DOM-дерева
29
30. Оптимизации…
Браузер всячески старается оптимизировать процесс. Например, он
откладывает применение стилей и пересчет дерева рендеринга до
окончания синхронного блока JavaScript. Таким образом он
"пакетирует" несколько изменений в один расчет.
30
31. Ложка дегтя
Но если в коде мы начинаем читать стилевую информацию, браузеру
приходится применить все отложенные расчеты здесь и сейчас для
того, чтобы ответить на наш запрос.
Это происходит синхронно. Все прочие процессы блокируются!
Эффект сравним с работой Garbage Сollector.
31
32.
33. Что приводит к"чтению стилей"
• getComputedStyle(elt)
• elt.style.???
• elt.getBoundingClientRect()
33
34. Вернемся к нашей анимации
var col = document.querySelectorAll('.snowflake');
for (var i = 0; i < col.length; i++) {
// read one, forced layout
var rect = col[i].getBoundingClientRect();
// write one, layout invalidated
col[i].style.top = ..., col[i].style.left = ...
}
34
35. Как исправить?
Все очень просто!
Нужно сначала все прочитать, а потом все записать!
Спасибо, Кэп!
35
36. function animate() {
var col = document.querySelectorAll('.snowflake');
[].slice.call(col)
// read all
.map(readCoordinates)
.map(applyAnimationStep)
// write all
.forEach(applyToDOM);
setTimeout(animate, 0);
}
36
50. Используем знание о времени!
function animate(ts) {
var col = document.querySelectorAll('.snowflake');
[].slice.call(col)
.map(calculateNextPosition(ts))
.forEach(applyToDOM);
requestAnimationFrame(animate);
}
50
52. CSS-свойство"will-change"
Позволяет подсказать браузеру, что будет происходить с элементом.
Браузер может использовать для оптимизаций
.someElt { ... }
.someElt:hover { will-change: transform; }
.someElt:active { transform: rotate(90deg); }
52
54. Disclaimer :)
Почти все это актуально не только для анимации! Любой код,
работающий с DOM, может выиграть!
• Сначала чтение, затем запись
• transform: translate3d
• requestAnimationFrame
• will-change
• И не забывайте про DevTools!
54