2012-04-16 2 views
5

Я работаю над веб-проектом за последние 4 месяца. Чтобы оптимизировать производительность кода, мы использовали шаблон. Я сомневаюсь, действительно ли это повышает производительность или нет?javascript этот объект

Когда когда-либо мы должны использовать объект this, мы назначаем его локальной переменной и используем это.

function someFunction() 
{ 
    var thisObject = this; 
    //use thisObject in all following the code. 
} 

предположение в том, что, назначая this объект локальной переменной стека повысит производительность.

Я не видел этот тип кодирования нигде, поэтому сомневаюсь, что это бесполезно.

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

+1

Это чрезвычайно распространено в материалах Node.js. Но это больше для хранения ссылки в обратных вызовах, в отличие от повышения производительности, я считаю. – Chad

+1

Я собираюсь угадать, что это на самом деле * хуже * для производительности. Компилятор Google Closure (с расширенными оптимизациями) удалит декларацию var и заменит экземпляры 'thisObject' на' this', хотя использование переменной часто приводит к меньшему уменьшенному размеру. Компилятор Closure оптимизирует скорость и размер, но, по-видимому, предпочитает скорость по размеру, когда у него есть выбор. –

ответ

7

Хотя это обычная практика в Javascript, это не сделано по соображениям службы. Сохранение объекта this в другом именованном локальном файле обычно выполняется для сохранения значения this через обратные вызовы, которые определены внутри функции.

function someFunction() { 
    var thisObject = this; 
    var someCallback = function() { 
    console.log(thisObject === this); // Could print true or false 
    }; 
    return someCallback; 
} 

ли не thisObject === this оценивается как истина, будет зависеть от того, как это называется

var o = {} 
o.someFunction = someFunction(); 
var callback = o.someFunction(); 
callback();  // prints false 
callback.call(o); // prints true 
+0

мы использовали этот шаблон в простых функциях, которые не имеют обратных вызовов или около того. что я хочу знать, есть ли у него повышение производительности? –

+0

@TejeshAlimilli очень маловероятно, что это имеет заметную разницу в производительности. – JaredPar

+0

Спасибо. вот что я хотел знать. –

0

Даже когда этот вид оптимизации имеет (положительный) эффект, то весьма вероятно, зависит от переводчика.

Другая версия может вернуть результаты.

Однако в конце вы должны измерить, а не догадываться.

2

Как и во всех вопросах производительности, их следует исследовать, фактически измеряя производительность. В rather simple test case (ваш реальный код может отличаться немного), я считаю, смешанные результаты по браузерам:

enter image description here

Chrome и Firefox не очень сильно отличаются между двумя тестами, но небольшая разница в противоположном направления между ними. IE9 показывает тест, используя сохраненную копию this, которую я назвал self значительно медленнее.

Без существенной и последовательной разницы в производительности в Chrome и Firefox и IE9, где тестовый пример this будет значительно быстрее, я думаю, вы можете заключить, что шаблон дизайна, о котором вы просили, не обеспечивает стабильного повышения производительности в браузерах.

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

В previous discussion of this design pattern here on SO, был сделан вывод о том, что некоторые библиотеки используют этот шаблон проектирования для того, чтобы обеспечить дополнительную минимизацию, поскольку this не может быть минимизирован ниже четырех символов, которые он принимает, но назначение его локально переменной может быть минимизирован к одно символьное имя переменной.

+0

Opera, похоже, микро-оптимизирует тестовый пример, они работают ровно в равное время :-) – Bergi

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