前端性能優(yōu)化筆記

一、性能優(yōu)化的原則

  • 多使用內存、緩存
  • 減少CPU計算、減少網(wǎng)絡請求

二、 性能優(yōu)化入手點
2.1 頁面和靜態(tài)資源的加載

  • 靜態(tài)資源的壓縮合并
    <script src="a.js"></script>
    <script src="b.js"></script>

    構建工具合并 ==> <script src="ab.js"></script>
    
  • 靜態(tài)資源緩存
    靜態(tài)資源由瀏覽加載一次后會有緩存,只要靜態(tài)資源名字不改變,則訪問瀏覽器的緩存。只有內容改變的時候,靜態(tài)資源名字才會改變。

  • 使用cdn讓資源加載更快
    常用的cdn服務百度CDN庫360的CDN服務、新浪公共CDN庫、BootCDN、又拍云CDN庫、CDNJS.CN開放靜態(tài)文件CDN庫

  • 使用ssr后端渲染
    好處:數(shù)據(jù)直接輸出到html中進行渲染,而不需要使用ajax發(fā)送數(shù)據(jù)請求得到數(shù)據(jù)后再進行渲染。

2.2 頁面的渲染

  • css放在頭部,js放在底部,因為js會阻塞頁面渲染
    <html>
    <head>
    <link rel="stylesheet" href="main.css">
    </head>
    <body>
    <script src="main.js"></script>
    </body>
    </html>

  • 懶加載(圖片懶加載、下拉加載更多)
    實現(xiàn)原理:使用尺寸較小的圖片作為預覽圖,在img的自定義數(shù)據(jù)屬性data-realsrc里存儲圖片的真實src鏈接,當頁面渲染到圖片時再進行src的替換。



    <script>
    var img = document.getElementById('lazyImg')
    img.src = img.getAttribute('data-realsrc')
    </script>

  • 減少dom查詢,對dom查詢做緩存
    // 未優(yōu)化
    for (var i = 0; i < document.getElementById('p').length; i ++) {
    // something to do
    }

    // 優(yōu)化后
    var pList = document.getElementById('p')
    for (var i = 0; pList.length; i ++) {
      // something to do
    }
    
  • 減少dom操作,多個操作盡量合并在一起執(zhí)行
    var listNode = document.getElementById('list')
    // 要插入10個li標簽
    var frag = document.createDocumentFragment()
    for (var x = 0; x < 10; x++) {
    li = document.createElement('li')
    li.innerHTML = 'List item' + x
    frag.appendChild(li)
    }
    listNode.appendChild(frag)

  • 事件節(jié)流
    實現(xiàn)原理:設置事件的延遲執(zhí)行,當用戶快速持續(xù)地觸發(fā)keyup事件時,只有最后一次觸發(fā)才會執(zhí)行。
    var input = document.getElementById('input')
    var timer
    input.addEventListener('keyup', function() {
    if (timer) clearTimeout(timer)
    timer = setTimeout(function() {
    // 觸發(fā)事件
    }, 100)
    })

  • 盡早執(zhí)行操作
    window.addEventListener('load', function() {
    // 頁面的全部資源加載完才會執(zhí)行,包括圖片、視頻等,等待時間可能比較久
    })

    window.addEventListener('DOMContentLoaded', function() {
      // 渲染完即可執(zhí)行,此時圖片、視頻可能還沒有加載完。大部分框架使用此方法
    })
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容