2010-07-05 2 views
0

Я пишу много букмарклеты и я положил их в мета-букмарклет (> 20kb до сих пор), таким образом:Проблемы с длительным сценарием?

var uGlY_vArIaBlE=(function(){ 
    var d=document; 
    var f1=function(){}; 
    var f2=function(){}; 
    … 
    … /* lot of code here */ 
    … 
    var f50=function(){}; 
}); 
uGlY_vArIaBlE(); 

Это хорошо для меня, чтобы предположить, что f50 будет «знать», что d=document так быстро, как f1 будет? Также как браузер действительно читает/интерпретирует сценарий (вводится или загружается из кеша)? Кажется, у меня нет существенных задержек. Любые советы, которые вы могли бы поделиться, пожалуйста.

+0

Пожалуйста, не добавляйте столько белого пространства, которое вы сделали. –

+0

спасибо 2 кто отформатировал его. Мой браузер * телефона не работает 2 или я просто толстый. – Iamthealphaandtheamigo

+0

Все ответы в порядке. Я буду отмечать первый, так как это было. Спасибо вам всем. – Iamthealphaandtheamigo

ответ

0

Единственная задержка, вызванная длительным сценарием, заключается в загрузке и анализе. Загрузка сценария с диска займет больше времени (потому что размер файла больше), и потребуется больше времени для синтаксического анализа скрипта, чтобы его можно было выполнить (потому что для анализа требуется больше кода).

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

2

Ваша переменная будет одинаково быстро во всех функциях одного и того же уровня. Только внутренние функции теряют некоторую скорость, например:

function f32(){ 
    function f33(){ 
    // to get d, we have to walk up 2 levels 
    // so it is a bit slower to get it then 
    // it is for f32 
    }; 
}; 

Немного лучше концепция будет:

(function(window, undefined){ // <- no need to name it (can be anonymus) 

var d = window.document; 

function f1(){}; 
function f2(){}; 

// ............. 

function f50(){}; 

})(window); // <- it will be executed immediately 

и оба документа и окно будет быстрее, так как они являются локальными переменными.

+0

galambalazs Почему параметр 'undefined'? – Iamthealphaandtheamigo

+0

, потому что minifiers смогут сжать его, и определение вашего собственного undef предотвращает нарушение вашего стороннего кода. – galambalazs

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