中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      JavaScript提高性能的知識點總結

      時間:2024-08-05 12:10:31 JavaScript 我要投稿
      • 相關推薦

      JavaScript提高性能的知識點總結

        JavaScript有什么方式可以提高性能呢?下面YJBYS小編為大家介紹!

      JavaScript提高性能的知識點總結

        針對js文件的加載位置

        在HTML文件中,標簽是可以加在區域和區域的。這里鑒于JavaScript執行和UI渲染的單線程原因,如果js文件載入會阻塞后面對于頁面的解析過程,頁面會等到js文件完全加載并運行后才繼續執行該做的操作。那么問題就來了,這樣可能會出現頁面空白or卡頓現象。作為一名前端開發,重要的不僅僅止于實現了需求,應該還有優質的用戶體驗。那么我們就需要消除用戶枯燥的等待,針對這個問題,這里有本獸想到的兩種解決方案:

        1. 如果js文件沒有特殊要求指明需要在頁面渲染之前載入及編譯完成的,那么選擇將js文件放到

        標簽前(既所有的頁面所呈現內容的后面),css文件還是放到

        區域(誰也不愿意看一個布局雜亂無章的頁面)。這樣做就能先讓用戶看到有布局的頁面而不是空白頁了,那么也會有人指出:那數據得通過js請求加載進來啊,怎么辦呢?可以對數據的加載做排序,急需呈現的接口放前面執行,不是那么需要的可以延后執行,同時做個簡單的載入動畫or提示。

        2. 如果這些js文件有指明需要先執行了,才能更好的展示頁面內容,那么就在第一個js或者頁面上先放個載入小動畫,可以一些有趣的或者萌萌的動畫場景。這樣也是能較好的避免用戶等待的無聊,說不定人家還對這個載入動畫更感興趣呢,這樣可提升項目的用戶體驗感。

        最終推薦:將標簽盡可能的放到標簽前面加載,以提升用戶體驗。

        針對js文件的合并

        在很多團隊開發中,我們可能會將不同功能的代碼塊分別放置在不同的js文件中,以便于開發過程中眾人合作寫代碼會更加方便,畢竟只需要找對應文件夾或文件而不是在一個很長的文件中找一個方法。這確實是會提高團隊開發效率及新人加入后的更容易進行二次開發及維護。那么將這個問題放到頁面性能里呢?這正是問題所在,在這本書中指出:Each HTTP request brings with it additional performance overhead,so downloading one single 100 KB file will be faster than downloading four 25 KB files.

        下載1個100KB的文件比下載4個25KB的文件要快,而開發過程中區分開各個文件又有很大的好處,那么合并這個問題也就放在開發完后再處理咯,相信這個操作大家都不會陌生吧,現在的前端工具這么豐富,各位習慣用什么壓縮就用什么壓縮吧~

        這里簡單提出下,在載入文件方面還可以用到defer和async屬性,用于延遲加載和異步加載,在現代瀏覽器中,大多數是已經支持defer屬性了,還沒習慣用這個額,也不知道具體會不會存在什么問題。有興趣的朋友可自行google該知識點,這里件簡單提下吧。

        現在的框架也大多配合懶加載和按需加載了。

        更快速的數據訪問

        對于瀏覽器來說,一個標識符所處的位置越深,去讀寫他的速度也就越慢(對于這點,原型鏈亦是如此)。這個應該不難理解,簡單比喻就是:雜貨店離你家越遠,你去打醬油所花的時間就越長… 熊孩子,打個醬油那么久,菜早燒焦了 -.-~

        如果我們需要在當前函數內多次用到一個變量值,那么我們可以用一個局部變量先將其存儲起來,案例如下:

        //修改前

        function showLi(){

        var i = 0;

        for(;i

        console.log(i,document.getElementsByTagName("li")[i]); //三次訪問document

        };

        };

        //修改后

        function showLi(){

        var li_s = document.getElementsByTagName("li"); //一次訪問document

        var i = 0;

        for(;i

        console.log(i,li_s[i]); //三次訪問局部變量li_s

        };

        };

        DOM操作的優化

        眾所周知的,DOM操作遠比javascript的執行耗性能,雖然我們避免不了對DOM進行操作,但我們可以盡量去減少該操作對性能的消耗。

        讓我們通過代碼解釋這個問題:

        function innerLi_s(){

        var i = 0;

        for(;i<20;i++){

        document.getElementById("Num").innerHTML="A"; //進行了20次循環,每次又有2次DOM元素訪問:一次讀取innerHTML的值,一次寫入值

        };

        };

        針對以上方法進行一次改寫:

        function innerLi_s(){

        var content ="";

        var i = 0;

        for(;i<20;i++){

        content += "A"; //這里只對js的變量循環了20次

        };

        document.getElementById("Num").innerHTML += content; //這里值進行了一次DOM操作,又分2次DOM訪問:一次讀取innerHTML的值,一次寫入值

        };

        減少Dom的重繪重排版

        元素布局的改變或內容的增刪改或者瀏覽器窗口尺寸改變都將會導致重排,而字體顏色或者背景色的修改則將導致重繪。

        對于類似以下代碼的操作,據說現代瀏覽器大多進行了優化(將其優化成1次重排版):

        //修改前

        var el = document.getElementById("div");

        el.style.borderLeft = "1px"; //1次重排版

        el.style.borderRight = "2px"; //又1次重排版

        el.style.padding = "5px"; //還有1次重排版

        //修改后

        var el = document.getElementById("div");

        el.style.cssText = "border-left:1px;border-right:2px;padding:5px"; //1次重排版

        針對多重操作,以下三種方法也可以減少重排版和重繪的次數:

        1.Dom先隱藏,操作后再顯示 2次重排 (臨時的display:none)

        2.document.createDocumentFragment() 創建文檔片段處理,操作后追加到頁面 1次重排

        3.var newDOM = oldDOM.cloneNode(true)創建Dom副本,修改副本后oldDOM.parentNode.replaceChild(newDOM,oldDOM)覆蓋原DOM 2次重排

        循環的優化

        這應該是較多人都知道的寫法了,簡單帶過即可(后面還是用代碼+注釋形式說明)~

        //修改前

        var i = 0;

        for(;i

        console.log(arr[i]);

        }

        //修改后

        var i = 0;

        var len = arr.length; //獲取一次數組arr的length

        for(;i

        console.log(arr[i]);

        }

        //or

        var i = arr.length;;

        for(;i;i--){

        console.log(arr[i]);

        }

        合理利用二進制

        如:對2取模,則偶數最低位是0,奇數最低位是0,與1進行位與操作的結果是0,奇數的最低位是1,與1進行位與操作的結果是1。

        .odd{color:red}

        .even{color:yellow}

        var i = 0;

        var lis = document.getElementsByTagName("li");

        var len = lis.length;

        for(;i

        if(i&1){

        lis[i].className = "even";

        } else{

        lis[i].className = "odd";

        }

        };

        雖說現代瀏覽器都已經做的很好了,但是本獸覺得這是自己對代碼質量的一個追求。并且可能一個點或者兩個點不注意是不會產生多大性能影響,但是從多個點進行優化后,可能產生的就會是質的飛躍了~

      【JavaScript提高性能的知識點總結】相關文章:

      對javascript的理解08-08

      常用的JavaScript模式09-22

      Javascript的this用法簡述08-15

      JavaScript學習筆記08-24

      JavaScript 基礎教學09-29

      JavaScript的課堂講解09-03

      讀javascript的發展史讀后總結02-13

      JavaScript常用方法匯總10-25

      混凝土的性能有哪些-混凝土的性能06-04

      JavaScript數組常用方法介紹09-04

      主站蜘蛛池模板: 美女被射视频在线观看91| av草草久久久久久久久久久| 国产性感丝袜美女av| 国产成社区在线视频观看| 人妻少妇精品系列一区二区| 连州市| 亚洲av成人一区二区三区色| 在线免费观看黄色国产| 色婷婷丁香综合激情| 素人系列免费在线观看| av在线亚洲国产精品| 亚洲欧美国产成人综合不卡| 雷州市| 青田县| 日韩人妻一级av一区二区 | 亚洲第一免费播放区| 国产精品国产午夜免费福利看| 亚洲av综合色区手机| 国产亚洲精品性爱视频| 久久洲Av无码西西人体| 久久精品国产视频在热| 亚洲av激情综合在线| 亚洲毛片美女毛片美女| 激情人妻网址| 日本一区二区三深夜不卡| 亚洲一区二区三区免费av在线| a午夜国产一级黄片| 国产美女丝袜高潮白浆| 一区二区三区婷婷中文字幕| 日韩av无卡无码午夜观看| 强d漂亮少妇高潮在线观看| 国产一区二区三区韩国| 亚洲色图在线视频免费观看| 亚洲免费日韩一区二区| 亚洲亚洲亚洲亚洲亚洲天堂| 亚洲大尺度视频在线看| 亚洲午夜亚洲精品国产成人| 蜜臀aⅴ永久无码一区二区| 亚洲综合国产成人av| 精品久久人妻一区二区三区| 久久亚洲精品一区二区|