欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

js如何進(jìn)行性能優(yōu)化-創(chuàng)新互聯(lián)

小編給大家分享一下js如何進(jìn)行性能優(yōu)化,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)是一家專(zhuān)注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作與策劃設(shè)計(jì),長(zhǎng)興網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:長(zhǎng)興等地區(qū)。長(zhǎng)興做網(wǎng)站價(jià)格咨詢(xún):18980820575

循環(huán)處理是最常見(jiàn)的編程模式之一,也是提升性能必須關(guān)注的要點(diǎn)之一。

常見(jiàn)的優(yōu)化方案有:

①JavaScript的四種循環(huán)(for、do-while、while、for-in)中,for-in循環(huán)比其他幾種明顯要慢。由于每次迭代操作會(huì)同時(shí)搜索實(shí)例或原型屬性,for-in循環(huán)的每次迭代都會(huì)產(chǎn)生更多的開(kāi)銷(xiāo),所以比其他類(lèi)型要慢。因此遍歷一個(gè)屬性數(shù)量有限的已知屬性列表,可以這樣優(yōu)化:

var props = ['prop1', 'prop2'],i = 0;
whlie(i < props.length){
 precess(object[props[i++]]);
}

該代碼只關(guān)注給定的屬性,減少了循環(huán)的開(kāi)銷(xiāo)。

而對(duì)于,for、while、do-while。我在chrome下測(cè)試了一下,先創(chuàng)建一個(gè)大小為1000000的數(shù)組,每項(xiàng)乘100再疊加。

測(cè)試用例:

window.onload = function(){
var items = Array(1000000).join(',').split(',').map(function(item, index) {
   return index;
});
 console.log(forCircle())
 console.log(whileCircle())
 console.log(doCircle())
function forCircle(){
console.profile();
var currTime = new Date();
 var tal = 0;
 for(var i = 0;i < items.length; i++){
  tal = tal + process(items[i]);
 }
 console.profileEnd();
 console.log('forCircle用時(shí):' + (new Date() - currTime) + 'ms');
 return tal;
}
function whileCircle(){
console.profile();
var currTime = new Date();
 var tal = 0;
 var j = 0;
 while (j < items.length){
  tal = tal + process(items[j++]);
 }
 console.profileEnd();
 console.log('whileCircle用時(shí):' + (new Date() - currTime) + 'ms');
 return tal;
}
function doCircle(){
console.profile();
var currTime = new Date();
 var tal = 0;
 var k = 0;
 do{
  tal = tal + process(items[k++]);
 }while (k < items.length)
  console.profileEnd();
 console.log('doCircle用時(shí):' + (new Date() - currTime) + 'ms');
 return tal;
}
function process(item){
 return item*100;
}
}

取某次測(cè)試結(jié)果:

js如何進(jìn)行性能優(yōu)化

js如何進(jìn)行性能優(yōu)化

js如何進(jìn)行性能優(yōu)化

平均來(lái)說(shuō),for循環(huán)耗時(shí)8ms,while耗時(shí)4ms,doWhile耗時(shí)也是4ms。for是最慢的。

②減少迭代的工作量。把數(shù)組長(zhǎng)度保存在局部變量中再遍歷、顛倒數(shù)組的遍歷順序。

最常見(jiàn)的一個(gè)循環(huán):

for(var i = 0;i < items.length; i++){
 process(items[i]);
}
//
var j = 0;
while (j < items.length){
 process(items[j++]);
}
//
var k = 0;
do{
 process(items[k++]);
}while (k < items.length)

在這個(gè)循環(huán)中,每次運(yùn)行都會(huì)產(chǎn)生如下操作:

①查找一次屬性(items.length)

②執(zhí)行數(shù)值比較一次(i < items.length) 

③查看控制條件是否為true(i < items.length ==true) 

④一次自增操作(i++)

⑤一次數(shù)組查找(items[i])

⑥一次函數(shù)調(diào)用(process(items[i]))

若把數(shù)組長(zhǎng)度存到一個(gè)局部變量,那么就不需要每次都查找一次items.length,也就提高了性能。

改為這樣:

for(var i = 0, len = items.length;i < len; i++){
 process(items[i]);
}
//
var j = 0,
count = items.length;
while (j < count){
 process(items[j++]);
}
//
var k = 0,
num = items.length;
do{
 process(items[k++]);
}while (k < num)

這樣在大多數(shù)瀏覽器中能節(jié)省大概25%的運(yùn)行時(shí)間(IE中甚至可以節(jié)省50%)。總的來(lái)說(shuō),循環(huán)次數(shù)大的情況下,運(yùn)行時(shí)間確實(shí)有提升。取某次結(jié)果如下:

沒(méi)有局部存量存儲(chǔ)數(shù)組長(zhǎng)度時(shí):

js如何進(jìn)行性能優(yōu)化

有局部變量存儲(chǔ)數(shù)組長(zhǎng)度時(shí):

js如何進(jìn)行性能優(yōu)化

③減少迭代次數(shù),“Duffs Device”即“達(dá)夫設(shè)備“循環(huán)體展開(kāi)技術(shù)。適合于迭代次數(shù)較大的情況下。

摘抄一下書(shū)中達(dá)夫設(shè)備的基本理念:每次循環(huán)中最多可 8 次調(diào)用 process()函數(shù)。循環(huán)迭代次數(shù)為元素總數(shù)除以8。 因?yàn)榭倲?shù)不一定是 8的整數(shù)倍, 所以 startAt 變量存放余數(shù), 指出第一次循環(huán)中應(yīng)當(dāng)執(zhí)行多少次 process()。比方說(shuō)現(xiàn)在有 12 個(gè)元素,那么第一次循環(huán)將調(diào)用 process()4次,第二次循環(huán)調(diào)用 process()8 次,用 2 次循環(huán)代替了 12次循環(huán)。

基本模式:

var iterations = Math.floor(items.length/8), 
 startAt = items.length%8, 
 i = 0; 
do{ 
 switch(startAt){ 
  case 0 : process(items[i++]); 
  case 7 : process(items[i++]); 
  case 6 : process(items[i++]); 
  case 5 : process(items[i++]); 
  case 4 : process(items[i++]); 
  case 3 : process(items[i++]); 
  case 2 : process(items[i++]); 
  case 1 : process(items[i++]); 
 } 
 startAt = 0; 
 }while(--iterations);

④基于函數(shù)的迭代比基于循環(huán)的迭代消耗性能更多。例:for循環(huán)迭代與forEach函數(shù)迭代。 

⑤優(yōu)化if-else,通常來(lái)說(shuō),switch比if-else快,但是在判斷條件較多時(shí),使用查找表比if-else和switch都快。

以上是“js如何進(jìn)行性能優(yōu)化”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

分享名稱(chēng):js如何進(jìn)行性能優(yōu)化-創(chuàng)新互聯(lián)
文章來(lái)源:http://chinadenli.net/article22/dhjgcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站排名軟件開(kāi)發(fā)、網(wǎng)站內(nèi)鏈、網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化