LINUX.ORG.RU

История изменений

Исправление special-k, (текущая версия) :

с другой стороны, зачем ползать по полу если можно лазать по канату

Ах, если бы так. Если поразмышлять (а мне внезапно предоставилась возможность), то все не так уж радужно.

Самое тупое: время выполнения. Опять же, элементарный бенч на выборку

select by id
jquery  7ms
js      0ms

select by class
jquery 98ms
js     2ms

select by tag
jquery 114ms
js     1ms
Код бенча + я дбавил ~80 элементов на страницу.
var t, times = 1000

console.log('select by id')

console.log('jquery')
t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  $('#a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('js')
var t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  document.getElementById('a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('select by class')

console.log('jquery')
t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  $('.a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('js')
var t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  document.getElementsByClassName('a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('select by tag')

console.log('jquery')
t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  $('a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('js')
var t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  document.getElementsByTagName('a')
}
console.log( (new Date).getTime() - t + 'ms' )

C одной стороны 1000 итераций вроде много, с другой, не так уж. Главное - разница цифр. Время маленькой выборки будет в ~10..20 раз дольше (зависит от типа запроса, из-за регулярных выражений обработке входных данных), а для выборки большого количества объектов, время будет тем больше, чем больше величина выборки (тут уже генерация объектов jquery).

Скорость может и приемлема для _небольших приложений_, но я не вижу профита..

становится негласным стандартом, не даром в новом апи жквери стерты границы между биндингом и делегированием

То что для биндингов и делегирования используется один метод, вовсе не означает, что границы стерты.. это просто определяется через параметры метода, и снова через регулярные выражения, которые в jquery срабатывают на каждый чих. Вот это Как ныне принято писать на js? (комментарий) будет работать быстро, хотя и не уверен, что быстрее, чем событие прерывающее дальнейшее всплытие, но то, что делает jquery - работает медленно, и отмечались тормоза связанные с делегированием (т.е. слишком медленно).

используя свой бойлерплейт я пишу и отлаживаю все в хроме и с 99% вероятностью все заработает в остальных местах

js основных браузеров достаточно схож (уже) и так.

Посмотри на бенчи еще раз, очевидно, что jquery замедляет работу веб-приложений в десятки, а то и в сотни раз (это плохо). Помнож это на тормоза от jade (кстати может подкинешь шаблончик для бенчей), я думаю они ~ 2..5 раз медленнее обычной домогенерации. И получаем, что такая методика работы (текстовый шаблон + jquery) замедляет веб-приложение в 100..1000 раз (это тоже плохо). Да, они в основном работают «фастэнаф», но это ограничивает их сложность (т.е. уже не сделаешь гуглмапс).

Далее код, я так и не понял, куда ты складываешь навешивание биндингов и методы обновления фрагмента? Т.е. нет ситуации, как с ORM в руби, когда объект содержит все методы для работы с собой. Нет и самого понятия дом-объект. Кстати да, сейчас понял, что я перенимаю именно эту модель, только у меня бд - это дом-дерево..

И в заключении.. jade это хорошо, но дсл на чистом js, или coffee - лучше, т.к. ближе к программистам и быстрее.

пс, а верстальщики чтоли у тебя работают прямо на jade?

Исходная версия special-k, :

с другой стороны, зачем ползать по полу если можно лазать по канату

Ах, если бы так. Если поразмышлять (а мне внезапно предоставилась возможность), то все не так уж радужно.

Самое тупое: время выполнения. Опять же, элементарный бенч на выборку

select by id
jquery  7ms
js      0ms

select by class
jquery 98ms
js     2ms

select by tag
jquery 114ms
js     1ms
Код бенча + я дбавил ~80 элементов на страницу.
var t, times = 1000

console.log('select by id')

console.log('jquery')
t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  $('#a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('js')
var t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  document.getElementById('a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('select by class')

console.log('jquery')
t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  $('.a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('js')
var t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  document.getElementsByClassName('a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('select by tag')

console.log('jquery')
t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  $('a')
}
console.log( (new Date).getTime() - t + 'ms' )

console.log('js')
var t = (new Date).getTime()
for( var i=0; i<times; i++ ){
  document.getElementsByTagName('a')
}
console.log( (new Date).getTime() - t + 'ms' )

C одной стороны 1000 итераций вроде много, с другой, не так уж. Главное - разница цифр. Время маленькой выборки будет в ~10..20 раз дольше (зависит от типа запроса, из-за регулярных выражений обработке входных данных), а для выборки большого количества объектов, время будет тем больше, чем больше величина выборки (тут уже генерация объектов jquery).

Скорость может и приемлема для _небольших приложений_, но я не вижу профита..

становится негласным стандартом, не даром в новом апи жквери стерты границы между биндингом и делегированием

То что для биндингов и делегирования используется один метод, вовсе не означает, что границы стерты.. это просто определяется через параметры метода, и снова через регулярные выражения, которые в jquery срабатывают на каждый чих. Вот это Как ныне принято писать на js? (комментарий) будет работать быстро, хотя и не уверен, что быстрее, чем событие прерывающее дальнейшее всплытие, но то, что делает jquery - работает медленно, и отмечались тормоза связанные с делегированием (т.е. слишком медленно).

используя свой бойлерплейт я пишу и отлаживаю все в хроме и с 99% вероятностью все заработает в остальных местах

js основных браузеров достаточно схож (уже) и так.

Посмотри на бенчи еще раз, очевидно, что jquery замедляет работу веб-приложений в десятки, а то и в сотни раз (это плохо). Помнож это на тормоза от jade (кстати может подкинешь шаблончик для бенчей), я думаю они ~ 2..5 раз медленнее обычной домогенерации. И получаем, что такая методика работы (текстовый шаблон + jquery) замедляет веб-приложение в 100..1000 раз (это тоже плохо). Да, они в основном работают «фастэнаф», но это ограничивает их сложность (т.е. уже не сделаешь гуглмапс).

Далее код, я так и не понял, куда ты складываешь навешивание биндингов и методы обновления фрагмента? Т.е. нет ситуации, как с ORM в руби, когда объект содержит все методы для работы с собой. Нет и самого понятия дом-объект. Кстати да, сейчас понял, что я перенимаю именно эту модель, только у меня бд - это дом-дерево..

И в заключении.. jade это хорошо, но дсл на чистом js, или coffee - лучше, т.к. ближе к программистам и быстрее.