2016-09-01 3 views
0

Я заметил, что могу использовать a && b(); в качестве сокращенного обозначения для if(a) {b()} или if(a) b();. Обычный случай MOST для этой нерешительности - для объектов, имеющих 4-5 элементов.Javascript Performance: `if (a in b) {b [a]()}` vs `a в b && b [a]();` против перемещения объекта

Вопрос: есть ли выигрыш в производительности при использовании сокращения по сравнению с итерацией if(){} или обычным обходом объекта for (var i in b) { b[i]() }?

Как было предложено: код

var b = { x: 20, y: 30 }, // sample object 
    fn = function(v){ return v+5; }, // sample function 
    endValue = 0; // some lol 

// go through all elements via if 
if ('x' in b) { endValue += fn(b['x']); } 
if ('y' in b) { endValue += fn(b['y']); } 

//go through all elements via shorthand 
('x' in b) && (endValue += fn(b['x'])); 
('y' in b) && (endValue += fn(b['y'])); 

//go through all elements via object traversing 
for (var i in b) { 
    endValue += fn(b[i]); 
} 

Я бы предположить, может быть очень и очень незначительные различия в производительности, нужно использовать вышеупомянутый метод стенографии, чтобы иметь очень специфический порядок элементов объекта в вычислении endValue.

+3

Почему бы вам не попробовать себя и не увидеть? –

+0

Что это связано с итерацией/перечислением? – Bergi

+0

Я делал все тесты с условными обозначениями и обход объектов, я еще не пробовал стенографию, в настоящее время работаю над этим, я хочу знать, стоит ли это усилий, это много кода для чтения. – thednp

ответ

2

Есть ли выигрыш в производительности при использовании сокращенного обозначения по сравнению с if(){}?

№ С любым достойным компилятором они выполняют абсолютно то же самое. Однако вы должны использовать инструкции if для удобства чтения и краткости.

Есть ли выигрыш в производительности для использования итерации if() {} против обычного перемещения объекта for (var i in b) { b[i]() }?

Это невозможно сравнить, поскольку они делают принципиально разные вещи, и если предположить, что они имеют одинаковый результат, производительность сильно зависит от фактических объектов, которые вы передаете, и их свойств. Используйте тот, чье поведение вам нужно.

+0

Просто FYI: Я закончил тестирование, и кажется, что перемещение объекта происходит быстрее, чем два других, несмотря ни на что. Возможно, снижение производительности на 10-15%. – thednp

0

компилятор закрытия google широко использует сокращенные коды, а из контрольных показателей незначительные выгоды от производительности. https://closure-compiler.appspot.com/home

Смежные вопросы