Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Эволюция больших проектов. Опыт API Яндекс.Карт

HappyDev'13
December 08, 2013

Эволюция больших проектов. Опыт API Яндекс.Карт

Антон Корзунов

HappyDev'13

December 08, 2013
Tweet

More Decks by HappyDev'13

Other Decks in Programming

Transcript

  1. Если программу (модуль или библиотеку) рассматривать как чёрный ящик, то

    API — это множество «ручек», которые доступны пользователю данного ящика, и которые он может вертеть и дёргать. Википедия Что такое API
  2. Зачем выпускать новые версии • Новые платформы – браузеры –

    девайсы • Новые требования – к продукту – от продукта • Новые возможности • Новые стандарты – технологии – среда исполнения F6
  3. Переход от 1.0 к 1.1 • Библиотека Y5 – переход

    на jQuery • Отсутствие макетов – добавление интерфейса ILayout • Дополнительные проекции • Косметические правки F9
  4. Зачем выпускать новые версии F12 – Вышло много новых браузеров

    – Появились «тач» девайсы ! – Не монолитное ядро – jQuery не оправдал доверия – Кластеризатор, https, без ключей ! – transform, transition, canvas и т.д. • Новые платформы – браузеры – девайсы • Новые требования – к продукту – от продукта • Новые возможности • Новые стандарты – технологии – среда исполнения
  5. Дополнительные требования • Мультиязычность • Компактность • Адаптивность • Поддержка

    мобильных устройств • Модульность • Новый дизайн • Облегченная отладка F13
  6. Решение F14 • Поддержка новых технологий (и адаптивность) – реализуется

    через слабую связанность и возможность подмены модулей • Мультиязычность – реализуется на уровне динамических зависимостей • Компактность – модуль достаточно компактная сущность • Поддержка мобильных устройств – функционал ненужный десктопу • Модульность – панацея и решение всех проблем
  7. • Common-js • AMD • LMD • RequireJS • bash

    script … • Фатальный недостаток? Выбор модульной системы F16
  8. Своя модульность • Свой формат файлов – js + module.json

    • Свой компилятор – склейка файлов и meta-информации • Свой загрузчик – «оптимизированный» для нас • Common-js несовместимый формат F17
  9. Очередной велосипед? • Асинхронные require/provide • Единый синтаксис с обеих

    «сторон» API • Работа с css как с js модулями – оптимизация (csso, uglifyjs) – data uri • Пакеты • Динамические зависимости – «Run-time» определения нужных модулей – Переключаемые «темы» оформления • Оптимизация обмена данными • Сборка и раскатка «пакетами» F18
  10. Модульность позволяет • Работать в IE6 • Работать в Chrome

    30+ • Работать на мобильных • Работать на телевизорах • Поддерживать и SVG, и Canvas, и VML – в том числе одновременно ! • Главное написать эти модули – API состоит из ≈1700 модулей F20
  11. F21

  12. Другие изменения API 2.0 • Широкие возможности контроля • Слабая

    связанность компонентов • Мощная система событий • Наследуемые опции • Больше абстракций • Больше правильных интерфейсов F23
  13. Другие изменения API 2.0 • Раздельные проекции – позволяют забыть

    о вариантах реализации меркатора • Универсальные тайлы – позволяют одновременно показывать данные Яндекса и OSM • Встроенный кластеризатор • Именованные контейнеры – балун вне пределов карты • HTTPS • Работа без ключей F25
  14. • Common-js несовместимая • Имела ряд проблем • Сложна в

    поддержке • Без возможности кастомизации Модульная система F29
  15. Синхронность и связанность • Стандартные синхронные интерфейсы – все сущности

    должны существовать единовременно • Мешает слабой связанности на уровне модулей • Усложняет клиент-серверное взаимодействие • Может вызвать «залипоны» F31
  16. Новая система модулей • Common-js/AMD совместимая – переход без изменения

    кода – все плюшки старой версии • Открытая – https://github.com/ymaps/modules/ F32
  17. Асинхронность • Повсеместное использование Promises/A+ – https://github.com/dfilatov/vow • Асинхронные интерфейсы

    – доступа к данным – создания объектов • И немного другой магии F33
  18. Скорость • Тормозит добавление меток? – не добавлять метки –

    не добавлять им DOM события • Тормозят опции? – изменить принцип подписки • Томозит XXX? – иди играть в пин-понг, спроси совета у жены F34
  19. Новые горизонты F35 • Поддержка экранов высокой четкости – HD-тайлы

    – SVG-метки и верстка • Больше кейсов решаются «из коробки» – Адаптивные контролы – Больше полезных build-in функций • Более «user friendly» • Подгрузка функционала по требованию • Еще больше магии
  20. • Нострадамусов мало • Никто не знает ваш продукт лучше

    чем его пользователь • Даже вы • Старайтесь смотреть шире и искать даже под кроватью • Не взрывайте мосты и обходные пути • В любом случае всё придется переделывать Памятка разработчику F38
  21. Интерфейсы — суть API • Должны быть компактны • Унифицированы

    • Самодостаточны • Слабо связаны • Обоснованы • Не должны связывать вам руки F39
  22. Самое главное • Любите свой продукт – Делайте его достойным

    этого • Ненавидьте свой продукт – Критически относитесь ко всему • Используйте свой продукт – Чтобы понимать — «как это» F41