вторник, 3 апреля 2012 г.

Переход на Knockout. Первые впечатления

Недавно наткнулся на уже устоявшийся в кругах js-разработчиков проект knockoutjs. После беглого взгляда на документацию был невероятно воодушевлен его возможностями автоматизации и упрощением обработки представления. Если работая с Javascript вам всегда хотелось переместить часть логики на сторону HTML, то вам однозначно необходимо попробовать этот фреймворк.

Работая по шаблону проектирования MVC я постоянно чувствовал его неприспособленность к клиентской части разработки. Приходилось постоянно держать в конфигурационных переменных ссылки на HTML объекты, причем даже если приложить максимум правил стандартизации имен, то все равно буквально через один полностью написанный модуль начинаешь сбиваться. К тому же, работая с несколькими пространствами имен (и при этом не имея должного автодополнения), получаем полную путаницу.

MVVM

Knockout основан на немного другом подходе и это не может не радовать. Шаблон носит неблагозвучное название Model-View-ViewModel и позволяет наиболее плотно связать объект и его представление в HTML.

Эксперимент

Переписав пару основных модулей нашей панели администратора были сделаны следующий выводы:
  • Время выполнения одинакового функционала в браузере увеличилось с 5-8 мс до 16-20 мс.
  • Количество строк уменьшилось с 280 до 160.
  • Сложность кода уменьшилась в разы.
  • Следующий модуль был написан в разы быстрее, чем без использования Knockout.

Выводы

Если в проекте задействован только один Javascript разработчик, то можно смело рекомендовать использование этого фреймворка. Все выигранное время можно будет потратить на улучшение юзабилити сайта, создании дополнительной анимации и прочих приятных вещей на которые раньше времени абсолютно не хватало.

Если над проектом трудится команда, то с одной стороны мы получим стандартизированный подход, а с другой - увеличенную ресурсоемкость приложения.

Опыт, который был получен в следствии использования данной библиотеки бесценен, даже при дальнейшем отказе от ее использования.