Как стать автором
Обновить

Комментарии 18

*Картинка JPG vs PNG*

Я бы еще добавил, что порог вхождения для AngularJS гораздо выше Knockout, особенно когда нужно реализовать вещи, не описанные в туториалах.
А ваши выводы я поддерживаю, AngularJS — для сложных проектов, Knockout — для относительно простых.
Помимо этого думаю стоит заметить, что экосистема у AngularJS куда более привлекательна (хотя скорость синхронизации изменений в коде и документации оставляет желать лучшего)
Пишу сейчас проект на Angular. До этого с JS фреймворками дела не имел, писал исключительно backend для веба на Ruby(а до этого на PHP). До этого выбирал «на глаз» среди Backbone, Ember, Sails, Knockout: по наличию нормальных манов, видео туториалов и читаемости кода (субъективно, для неподготовленного к JS глазу).

По поводу порога вхождения можно заметить только небольшие проблемы с документацией (даже на английском API reference довольно скудный), благо спасают ответы на похожие вопросы на StackOverflow. А в целом, Angular вполне дружелюбный и удобный в использовании.

P.S. Начал знакомство с Angular с просмотра и конспектирования AngularJS Fundamentals In 60-ish Minutes (http://www.youtube.com/watch?v=i9MHigUZKEM) Видео охватывает основные принципы построения приложения и показывает как использовать тот же two-way binding и прочие полезные вещи.

P.P.S. Также, для ознакомления, можно стянуть скелет для приложения на Angular: github.com/angular/angular-seed
Лучше для ознакомления посмотреть вот этот скелет — github.com/angular-app/angular-app, там гораздо грамотнее и удобнее все сделано. На angular-seed как скелет совершенно не годится — слаборасширяем.
Два момента:

1) Количество задач, решаемых в Angular, сущесвенно больше: он дает вам структуру приложения, компонентизацию, раутинг, сервисы и т.д. Knockout предполагает, что для всего остального вы будете использовать другие инструменты. Например, Sammy JS для раутинга, Breeze JS для синхронизации данных с сервером, и т.д. В целом, выбор того или иного фреймворка — дело опыта и вкусовых предпочтений.

2) Показывать график без кода самого бенчмарка смысла нет. Легким гуглением можно найти ссылки на JSPerf, в которых как и Knockout, так и Angular оказываются быстрее. Все зависит от кода. Например, jsperf.com/angular-vs-knockout-vs-ember/161 Если пощелкать разные версии, то то один, то другой фреймворк оказывается впереди. По всей видимости, проблема не дает покоя фанатам каждого из них. На практике все эти фреймворки близки по скорости, и стоит обращать внимание на производительность в контексте вашей задачи (страница тормозит — открыли профайлер).
Для тестов писался самый простой код. Можете ознакомится с ним по ссылке: www.ex.ua/528626323543
Относительно фанатизма, к сожалению, я не успел записатся ни в один из фан-клубов ;)
Есть один важный момент, databinding в Knockout использует change listeners поэтому необходимо: вызывать обертки типа ko.observable(), ko.computed, создавать custom bindings для нестандарных контролов.
databinding в AngularJS основан на dirty-checking, это позволяет использовать любые объекты в качестве данных и изменять их свойства без необходимости использования сеттеров геттеров.
При близком рассмотрении, Angular и Knockout очень различаются по своей идеологии и предназначению.
Пара замечаний относительно scope в Angular. Первое, утверждение
Внутри каждого модуля создается новый экземпляр $scope, который является наследником $rootScope.
является неверным. Новые экземпляры $scope обычно возникают при использовании директив (в случае если директива запрашивает создание нового scope), либо создаются вручную. Второе, на мой взгляд scope не является моделью данных. Модель данных в Angular — это обычные javascript объекты. Scope же является связующим звеном между ними и html-представлением (View). Наиболее похожее из того что мне встречалось — это ViewModel в .Net WPF.
Есть ещё проект Angular Light, похож на Angular.js с «элементами» Knockout.js.
Я правильно понимаю что он силен более низкоуровневым подходом?
me.popup = $("<div class=\"popup\">{{data}}<br /><a href=\"#\" ng-click=\"close($event)\"> Close me</a></div>");
А без разметки в JS-коде никак нельзя обойтись малой кровью? У меня почему-то пятнистый блевонтон на такой подход.
Если бы речь шла о решении конкретной задачи, а не о примере использования, накиданного на скорую руку, то можно было бы.
Я чаще всего использую нокаут для добавления небольшого функционала в старые jQuery проекты. А новое начинаю на ангуляре писать, чтобы уже по полной его использовать, включая роутинг.
$scope это не модель! В $scope содержатся ссылки на модели данных, поправьте.
Спасибо, исправил.
«сожержит» :-)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории