SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
YaC 2013
Основные цели посещения
YaC
• Послушать доклады про проектирование и
поддержку API

• Послушать доклады про производительность и
разработку 

• Пообщаться с разработчиками и узнать их
мнение на некоторые аспекты разработки
Итоги YaC
• 68 докладчиков

• 6 залов

• 7 секций

• 54 доклада

• 9 прослушанных докладов

• 5 интересных докладов

• 2 полезных доклада

• 2 человека с которыми было полезно пообщаться
Какие доклады оказались
интересными?
• Рекомендации по проектированию API

• Вклад Adobe в Web

• API Design at GitHub

• API для людей: как создать API, которым понастоящему пользуются

• How to Destroy The Web
Чем же они были
интересны?
Рекомендации по
проектированию javascript API
• Программный код – пользовательский интерфейс. 

• Но все меняется когда мы добавляем API. 

Программный код – программный интерфейс – пользовательский интерфейс

• Обязательно должна быть обратная совместимость

• Пользователь не должен переписывать свой код, когда вы свой код должны переписывать (версионирование?)

• Абстракции в API

Рекомендации
• Уровни должны знать только о своих соседях. Каждый уровень – это информационный контекст

• Максимальное разграничение обязанностей

• Работа через события – На каждое действия придумываем события и потом контролы подписываются лишь на нужные

• Программные интерфейсы. Интерфейсы могут наследоваться

• Продумываем сначала абстракции потом пишем код используя методы интерфейсов

• Значения по умолчания
Вклад Adobe в Web
• Было рассказано про:

1. css-regions – перетекание текста работает уже в ios7

2. css-shapes

3. blend modes – круто, но все еще нет multiply

• Adobe купил PhoneGap

• Topcoat использует BEM и он создан для пользователей PhoneGap

• В кратце рассказано про Brackets, который использует Apache Cordova (cordova.io)

• Web Platform (webplatform.org) – соц.платформа – wiki по веб разработке

• Дмитрий Барановский показал короткое демо своей новой библиотеки по работе с SVG,
которая будет официально представлена 22 октября на HTML5DevConf
API Design at GitHub
• Если нужно в api поменять формат выдачи ресурса в соответсвии с добавлением новой
информации, не нужно ломать старый формат или добавлять версии. Нужно смерджить новый
формат в старый

• Совместимый api куда важнее чем красивый api

• Если вы выпустили бета api, для того что бы пользователи это поняли при обычном
использовании необходимо:

1. В ответе на запрос возвращаем 415 (Unsupported media type) с сообщением о том что
это бета версия с ссыкой на документацию. 

2. В документации указан кастомный заголовок с котором будет возвращаться правильный
ответ. 

Например – Accept: application/vnd.github.com.preview+json

• api.github – это приложение написанное на sinatra (ruby)
API для людей: как создать API, которым
по-настоящему пользуются
1. Моделирование за лидером

1. две компании – два типа API

1. Flick

2. Twitter – его и выбрали

1. RESTfull

2. JSON

3. OAuth

4. Convention over configuration

2. Моделирование информации

1. Разбивка на логические классы

2. Выдача фото с коментариями как 2 запроса – это дешевле для серверов + пользователь видит результат быстрее

3. Версия 1.0

1. Read-write

2. Базовые возможности сайта

3. Аутентификация

4. Постоянное развитие (v1.0 прожил 2 дня)

4. RTFM – документация превыше всего!

1. Документация находится на github – разработчики могут предлагать правки

5. Решение проблем с API с помощью аналитики

1. Server perf

2. Оптимизация под массового пользователя

3. Среднее время запроса 100-120мс

6. Feedback driven development
А какие оказались на
удивление полезными?
• Добро пожаловать в SoundCloud!

• Когда загрузится страница нам нужно знать
наверняка
Добро пожаловать в
SoundCloud!
• Ребята используют Requre.js + Almond, Backbone.js (Trombone), Handlebars и много самодельных
тулзов

• css в amd – стили собираются, как js компоненты, которые могут добавляться и удаляться из страницы

• Передача экземпляра модели в разные вью – identity map (паттерн Object Pools).

• Используется ручной GC – делает зачистку identity map раз в минуту убедившись, что объекты долгое
время не использовались

• Есть утилита memory-leak-finder (вдохновлена JSWhiz – расширением для Google Closure Compiler)
которая анализируя код и ищет возможные утечки

• Используют api window.performance каждые 30 минут для сбора статистики

• С помощью AST для девбилдов добавляют в каждую функцию дебаг вызов что позволяет составлять
расширенный stack trace при ошибках

• Для определения производительности страниц используют враппер над devtools – Telemetry (написана
на Python)
Дополнительно о
структуре SoundCloud
• Для каждой страницы собирается 3 пакета скриптов:

