Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var value = new JW.Property(1000);
var unit = new JW.Property("MW");
var functor = new JW.Functor([ value, unit ], function(value, unit) {
return value + " " + unit;
}, this);
var target = functor.target;я много программирую на строго-типизированных языках программирования <...> Поэтому я большой фанат объектно-ориентированного программированияЧто ж, по-вашему, Haskell не строго типизированный?
Я не программирую на Haskell. К чему вопрос?Не путайте парадигму (ООП) и типизацию, вот к чему.
this.$el.on("dblclick", this.open.bind(this)). Это нельзя назвать ключевой возможностью фреймворка. Я старался не перегружать свой фреймворк сахаром, т.к. это его усложнило бы. И для привязки обработчиков событий к элементам, и для изменения атрибутов, и для всех остальных операций с элементами предлагается использовать jQuery API, получая элементы через getElement или render[ChildId]. Напишите свою утилитарную функцию delegateEvents, если вам нравится объявлять события, как в Backbone — это несложно.delegateEvents — это своего рода сахарлюбое декларативное программирование — это своего рода сахар, за которым стоят простыни императивного кода, который все эти красивые объявления наделяет жизнью. Только вот в 2014 году мне уже лень писать свой сахар, если давно есть готовый — проверенный, покрытый тестами, с продуманным API.
в Backbone при изменении модели весь View перерендерится с нуля
Но в реальности обычно каждый компонент слушает 1-2 события.Да, часто так, но TodoMVC — это вырожденный случай, это демо.
вы пойдете в обход фреймворка. Это называется костылями.не согласен. Благодаря OOP-подходу в Backbone можно многое переопределить, это очень удобно и документация поощряет это делать.
В документации четко написано, что когда модель выбрасывает событие change, представление перерендерится.А в следующем параграфе написано, что Backbone — это попытка понять, сколько сущностей минимально необходимо, чтобы строить современные приложения. И нигде не запрещено добавлять сущности, если надо.
добавления 500 записей в TodoMVC...
jWidget — 9974 миллисекунд...

function testSpeed(eventType) {
var time = new Date().getTime();
var i = 0;
function tick() {
var el = document.getElementById("new-todo");
el.value = "a";
var e = document.createEvent("Event");
e.initEvent(eventType, true, true);
e.keyCode = 13;
el.dispatchEvent(e);
if (++i < 500) {
setTimeout(tick);
} else {
console.log((new Date().getTime() - time) + " milliseconds");
}
}
tick();
}
testSpeed("keypress");

Решения basis.js, jQuery, al-fast-list и оба JS нельзя ставить в один ряд с Angular, Knockout, atom и jWidget, поскольку там идут прямые манипуляции с DOM, что противоречит архитектуре MV*.
Методы fill, update и clear должны работать только с моделью.
Расскажите, где вы увидили прямые манипуляции с DOM в решение basis.js?
Модель не является обязательной сущностью. Эту задачу успешно может выполнять и контролер, и представление.
В любом случае «пузкомерка» не для того, чтобы разделить решения на категории и не было особых ограничений. Есть конкретная задача, нужно ее решить.
Конечному пользователю все равно на чем написано приложение и какие патерны используются, для него важно «работает» и «не тормозит».
У меня к тому, что обведено рамкой, претензий нет.
Объявляем basis.ui.Node и в методах fill, update, clear напрямую вызываем его методы setChildNodes, childNodes.forEach, updateBind, clear, которые выполняют DOM-манипуляции. Это точно представление, а не модель.
Насколько мне известно, MV* архитектура предполагает, что вы меняете только модель, а представление само при этом понимает, когда и что нужно перерендерить.
Если бы решения Angular, Knockout и jWidget тоже работали напрямую с представлением, то, естественно, они работали бы гораздо быстрее.
Я профилировал решение jWidget и обнаружил, что 50% времени съедают накладные расходы на работу с событиями модели.
А еще ему важно, чтобы приложение было легко расширяемым и код был понятным. Именно для этого придумали паттерн MVC. Если везде работать напрямую с DOM, то вообще никакие фреймворки не нужны, но код быстро станет слишком запутанным.
2. Скорость работы скрипта превыше всего.
…
4. Фреймворк работает на базе jQuery.
Но получается слишком много кода и далеко не js-way.
Если цель добиться высокой производительности, нужно забыть про jQuery, селекторы, html и render.
jWidget — объектно-ориентированный JavaScript MV* framework