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
 
Введение в Akka
Введение в AkkaВведение в Akka
Введение в Akka
Zheka Kozlov
 
Java осень 2012 лекция 5
Java осень 2012 лекция 5Java осень 2012 лекция 5
Java осень 2012 лекция 5
Technopark
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Sergey Xek
 
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Про автотесты, фреймворки и железки. Андрей Баюн. Debug time#2 2014
Unigine Corp.
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
it-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 (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)
Ontico
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.DevOps в Agile среде. Как, почему и когда инструменты помогают.
DevOps в Agile среде. Как, почему и когда инструменты помогают.
Alexander Titov
 
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
camp_drupal_ua
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
Alexander Makarov
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex 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
 

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 подобного фреймворка для разработки модулей. В скором времени закончу описание принципов работы.