版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】如何提高web前端的性能優(yōu)化
function
getCategory(age)
{
var
category
=
"";
switch
(true)
{
case
isNaN(age):
category
=
"not
an
age";
break;
case
(age
>=
50):
category
=
"Old";
break;
case
(age
<=
20):
category
=
"Baby";
break;
default:
category
=
"Young";
break;
};
return
category;
}
getCategory(5);
//Babyvar
str
=
"<div>這是一個測試字符串</div>";
/**效率低**/
var
obj
=
document.getElementsByTagName("body");
for(var
i
=
0;
i
<
100;
i++){
obj.innerHTML
+=
str
+
i;
}
/**效率高**/
var
obj
=
document.getElementsByTagName("body");
var
arr
=
[];
for(var
i
=
0;
i
<
100;
i++){
arr[i]
=
str
+
i;
}
obj.innerHTML
=
arr.join("");/**不提倡**/
var
i
=
1;
var
j
=
"hello";
var
arr
=
[1,2,3];
var
now
=
new
Date();
/**提倡**/
var
i
=
1,
j
=
"hello",
arr
=
[1,2,3],
now
=
new
Date();/**不提倡**/
var
name
=
values[i];
i++;
/**提倡**/
var
name
=
values[i++];/**不提倡**/
var
a
=
new
Array();
a[0]
=
1;
a[1]
=
"hello";
a[2]
=
45;
var
o
=
new
Obejct();
=
"bill";
o.age
=
13;
/**提倡**/
var
a
=
[1,
"hello",
45];
var
o
=
{
name
:
"bill",
age
:
13
};String()屬于內(nèi)部函數(shù),所以速度很快。
.toString()要查詢原型中的函數(shù),所以速度略慢。
new
String()最慢。/**效率低**/
var
divs
=
document.getElementsByTagName("div");
for(var
i
=
0;
i
<
divs.length;
i++){
...
}
/**效率高,適用于獲取DOM集合,如果純數(shù)組則兩種情況區(qū)別不大**/
var
divs
=
document.getElementsByTagName("div");
for(var
i
=
0,
len
=
divs.length;
i
<
len;
i++){
...
}try
{
for
(
var
i
=
0;
i
<
200;
i++)
{}
}
catch
(e){}函數(shù)的調(diào)用
with語句
with會創(chuàng)建自已的作用域,因此會增加其中執(zhí)行代碼的作用域的長度。
全局作用域。var
foo
=
function()
{
var
local
=
{};
};
foo();
console.log(local);
//=>
undefined
var
bar
=
function()
{
local
=
{};
};
bar();
console.log(local);
//=>
{}
/**這里我們定義了foo()函數(shù)和bar()函數(shù),他們的意圖都是為了定義一個名為local的變量。在foo()函數(shù)中,我們使用var語句來聲明定義了一個local變量,而因?yàn)楹瘮?shù)體內(nèi)部會形成一個作用域,所以這個變量便被定義到該作用域中。而且foo()函數(shù)體內(nèi)并沒有做任何作用域延伸的處理,所以在該函數(shù)執(zhí)行完畢后,這個local變量也隨之被銷毀。而在外層作用域中則無法訪問到該變量。而在bar()函數(shù)內(nèi),local變量并沒有使用var語句進(jìn)行聲明,取而代之的是直接把local作為全局變量來定義。故外層作用域可以訪問到這個變量。**/
local
=
{};
//
這里的定義等效于
global.local
=
{};function
foo()
{
var
val
=
'hello';
function
bar()
{
function
baz()
{
global.val
=
'world;'
};
baz();
console.log(val);
//=>
hello
};
bar();
};
foo();
/**在`JAVASCRIPT`中,變量標(biāo)識符的查找是從當(dāng)前作用域開始向外查找,直到全局作用域?yàn)橹?。所以`JAVASCRIPT`代碼中對變量的訪問只能向外進(jìn)行,而不能逆而行之。baz()函數(shù)的執(zhí)行在全局作用域中定義了一個全局變量val。而在bar()函數(shù)中,對val這一標(biāo)識符進(jìn)行訪問時,按照從內(nèi)到外的查找原則:在bar函數(shù)的作用域中沒有找到,便到上一層,即foo()函數(shù)的作用域中查找。然而,使大家產(chǎn)生疑惑的關(guān)鍵就在這里:本次標(biāo)識符訪問在foo()函數(shù)的作用域中找到了符合的變量,便不會繼續(xù)向外查找,故在baz()函數(shù)中定義的全局變量val并沒有在本次變量訪問中產(chǎn)生影響。**/3、減少作用域鏈上的查找次數(shù)/**效率低**/
for(var
i
=
0;
i
<
10000;
i++){
var
but1
=
document.getElementById("but1");
}
/**效率高**/
/**避免全局查找**/
var
doc
=
document;
for(var
i
=
0;
i
<
10000;
i++){
var
but1
=
doc.getElementById("but1");
}
/**上面代碼中,第二種情況是先把全局對象的變量放到函數(shù)里面先保存下來,然后直接訪問這個變量,而第一種情況是每次都遍歷作用域鏈,直到全局環(huán)境,我們看到第二種情況實(shí)際上只遍歷了一次,而第一種情況卻是每次都遍歷了,而且這種差別在多級作用域鏈和多個全局變量的情況下還會表現(xiàn)的非常明顯。在作用域鏈查找的次數(shù)是`O(n)`。通過創(chuàng)建一個指向`document`的局部變量,就可以通過限制一次全局查找來改進(jìn)這個函數(shù)的性能。**/function
foo()
{
var
local
=
'Hello';
return
function()
{
return
local;
};
}
var
bar
=
foo();
console.log(bar());
//=>
Hello
/**這里所展示的讓外層作用域訪問內(nèi)層作用域的技術(shù)便是閉包(Closure)。得益于高階函數(shù)的應(yīng)用,使foo()函數(shù)的作用域得到`延伸`。foo()函數(shù)返回了一個匿名函數(shù),該函數(shù)存在于foo()函數(shù)的作用域內(nèi),所以可以訪問到foo()函數(shù)作用域內(nèi)的local變量,并保存其引用。而因這個函數(shù)直接返回了local變量,所以在外層作用域中便可直接執(zhí)行bar()函數(shù)以獲得local變量。**/循環(huán)綁定事件,我們假設(shè)一個場景:有六個按鈕,分別對應(yīng)六種事件,當(dāng)用戶點(diǎn)擊按鈕時,在指定的地方輸出相應(yīng)的事件。
var
btns
=
document.querySelectorAll('.btn');
//
6
elements
var
output
=
document.querySelector('#output');
var
events
=
[1,
2,
3,
4,
5,
6];
//
Case
1
for
(var
i
=
0;
i
<
btns.length;
i++)
{
btns[i].onclick
=
function(evt)
{
output.innerText
+=
'Clicked
'
+
events[i];
};
}
/**這里第一個解決方案顯然是典型的循環(huán)綁定事件錯誤,這里不細(xì)說,詳細(xì)可以參照我給一個網(wǎng)友的回答;而第二和第三個方案的區(qū)別就在于閉包傳入的參數(shù)。**/
//
Case
2
for
(var
i
=
0;
i
<
btns.length;
i++)
{
btns[i].onclick
=
(function(index)
{
return
function(evt)
{
output.innerText
+=
'Clicked
'
+
events[index];
};
})(i);
}
/**第二個方案傳入的參數(shù)是當(dāng)前循環(huán)下標(biāo),而后者是直接傳入相應(yīng)的事件對象。事實(shí)上,后者更適合在大量數(shù)據(jù)應(yīng)用的時候,因?yàn)樵贘avaScript的函數(shù)式編程中,函數(shù)調(diào)用時傳入的參數(shù)是基本類型對象,那么在函數(shù)體內(nèi)得到的形參會是一個復(fù)制值,這樣這個值就被當(dāng)作一個局部變量定義在函數(shù)體的作用域內(nèi),在完成事件綁定之后就可以對events變量進(jìn)行手工解除引用,以減輕外層作用域中的內(nèi)存占用了。而且當(dāng)某個元素被刪除時,相應(yīng)的事件監(jiān)聽函數(shù)、事件對象、閉包函數(shù)也隨之被銷毀回收。**/
//
Case
3
for
(var
i
=
0;
i
<
btns.length;
i++)
{
btns[i].onclick
=
(function(event)
{
return
function(evt)
{
output.innerText
+=
'Clicked
'
+
event;
};
})(events[i]);
};(function()
{
//
主業(yè)務(wù)代碼
})();;(function(win,
doc,
$,
undefined)
{
//
主業(yè)務(wù)代碼
})(window,
document,
jQuery);/**RequireJS**/
define(['jquery'],
function($)
{
//
主業(yè)務(wù)代碼
});
/**SeaJS**/
define('module',
['dep',
'underscore'],
function($,
_)
{
//
主業(yè)務(wù)代碼
});function
getData(callBack){
$.ajax({
url:"",
data:{},
dataType:"json",
type:"get",
success:function(data){
callBack(null,data)
}
})
}getData(function(error,data){
console.log(data)
})var
arr
=
[1,2,3,4,5];
var
arr2
=
[];
arr[arr.length]
=
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海藻膠提取工安全綜合強(qiáng)化考核試卷含答案
- 會議接待服務(wù)師安全培訓(xùn)競賽考核試卷含答案
- 白酒貯酒工操作技能能力考核試卷含答案
- 玻璃制品裝飾工崗前工作技能考核試卷含答案
- 2024年湖南吉利汽車職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試題附答案
- 2025年事業(yè)單位招聘考試《《行測》》真題庫1套
- 2024年溫州市工人業(yè)余大學(xué)輔導(dǎo)員考試筆試真題匯編附答案
- 2024年紹興理工學(xué)院輔導(dǎo)員招聘備考題庫附答案
- 2024年燕京理工學(xué)院輔導(dǎo)員招聘考試真題匯編附答案
- 2024年運(yùn)城市遴選公務(wù)員考試真題匯編附答案
- 老人臨終前的正確護(hù)理
- 防性侵家長會課件教學(xué)
- AI在知識問答中的應(yīng)用
- 智慧檢驗(yàn)與大數(shù)據(jù)分析知到課后答案智慧樹章節(jié)測試答案2025年春溫州醫(yī)科大學(xué)
- 課題二教書育人課件
- 高貝利特低熱硅酸鹽水泥熟料煅燒及技術(shù)探討
- GB/T 44312-2024巡檢機(jī)器人集中監(jiān)控系統(tǒng)技術(shù)要求
- 美術(shù)教師季度考核總結(jié)
- GB/T 4074.2-2024繞組線試驗(yàn)方法第2部分:尺寸測量
- 液氨儲罐區(qū)安全評價
- 生物必修一-高中生物課件
評論
0/150
提交評論