最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript 性能提升之路(推薦)

 更新時間:2019年04月10日 09:25:32   作者:慕斯不想說話  
這篇文章主要介紹了JavaScript性能提升,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

在平時工作做項(xiàng)目的過程中我們有時候會遇到頁面加載很久才加載出來的情況,這樣嚴(yán)重影響了用戶的體驗(yàn)效果。雖然說有時候可能是因?yàn)榫W(wǎng)絡(luò)問題,但有些時候確實(shí)是前端代碼沒有足夠優(yōu)化導(dǎo)致的。所以通過查閱相關(guān)資料并實(shí)踐后,總結(jié)出如下知識點(diǎn)來提升性能。有什么寫得不對的地方還希望各路大神指出并加以指點(diǎn)。

1、數(shù)據(jù)訪問

1、將所有script標(biāo)簽放在盡可能接近body標(biāo)簽底部的位置,盡可能減少對整個頁面下載的影響。

2、盡量少用全局變量。因?yàn)樽兞吭谧饔糜蜴溨械奈恢迷缴?,訪問的時間就越長。局部變量位于作用域鏈中的第一個對象中,全局變量總是位于作用域鏈的最后一環(huán),所以全局變量總是最慢的。

3、避免全局查詢,如果一定要用到全局變量時,并且需要在某個函數(shù)中多次用到該全局變量時,可以定義一個局部變量指向全局變量,來縮短在作用域鏈中的查詢深度。

 function addTotrackData(){
  	var allChildrenNode=getAllChildrenDepartmentNodes();
  	for (var i = 0; i < allChildrenNode.length; i++) {
      for (var j=0,len=track.length;j<len;j++) {
        if (trackNode[j]["userId"] == allChildrenNode[i]) {
          trackNode[j]["isOnMap"] = true;
        }
      }
    }
  }

上面代碼可以改寫為如下所示

  function addTotrackData(){
  	var allChildrenNode=getAllChildrenDepartmentNodes();
  	var track=trackNode;
  	for (var i = 0; i < allChildrenNode.length; i++) {
      for (var j=0,len=track.length;j<len;j++) {
        if (track[j]["userId"] == allChildrenNode[i]) {
          track[j]["isOnMap"] = true;
        }
      }
    }
  }

4、將集合的length屬性用一個局部變量來保存,在迭代中使用該變量。

 for (var j=0,len=track.length;j<len;j++) 

5、避免使用with表達(dá)式,因?yàn)樗黾幼饔糜蜴湹拈L度。而且應(yīng)當(dāng)小心的對待try-catch的catch子句,它具有同樣效果。

6、一個屬性或方法在原型鏈中的位置越深,它的訪問速度就越慢。

7、聲明變量時,多個變量合并聲明,可以減少內(nèi)存消耗。

 var a;
  var b;
  var c;
  //推薦
  var a,b,c

2、Dom操作

Dom(文檔對象模型)是一個獨(dú)立于語言的,使用xml和html文檔操作的應(yīng)用程序接口。在瀏覽器中的接口卻是以javascript來實(shí)現(xiàn)的。Dom和javascript看成兩座島,兩者之間通過一座收費(fèi)的橋連接。一般建議盡量留在javascript島上。

1、用innerHTML代替DOM操作,減少DOM操作次數(shù),優(yōu)化javascript性能。

 //dom方式
  var str=""
  var dom=document.getElementById("test");
  var start1=new Date();
  for(var j=0;j<100000;j++){
  	var div=document.createElement("div");
  	div.innerText="test";
  	dom.append(div);					
  }
  var end1=new Date();
  console.log("dom方式:"+(end1-start1));//dom方式:356
  
  //inerHTML方式
  var content="";
  var start=new Date();
  for(var i=0;i<10000;i++){
    content=content+"<div>test</div>";
  }
  document.getElementById("test").innerHTML=content;
  var end=new Date();
  console.log("innerHTML方式:"+(end-start));//innerHTML方式:35

2、如果統(tǒng)一個Dom元素或集合被訪問一次以上,最好使用一個局部變量來緩存此Dom成員,在循環(huán)中使用局部變量緩存集合引用和集合元素會提升速度。

3、遍歷children比childNodes更快。children不區(qū)分(包括)注釋節(jié)點(diǎn)和空文本節(jié)點(diǎn),所以快一些。

4、使用element.cloneNode(bool)復(fù)制節(jié)點(diǎn),bool為false表示淺復(fù)制,只復(fù)制當(dāng)前節(jié)點(diǎn),bool為true時,表示深復(fù)制,還會復(fù)制其子節(jié)點(diǎn)。這種方式比document.createElement()速度要快一些。

5、使用document.querySelector和document.querySelectorAll("div.warning,div.notice")來快速查找。因?yàn)樗鼈兎祷匾粋€NodeList——由符合條件的節(jié)點(diǎn)構(gòu)成的類數(shù)組對象,而不是HTML集合(總是表現(xiàn)出存在性),避免了它所固有的性能問題(以及存在的邏輯問題)。querySelectorAll("div.warning,div.notice")還可以進(jìn)行聯(lián)合查詢。

6、修改樣式時,可以使用div.style.cssText來一起修改樣式,或者使用類來修改(便于維護(hù))。