1. Вендорные скрипты (jQuery, Backbone и т.д.)

2. Шаблоны и стили

3. Модули

• Стили указываются в качестве зависимостей для View. 

• Это позволяет точно знать какие стили нужны для конкретного модуля/виджета и позволяет легко контролировать
дерево стилей

• Css файлы не используют импорты

• Стили компилируются в AMD модули на лету при запросе с сервера

• Вложенные вью можно указать в шаблоне через хелпер Handlebars – {{view "views/name" id="123"}}

• Модули пишуться в нотации CommonJS с последующей компиляцией на лету в AMD – позволяет убрать из модулей
лишние обертки + использовать модули на node.js

• Identity Map реализуется через коллекцию синглтонов, которые можно вернуть по уникальному id при инициализации
модели во вью. Во вью передается коструктор модели, а не экземпляр.

• Модификация js кода на основе AST делается по схеме Esprima (составление дерева) → estraverse (изменение нужных
Когда загрузится страница нам нужно знать наверняка
• Загрузка страниц:

1. До 100 мс – мгновенно

2. До 1с – ожидание…

3. Больше 1с – переключение внимания

• У Яндекса есть утилита под названием Шутилка, которая делает следующее:

1. Внедряется в процесс браузера

2. Запускает процесс открытия указанной страницы начиная делать скриншоты страницы каждые 10мс

3. По завершению визуальных изменений на странице отфильтровывает дублирующиеся изображения и передает
оставшиеся изображения в программу анализа

4. Программа анализа строит граф изменения изображения и позволяет анализировать загрузку во временых отрезках

• Задача для измерения – узнать время начала/окончания визуальных изменений у пользователя

• Как измеряли:

1. Скрипты на странице (end of body – start of head)

1. Есть кореляция

2. Зависит от сети, браузера + погрешность

2. Navigation Timing API

1. perfomance.timing – много полезной информации, но в ней нет того момента, когда браузер начал что-то
отрисовывать

2. domContentLoad – navigationStarted?

3. Эксперементальные API

1. performance.timind.firstPaint – IE (все супер круто)

2. chrome.loadTimes().firstPaintTime – Chrome (почти идиально – погрешность 100мс)

3. Пока нет поддержки в FF (хотя можно выставить флаги на машинах разработчиков)

4. Не правильные данные в Opera

4. SpeedIndex
Что в итоге я для себя
вынес?
• Появилось много идей по усовершенствованию архитектуры
Фогейма и процесса разработки (скоро будут описаны в wiki)

• Выяснил что разработчики думают про использование
localStorage для кеширования статики. Какие плюсы и минусы
на реальных проектах/прототипах

• Узнал все особенности по оптимизации скорости отрисовки
страницы в конкурсе от Яндекса

• Появилась идея MVC подобного фреймворка для разработки
модулей. В скором времени закончу описание принципов работы.

Mais conteúdo relacionado

Mais procurados

Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самSergey Xek
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Badoo Development
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"IT Event
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковDevGAMM Conference
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в AkkaZheka Kozlov
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"Badoo Development
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5Technopark
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевПакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевPositive Hack Days
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Pavel Dovbush
 
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Unigine Corp.
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and AngularSQALab
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий МантулаFwdays
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)
Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)
Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)Ontico
 

Mais procurados (19)

Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
 
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
Григорий Петров "WebRTC в мобильных приложениях при помощи React Native"
 
Wargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движковWargaming.net: Архитектура современных 3D движков
Wargaming.net: Архитектура современных 3D движков
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в Akka
 
"Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7""Новые возможности MySQL 5.7"
"Новые возможности MySQL 5.7"
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
 
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевПакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр Ковалев
 
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
Эволюция клиентской разработки: от веба ко "всеобщей мобилизации” или mobile-...
 
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула"Посмотрим на Акку-Джаву" Дмитрий Мантула
"Посмотрим на Акку-Джаву" Дмитрий Мантула
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
Sivko
SivkoSivko
Sivko
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)
Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)
Путь мониторинга: модульность, гибкость, devops / Всеволод Поляков (Grammarly)
 

Destaque

Linked in presentaion
Linked in presentaionLinked in presentaion
Linked in presentaionrivkaf
 
Product Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesProduct Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesUptime Devices
 
Uptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices
 
P ythagorean and his theorem
P ythagorean and his theoremP ythagorean and his theorem
P ythagorean and his theoremmatt_hicks
 
Geo final project
Geo final projectGeo final project
Geo final projectgbcm0920
 

Destaque (6)

LogiExcel - Complete Logistics Solution
LogiExcel -  Complete Logistics SolutionLogiExcel -  Complete Logistics Solution
LogiExcel - Complete Logistics Solution
 
