Каковы накладные расходы огромных функций? - PullRequest
0 голосов
/ 21 апреля 2011

Сколько накладных расходов при использовании функций с огромным телом?

Например, рассмотрим следующий фрагмент кода:

(function() {
    // 25k lines
})();

Как это можновлияет на скорость загрузки / потребление памяти?

Ответы [ 5 ]

3 голосов
/ 21 апреля 2011

Накладные расходы незначительны при объявлении статической функции независимо от размера. Единственная потеря производительности связана с тем, что определено внутри функции.

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

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

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

3 голосов
/ 21 апреля 2011

Если честно, я не уверен, что хороший способ помочь ответить на ваш вопрос - это измерить.

Вы можете использовать профилировщик javascript, такой как встроенный в Google Chrome, здесь есть мини-введение в Google Chrome Profiler

3 голосов
/ 21 апреля 2011

Вы также можете использовать Firebug profiler() и time(): http://www.stoimen.com/blog/2010/02/02/profiling-javascript-with-firebug-console-profile-console-time/

2 голосов
/ 21 апреля 2011

Во-первых, такие продукты, как JQuery, основаны на использовании очень больших замыканий. JQuery считается очень высокопроизводительным фрагментом кода Javascript. Это должно многое рассказать вам о методах кодирования, которые он использует.

Точная производительность любой конкретной функции будет варьироваться в зависимости от разных браузеров, так как все они имеют свои собственные скриптовые движки, которые написаны независимо и имеют разные оптимизации. Но одна вещь, которую они все сделали, - это попытаться дать наилучшую оптимизацию наиболее часто используемым функциям Javascript. Учитывая преимущество JQuery и тому подобное, вы можете поспорить, что замыкания очень сильно оптимизированы.

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

2 голосов
/ 21 апреля 2011

Ну, это почти невозможно ответить.Если вы действительно хотите понять об использовании памяти, автоматическом сборе мусора и других мелочах закрытия, начните здесь: http://jibbering.com/faq/notes/closures/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...