Быстрая и безболезненная
разработка клиентской части
     веб-приложений




        Ткаченко Ярослав, 10sheet.com
                            @sap1ens
Хорошее и современное решение

   jQuery        jQuery plugins            Backbone.js

                                        socket.io
jQuery plugins
                        App             QUnit
    jQuery plugins
                                  template engine
                     Modernizr
  Underscore.js                              jQueryUI
Плохое или старое решение

     jQuery / Prototype.js / MooTools

     …                                  ?

                App                …

?
Симптомы?
Симптомы


1. Нет фреймворка/библиотеки Application уровня
   или ее аналога
2. Нет работы с URL
3. Обработчики onclick прямо в HTML
4. Излишняя привязка к DOM, вместо работы с
   данными
5. Нет иерархии компонентов
6. Сильная связность компонентов
Решение?


                 App


App
Решение?

      Время

Деньги                App
                ?

App                  Люди
Решение!

Грубый рефакторинг:

1. Разбиваем код на модули
2. Организуем связь между модулями
Код по возможности не переписывать
RequireJS


1. Загрузчик модулей
2. Поддерживает все современные браузеры
3. Имеет кучу плагинов
4. Модули в нотации AMD
5. Совместим с jQuery, node.js, Dojo
6. Есть оптимизатор кода
AMD
Asynchronous Module Definition API
Типовой модуль
Пример подключения RequireJS
HTML5 History API        Динамические URL



     https://twitter.com/#!/following



      https://twitter.com/following
HTML5 History API
Manager
Manager
One page application


1. Физически - одна страница, подключающая все
   стили и скрипты
2. Запускает загрузку приложения через RequireJS
3. Все шаблоны хранятся на клиенте
4. Обмен данными – AJAX (JSON) / Websocket
Иерархия модулей

Component
                                  Component
               Component
                                           Component



            Widget       Widget         Widget



      Top level module            Top level module
Иерархия модулей


Date interval          Report




   Search             Pagination
Иерархия модулей
Less
Less
Less
CSS Sprites?
Sprites? Fonts!
   Pictos.cc
Спасибо!

http://github.com/balupton/history.js

http://requirejs.org/

http://lesscss.org/

Быстрая и безболезненная разработка клиентской части веб-приложений