Linked in presentaion
Linked in presentaionLinked in presentaion
Linked in presentaion
 
Product Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled DevicesProduct Catalog - Network and Web Enabled Devices
Product Catalog - Network and Web Enabled Devices
 
Uptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled TechnologiesUptime Devices - Network and Web Enabled Technologies
Uptime Devices - Network and Web Enabled Technologies
 
P ythagorean and his theorem
P ythagorean and his theoremP ythagorean and his theorem
P ythagorean and his theorem
 
Geo final project
Geo final projectGeo final project
Geo final project
 

Semelhante a YaC 2013 Notes

Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Ontico
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложенияJohn Wezel
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.Alexander Titov
 
Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииDenis Latushkin
 
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...Ilya Slobodin
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Vladimir Bakhov
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Fwdays
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011camp_drupal_ua
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеDenis Chistyakov
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TKConf
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Ontico
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 

Semelhante a YaC 2013 Notes (20)

Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Redux и изоморфные приложения
Redux и изоморфные приложенияRedux и изоморфные приложения
Redux и изоморфные приложения
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
 
Использование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
 
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
Собрать нельзя клонировать. Как выбрать подход к созданию кроссплатформенных ...
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"Владимир Никонов "Вызовы при разработке enterprise продукта"
Владимир Никонов "Вызовы при разработке enterprise продукта"
 
Text
TextText
Text
 
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
Yury Glushkov.What should we build a website.Drupal Camp Kyiv 2011
 
Workflow: работа над проектом в Яндексе
Workflow: работа над проектом в ЯндексеWorkflow: работа над проектом в Яндексе
Workflow: работа над проектом в Яндексе
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
Прогрессивный рендеринг и Catberry.js / Михаил Реенко (2GIS / Flamp)
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 

Último (9)

Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 

