Подтвердить что ты не робот

Почему у knockout.js есть репутация лучше для небольших проектов, backbone.js для больших?

Я использую knockout.js в течение нескольких месяцев и считаю его повседневной радостью использовать. Прибыль от отсутствия управления состоянием на dom или применения собственных пользовательских привязок невероятна, и я не возражаю против того, чтобы не иметь функций модели. Но каждый раз, когда я читаю чрезмерный взгляд на knockout.js и другие рамки, консенсус, кажется, таков, что это здорово, это приводит к меньшему количеству кода и сложности в целом, но лучше подходит для небольших проектов. Это утверждение всегда дается по сути, без особого объяснения, поэтому я смущен тем, что, по-видимому, является консенсусом. (Справедливости ради, я еще не использовал Backbone, и поэтому не знаю, как они сравниваются)

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

4b9b3361

Ответ 1

Из моего (короткого) сравнения Knockout и Backbone:

Нокаут нацелен на создание гладких, простых в использовании привязок к модели между HTML и Model. Его очень XAML/Silverlight/WPF, как и в его реализациях и моделях использования (это имеет смысл, учитывая, откуда оно взялось). Однако нокаут не дает рекомендаций или конструкций за пределами модели. Его разработчики могут создавать хорошо структурированные приложения JavaScript за пределами моделей и привязок к модели. Это часто приводит к тому, что разработчики без хорошего использования JavaScript плохо работают, потому что они не понимают, что им нужно учитывать хорошую структуру приложения при использовании Knockout. Конечно, эта проблема не является ошибкой Knockout любыми средствами. Его просто отсутствие понимания того, что предоставляет инструмент, или как структурировать большие приложения для JavaScript во многих случаях.

Лично мне не нравится нокаут. Я не поклонник шаблона MVVM. Я предпочитаю подход Backbone, и большую часть своего времени я провожу с ним. Тем не менее, я думаю, что "существенные" мнения о Knockout не подходят для крупных приложений, являются неправильными. Вы можете создавать очень большие, сложные и хорошо структурированные приложения с помощью Knockout. Но вы должны предоставить всю структуру за пределы привязки данных и моделей.

Ответ 2

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

Лично мне нравятся как нокауты, так и магия и были рады узнать, что на самом деле вам не нужно выбирать между ними; вы можете использовать плагин под названием "Knockback", который прекрасно соединяет их.

Мне нравится структура MVP Backbone с декларативными привязками к нокауту. Я написал запись в блоге об этом, с некоторыми примерами, если вы хотите узнать больше.

Что касается производительности Knockout на больших комплексных DOM, вы можете обойти это, ограничив привязки к конкретным элементам DOM, а не применяя глобально:

ko.applyBindings(myViewModel, $('#myElement')[0]);

[0] в конце необходимо, потому что Knockout ожидает элемент DOM, а не объект jQuery в качестве второго параметра.

Ответ 3

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

Учитывая, что ни Backbone.js, ни Knockout.js не рекомендовали структуру каталогов, или рекомендуемую методологию управления жизненным циклом, а также любые недостающие функциональные возможности в одном по отношению к другому могут быть заполнены поддерживаемыми сообществом плагинами или отдельными микрокартами, существует серьезно не стоит рассматривать один как превосходящий другого в контексте размера/сложности приложения.

В боковом примечании, если в настоящее время начать с приложения с большим масштабом javascript, использование Angular.js может быть более подходящим, чем Knockout.js, если вы предпочитаете декларативный подход, привязку данных на основе DOM и шаблон MVVM, и Ember.js может быть более подходящим, чем Backbone.js, если вы предпочитаете шаблоны MVC и строки (Handlebars). Оба они активно развиваются и сравниваются друг с другом в отношении особенностей, и были специально разработаны для облегчения проблем, с которыми сталкиваются люди, работая с большими приложениями с меньшими фреймами, такими как Backbone и Knockout, которые раньше были.