В нем происходит минимум операций, в отличии от if(object.param). Прежде чем сравнивать производительность, не мешало бы провести оптимизацию проверки if(object.param) и это
if(typeof object.param != 'ненужный тип')
или
if(typeof object.param == 'нужный тип')
так доступнее объяснил?
В этом случае проиcходит целый ряд проверок в зависимости от типа и значения param. Если param = (number)0, (boolean)false, undefined, null, (string)'' — то будет false, в остальных случаях true
Поэтому этот метод медленнее.
Было бы правильнее сравнивать производительность if('param' in object) и if(typeof object.param != 'undefined') или hasOwnProperty
putCardSmart: function (card) {
this.putCard( card,
// Этот метод вызовется только когда карта долетит, но он сохранит контекст.
this.finishSmart.bind(this)
);
},
В каком контексте будет выполнен метод this.finishSmart? :)
Вашу библиотеку нельзя сравнивать с шаблонизаторами, которые призваны отделять логику от представления.
Что касается удобности и переиспользуемости — чем больше библиотека берет на себя, тем меньше гибкости остается. Атрибуты, теги — все это удобнее редактировать как раз в виде хтмл.
Ну и как то много телодвижений вы предлагаете на замену обычному циклу :)
Если использовать селекторы типа '#id .class ' — то в движке Sizzle исходным множеством и так будет document.getElementById и все его чайлды. И если такого элемента нет, то и шерстить в поиске .class не будет :)
При выключенном кеше FF не отправляет заголовок If-Modified-Since в запросе к серверу. Теоретически это можно обыграть и ограничиться одним запросом на проверку, вместо двух.
З.Ы. Кроме того, явно указывая в проверке чего мы хотим, повышает читаемость кода. Ну это уже каждому свое.
obj.param: 1256ms
typeof obj.param == «number»: 1063ms
«test» in obj: 1180ms
Как видите typeof obj.param быстрее obj.param
Однако очевидно, что в разных условиях производительность разная. А значит любые утверждения тут невозможны :)
В этом случае проиcходит целый ряд проверок в зависимости от типа и значения param. Если param = (number)0, (boolean)false, undefined, null, (string)'' — то будет false, в остальных случаях true
Поэтому этот метод медленнее.
Было бы правильнее сравнивать производительность if('param' in object) и if(typeof object.param != 'undefined') или hasOwnProperty
Хотя все зависит от ситуации
function Rabbits() {}
var rabbit = new Rabbits();
console.log( 'toString' in rabbit ) // true
this.putCard( card,
// Этот метод вызовется только когда карта долетит, но он сохранит контекст.
this.finishSmart.bind(this)
);
},
В каком контексте будет выполнен метод this.finishSmart? :)
.bind(this) в данном примере явно лишний.
Что касается удобности и переиспользуемости — чем больше библиотека берет на себя, тем меньше гибкости остается. Атрибуты, теги — все это удобнее редактировать как раз в виде хтмл.
Ну и как то много телодвижений вы предлагаете на замену обычному циклу :)