一、垃圾回收
垃圾回收是從java借鑒過(guò)來(lái)的齿椅,有人也會(huì)說(shuō):GC琉挖。能提高性能。
我們以常用的變量聲明來(lái)說(shuō)var a=12;
來(lái)在內(nèi)存中找個(gè)地址存起來(lái)涣脚,如果總是申請(qǐng)內(nèi)存忘記釋放:性能低示辈,內(nèi)存泄漏、長(zhǎng)期內(nèi)存泄漏就會(huì)內(nèi)存溢出遣蚀。
底層語(yǔ)言(C語(yǔ)言):需要手動(dòng)釋放內(nèi)存矾麻。
高級(jí)語(yǔ)言(JS語(yǔ)言):高級(jí)語(yǔ)言,var b=1;申請(qǐng)內(nèi)存芭梯,是別人已經(jīng)定義好的险耀,所以不需要手動(dòng)釋放內(nèi)存。
js:有自己的垃圾回收機(jī)制粥帚,在宿主環(huán)境環(huán)境下也就是瀏覽器幫咱們釋放內(nèi)存了。
查看“垃圾”:
以谷歌瀏覽器為例:Chrome --- F12 --- TimeLine --- '小山'限次,垃圾回收
生存周期(評(píng)判標(biāo)準(zhǔn)) --- 作用域
作用域:
1.全局變量:在哪都能用芒涡,生存周期很長(zhǎng),瀏覽器關(guān)閉時(shí)釋放卖漫,占資源
2.局部變量:生存周期短费尽,不占資源
3.閉包:子函數(shù)可以使用父函數(shù)的局部變量,如果子函數(shù)得不到釋放羊始,整體作用域鏈上的局部變量都會(huì)保存旱幼。
如下圖所示:
下面讓我一起來(lái)看幾個(gè)關(guān)于作用域的幾個(gè)小例子:
作用域鏈:先找自己,自己的父級(jí)突委,父級(jí)的父級(jí)...直到全局,全局還沒(méi)有的話就會(huì)報(bào)錯(cuò)柏卤。
var a=1;//定義了一個(gè)全局變量a
document.onclick=fuction(){
alert(a);
};
--------------------------
//定義一個(gè)局部變量
function show(){
var a='str';
alert(a);
}
//沒(méi)調(diào)用show函數(shù)之前沒(méi)有a
//show();調(diào)用了,就有a
//調(diào)用完成 沒(méi)有a
--------------------------
///一個(gè)簡(jiǎn)單的閉包
function show(){
var a=1;
document.onclick=function(){
alert(a);
};
};
document.onclick=null; //也是釋放內(nèi)存的一種方式
--------------------------------
function show(){
var a=1;
var b=2;
document.onclick=function(){
alert(b);
};
};
//這里的變量b沒(méi)有得到釋放匀油,所以就會(huì)一直被占用著缘缚。
-----------------------------------
function show(){
var a=1;
function show1(){
var b=2;
document.onclick=function(){
alert(a);
};
};
};
二、性能優(yōu)化—js方向
進(jìn)行性能優(yōu)化的前提:項(xiàng)目穩(wěn)定(功能完成)敌蚜,可維護(hù)性桥滨,再去考慮性能。
性能的分類:
1、網(wǎng)絡(luò)性能
2齐媒、執(zhí)行性能
網(wǎng)絡(luò)性能進(jìn)行分析下:
我們還以谷歌瀏覽器為例:Chrome --- f12 --- network蒲每,
分析:
name 名稱
status 狀態(tài)碼
type 資源類型
initator 發(fā)起人
time 請(qǐng)求所耗時(shí)間
size 資源大小
timeline 時(shí)間線
queueing:隊(duì)列
stalled 卡
瀏覽器響應(yīng),卡在瀏覽器
request sent:發(fā)送
客戶端網(wǎng)絡(luò)帶寬喻括,發(fā)送數(shù)據(jù)量
waiting:等待
處理數(shù)據(jù)邀杏,后臺(tái)代碼,服務(wù)器配置
Content download
服務(wù)網(wǎng)絡(luò)寬帶双妨,返回?cái)?shù)據(jù)的量
執(zhí)行性能進(jìn)行分析下:
火狐瀏覽器工具:FF-firebug --- ysolw(給網(wǎng)站評(píng)分)
谷歌瀏覽器工具:chrome --- audits :根據(jù)提示內(nèi)容進(jìn)行修改
總結(jié):
1.http請(qǐng)求越少越好
請(qǐng)求盡量合并
js 合并 | css 合并 | 圖片 ->css sprite
2.http請(qǐng)求越小越好
壓縮:
index.css 和 new.css
main.css ->main.min.css
如何壓縮:
1.手動(dòng)-淘汰
2.工具
http://tool.oschina.net/
3.前端自動(dòng)化工具
grunt | nodejs
http://gruntjs.com/
3淮阐、圖片延遲加載和預(yù)加載
4、CDN Content Delivery Network 內(nèi)容分發(fā)網(wǎng)絡(luò)
跟前端沒(méi)關(guān)系刁品,財(cái)務(wù)決定
5.阻塞加載(同步加載)
非阻塞加載(異步加載)
前端頁(yè)面:
非阻塞加載;
css | html | 圖片
阻塞加載:
js
建議:
1.別人網(wǎng)站的js泣特,放在body后面
2.自己的js寫在前面
6.執(zhí)行性能:
性能優(yōu)化:習(xí)慣
1.不用的東西刪除
2.盡量不用全局變量,好資源挑随、沖突
3.能用系統(tǒng)的就不要自己寫了
4.盡量使用正則去操作字符串
DOM操作是昂貴的状您,最耗性能,盡量減少操作
DOM操作:
oDiv.style.left=oDiv.offsetLeft+10+'px';
DOM:運(yùn)動(dòng)()
如果用戶看不到當(dāng)前的動(dòng)畫兜挨,清楚定時(shí)器膏孟。
變量:
全局:耗性能
局部:幾乎不耗
局部變量>全局變量
屬性:window.a=12;
全局變量<屬性<局部變量
*屬性越多,性能越低