美文网首页
前端性能优化笔记

前端性能优化笔记

作者: 佳勋学长 | 来源:发表于2017-07-23 20:41 被阅读0次

    一、性能优化的原则

    • 多使用内存、缓存
    • 减少CPU计算、减少网络请求

    二、 性能优化入手点
    2.1 页面和静态资源的加载

    • 静态资源的压缩合并
      <script src="a.js"></script>
      <script src="b.js"></script>

      构建工具合并 ==> <script src="ab.js"></script>
      
    • 静态资源缓存
      静态资源由浏览加载一次后会有缓存,只要静态资源名字不改变,则访问浏览器的缓存。只有内容改变的时候,静态资源名字才会改变。

    • 使用cdn让资源加载更快
      常用的cdn服务百度CDN库360的CDN服务新浪公共CDN库BootCDN又拍云CDN库CDNJS.CN开放静态文件CDN库

    • 使用ssr后端渲染
      好处:数据直接输出到html中进行渲染,而不需要使用ajax发送数据请求得到数据后再进行渲染。

    2.2 页面的渲染

    • css放在头部,js放在底部,因为js会阻塞页面渲染
      <html>
      <head>
      <link rel="stylesheet" href="main.css">
      </head>
      <body>
      <script src="main.js"></script>
      </body>
      </html>

    • 懒加载(图片懒加载、下拉加载更多)
      实现原理:使用尺寸较小的图片作为预览图,在img的自定义数据属性data-realsrc里存储图片的真实src链接,当页面渲染到图片时再进行src的替换。



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

    • 减少dom查询,对dom查询做缓存
      // 未优化
      for (var i = 0; i < document.getElementById('p').length; i ++) {
      // something to do
      }

      // 优化后
      var pList = document.getElementById('p')
      for (var i = 0; pList.length; i ++) {
        // something to do
      }
      
    • 减少dom操作,多个操作尽量合并在一起执行
      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)

    • 事件节流
      实现原理:设置事件的延迟执行,当用户快速持续地触发keyup事件时,只有最后一次触发才会执行。
      var input = document.getElementById('input')
      var timer
      input.addEventListener('keyup', function() {
      if (timer) clearTimeout(timer)
      timer = setTimeout(function() {
      // 触发事件
      }, 100)
      })

    • 尽早执行操作
      window.addEventListener('load', function() {
      // 页面的全部资源加载完才会执行,包括图片、视频等,等待时间可能比较久
      })

      window.addEventListener('DOMContentLoaded', function() {
        // 渲染完即可执行,此时图片、视频可能还没有加载完。大部分框架使用此方法
      })

    相关文章

      网友评论

          本文标题:前端性能优化笔记

          本文链接:https://www.haomeiwen.com/subject/wlgmkxtx.html