var el = document.getElementById('mydiv');
   //修改3次Dom
  el.style.borderLeft = '1px';
  el.style.borderRight = '2px';
  el.style.padding = '5px';
  //推薦只需要修改1次Dom
  el.style.cssText = 'border-left: 1px; border-right: 2px; padding: 5px;' 

7、盡量避免寫在HTML標(biāo)簽中寫Style屬性,使用外聯(lián)樣式便于維護(hù)和修改。

8、避免圖片和iFrame等的空Src??誗rc會重新加載當(dāng)前頁面,影響速度和效率。

9、采用事件委托。元素連接事件句柄會影響頁面性能,采用委托利用事件冒泡的性能減少元素連接事件。(事件掛接過程都是發(fā)生在onload或DOMContentReady)事件中。

3、循環(huán)

1、for-in是四種循環(huán)方法中速度最慢的一種,一般用于循環(huán)對象(需要查找自身屬性還是原型屬性)。不建議循環(huán)數(shù)組。除非要迭代遍歷一個屬性未知的對象,否則一般不用for-in。

2、改變循環(huán)條件的順序來提高循環(huán)性能。

 //推薦
  for(var i=items.length;i--;){
    //todo
  }
  //不推薦
  for(var i=0,len=items.length;i<len;i++){
    //todo
  }  

3、通過減少循環(huán)體來優(yōu)化性能。

以上所述是小編給大家介紹的JavaScript性能提升詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 用js的for循環(huán)獲取radio選中的值

    用js的for循環(huán)獲取radio選中的值

    獲取radio選中值的方法有很多,在本文為大家介紹的是使用for循環(huán)來實(shí)現(xiàn),具體的實(shí)現(xiàn)如下,感興趣的朋友可以參考下
    2013-10-10
  • uniapp實(shí)現(xiàn)全局設(shè)置字體大小(小中大的字體切換)

    uniapp實(shí)現(xiàn)全局設(shè)置字體大小(小中大的字體切換)

    隨著UniApp的流行,越來越多的開發(fā)者選擇使用它來構(gòu)建跨平臺應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)全局設(shè)置字體大小(小中大的字體切換)的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列原理與用法實(shí)例詳解

    JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列原理與用法實(shí)例詳解

    這篇文章主要介紹了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之隊(duì)列原理與用法,較為詳細(xì)的說明了隊(duì)列的概念、原理,并結(jié)合實(shí)例形式分析了javascript實(shí)現(xiàn)與使用隊(duì)列的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • 將input框中輸入內(nèi)容顯示在相應(yīng)的div中【三種方法可選】

    將input框中輸入內(nèi)容顯示在相應(yīng)的div中【三種方法可選】

    本篇文章主要介紹了在input框中輸入內(nèi)容,會相應(yīng)的顯示在下面的div中的不同做法:js方法;jQuery方法;AngularJs方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • 原生Javascript封裝的一個AJAX函數(shù)分享

    原生Javascript封裝的一個AJAX函數(shù)分享

    這篇文章主要介紹了原生Javascript封裝的一個AJAX函數(shù)分享,本文是實(shí)際項(xiàng)目中提取出來的,簡單易用,需要的朋友可以參考下
    2014-10-10
  • JavaScript 中this指向問題案例詳解

    JavaScript 中this指向問題案例詳解

    這篇文章主要介紹了JavaScript 中this指向問題案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 常見Ajax下載文件方式以及報(bào)錯解決辦法

    常見Ajax下載文件方式以及報(bào)錯解決辦法

    AJAX(Asynchronous JavaScript and XML)是一種用于創(chuàng)建快速、動態(tài)和交互式網(wǎng)頁的技術(shù),它的主要優(yōu)勢在于能夠在不刷新整個網(wǎng)頁的情況下與服務(wù)器進(jìn)行數(shù)據(jù)交互,這篇文章主要給大家介紹了關(guān)于常見Ajax下載文件方式以及報(bào)錯解決辦法的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • 一文帶你掌握J(rèn)avaScript中的箭頭函數(shù)

    一文帶你掌握J(rèn)avaScript中的箭頭函數(shù)

    在JavaScript中,箭頭函數(shù)是一種簡化的函數(shù)語法,它在ES6(ECMAScript?2015)引入,本文就來和大家深入講講JavaScript中的箭頭函數(shù)的使用吧
    2023-05-05
  • JS原型對象操作實(shí)例分析

    JS原型對象操作實(shí)例分析

    這篇文章主要介紹了JS原型對象操作,結(jié)合實(shí)例形式分析了JS原型對象基本原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-06-06
  • 解析Javascript中難以理解的11個問題

    解析Javascript中難以理解的11個問題

    這篇文章主要是對Javascript中難以理解的11個問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12

最新評論

那曲县| 武强县| 石嘴山市| 隆尧县| 枣庄市| 顺昌县| 平和县| 黄陵县| 自贡市| 承德县| 黄石市| 阿坝| 仙居县| 西宁市| 扬州市| 万州区| 桦甸市| 阳东县| 湘西| 宜城市| 楚雄市| 鄱阳县| 叶城县| 栾城县| 辉南县| 漠河县| 呼伦贝尔市| 苏尼特左旗| 延吉市| 衡水市| 道真| 鄯善县| 麻江县| 莫力| 香河县| 朝阳区| 阿瓦提县| 乌兰浩特市| 卢湾区| 江城| 商都县|