YaC 2013 Notes

  • 2. Основные цели посещения YaC • Послушать доклады про проектирование и поддержку API • Послушать доклады про производительность и разработку • Пообщаться с разработчиками и узнать их мнение на некоторые аспекты разработки
  • 3. Итоги YaC • 68 докладчиков • 6 залов • 7 секций • 54 доклада • 9 прослушанных докладов • 5 интересных докладов • 2 полезных доклада • 2 человека с которыми было полезно пообщаться
  • 4. Какие доклады оказались интересными? • Рекомендации по проектированию API • Вклад Adobe в Web • API Design at GitHub • API для людей: как создать API, которым понастоящему пользуются • How to Destroy The Web
  • 5. Чем же они были интересны?
  • 6. Рекомендации по проектированию javascript API • Программный код – пользовательский интерфейс. • Но все меняется когда мы добавляем API. Программный код – программный интерфейс – пользовательский интерфейс • Обязательно должна быть обратная совместимость • Пользователь не должен переписывать свой код, когда вы свой код должны переписывать (версионирование?) • Абстракции в API Рекомендации • Уровни должны знать только о своих соседях. Каждый уровень – это информационный контекст • Максимальное разграничение обязанностей • Работа через события – На каждое действия придумываем события и потом контролы подписываются лишь на нужные • Программные интерфейсы. Интерфейсы могут наследоваться • Продумываем сначала абстракции потом пишем код используя методы интерфейсов • Значения по умолчания
  • 7. Вклад Adobe в Web • Было рассказано про: 1. css-regions – перетекание текста работает уже в ios7 2. css-shapes 3. blend modes – круто, но все еще нет multiply • Adobe купил PhoneGap • Topcoat использует BEM и он создан для пользователей PhoneGap • В кратце рассказано про Brackets, который использует Apache Cordova (cordova.io) • Web Platform (webplatform.org) – соц.платформа – wiki по веб разработке • Дмитрий Барановский показал короткое демо своей новой библиотеки по работе с SVG, которая будет официально представлена 22 октября на HTML5DevConf
  • 8. API Design at GitHub • Если нужно в api поменять формат выдачи ресурса в соответсвии с добавлением новой информации, не нужно ломать старый формат или добавлять версии. Нужно смерджить новый формат в старый • Совместимый api куда важнее чем красивый api • Если вы выпустили бета api, для того что бы пользователи это поняли при обычном использовании необходимо: 1. В ответе на запрос возвращаем 415 (Unsupported media type) с сообщением о том что это бета версия с ссыкой на документацию. 2. В документации указан кастомный заголовок с котором будет возвращаться правильный ответ. Например – Accept: application/vnd.github.com.preview+json • api.github – это приложение написанное на sinatra (ruby)
  • 9. API для людей: как создать API, которым по-настоящему пользуются 1. Моделирование за лидером 1. две компании – два типа API 1. Flick 2. Twitter – его и выбрали 1. RESTfull 2. JSON 3. OAuth 4. Convention over configuration 2. Моделирование информации 1. Разбивка на логические классы 2. Выдача фото с коментариями как 2 запроса – это дешевле для серверов + пользователь видит результат быстрее 3. Версия 1.0 1. Read-write 2. Базовые возможности сайта 3. Аутентификация 4. Постоянное развитие (v1.0 прожил 2 дня) 4. RTFM – документация превыше всего! 1. Документация находится на github – разработчики могут предлагать правки 5. Решение проблем с API с помощью аналитики 1. Server perf 2. Оптимизация под массового пользователя 3. Среднее время запроса 100-120мс 6. Feedback driven development
  • 10. А какие оказались на удивление полезными? • Добро пожаловать в SoundCloud! • Когда загрузится страница нам нужно знать наверняка
  • 11. Добро пожаловать в SoundCloud! • Ребята используют Requre.js + Almond, Backbone.js (Trombone), Handlebars и много самодельных тулзов • css в amd – стили собираются, как js компоненты, которые могут добавляться и удаляться из страницы • Передача экземпляра модели в разные вью – identity map (паттерн Object Pools). • Используется ручной GC – делает зачистку identity map раз в минуту убедившись, что объекты долгое время не использовались • Есть утилита memory-leak-finder (вдохновлена JSWhiz – расширением для Google Closure Compiler) которая анализируя код и ищет возможные утечки • Используют api window.performance каждые 30 минут для сбора статистики • С помощью AST для девбилдов добавляют в каждую функцию дебаг вызов что позволяет составлять расширенный stack trace при ошибках • Для определения производительности страниц используют враппер над devtools – Telemetry (написана на Python)
  • 12. Дополнительно о структуре SoundCloud • Для каждой страницы собирается 3 пакета скриптов: 1. Вендорные скрипты (jQuery, Backbone и т.д.) 2. Шаблоны и стили 3. Модули • Стили указываются в качестве зависимостей для View. • Это позволяет точно знать какие стили нужны для конкретного модуля/виджета и позволяет легко контролировать дерево стилей • Css файлы не используют импорты • Стили компилируются в AMD модули на лету при запросе с сервера • Вложенные вью можно указать в шаблоне через хелпер Handlebars – {{view "views/name" id="123"}} • Модули пишуться в нотации CommonJS с последующей компиляцией на лету в AMD – позволяет убрать из модулей лишние обертки + использовать модули на node.js • Identity Map реализуется через коллекцию синглтонов, которые можно вернуть по уникальному id при инициализации модели во вью. Во вью передается коструктор модели, а не экземпляр. • Модификация js кода на основе AST делается по схеме Esprima (составление дерева) → estraverse (изменение нужных
  • 13. Когда загрузится страница нам нужно знать наверняка • Загрузка страниц: 1. До 100 мс – мгновенно 2. До 1с – ожидание… 3. Больше 1с – переключение внимания • У Яндекса есть утилита под названием Шутилка, которая делает следующее: 1. Внедряется в процесс браузера 2. Запускает процесс открытия указанной страницы начиная делать скриншоты страницы каждые 10мс 3. По завершению визуальных изменений на странице отфильтровывает дублирующиеся изображения и передает оставшиеся изображения в программу анализа 4. Программа анализа строит граф изменения изображения и позволяет анализировать загрузку во временых отрезках • Задача для измерения – узнать время начала/окончания визуальных изменений у пользователя • Как измеряли: 1. Скрипты на странице (end of body – start of head) 1. Есть кореляция 2. Зависит от сети, браузера + погрешность 2. Navigation Timing API 1. perfomance.timing – много полезной информации, но в ней нет того момента, когда браузер начал что-то отрисовывать 2. domContentLoad – navigationStarted? 3. Эксперементальные API 1. performance.timind.firstPaint – IE (все супер круто) 2. chrome.loadTimes().firstPaintTime – Chrome (почти идиально – погрешность 100мс) 3. Пока нет поддержки в FF (хотя можно выставить флаги на машинах разработчиков) 4. Не правильные данные в Opera 4. SpeedIndex
  • 14. Что в итоге я для себя вынес? • Появилось много идей по усовершенствованию архитектуры Фогейма и процесса разработки (скоро будут описаны в wiki) • Выяснил что разработчики думают про использование localStorage для кеширования статики. Какие плюсы и минусы на реальных проектах/прототипах • Узнал все особенности по оптимизации скорости отрисовки страницы в конкурсе от Яндекса • Появилась идея MVC подобного фреймворка для разработки модулей. В скором времени закончу описание принципов работы.