性能优化


性能优化

一、CDN

  1. CDN 的概念
  2. CDN 的作用
  3. CDN 的原理
  4. CDN 的使用场景

二、懒加载

  1. 懒加载的概念
  2. 懒加载的特点
  3. 懒加载的实现原理
  4. 懒加载与预加载的区别

三、回流与重绘

  1. 回流与重绘的概念及触发条件
  2. 如何避免回流与重绘?
  3. 如何优化动画?
  4. documentFragment 是什么?用它跟直接操作 DOM 的区别是什么?

四、节流与防抖

  1. 对节流与防抖的理解
  2. 实现节流函数和防抖函数

五、图片优化

  1. 如何对项目中的图片进行优化?
  2. 常见的图片格式及使用场景

六、Webpack 优化

  1. 如何提⾼ webpack 的打包速度?
  2. 如何减少 Webpack 打包体积
  3. 如何⽤ webpack 来优化前端性能?
  4. 如何提⾼ webpack 的构建速度?
  5. 如何优化长列表
  6. 如何实现一个 dialog 组件
  7. 服务端渲染的原理
  8. 项目打包到服务器的整个过程
  9. 以前端角度出发做好 SEO 需要考虑什么?
  10. 如何实现前端登录
  11. 如何实现扫码登录
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title></title>
    <style>
      ul {
        margin: 0;
        padding: 0;
        list-style: none;
      }
      ul li {
        width: 77px;
        height: 77px;
        background: url(images/3_1.png);
      }
      ul li:nth-child(1) {
        background: url(images/ico_01.png);
      }
      ul li:nth-child(2) {
        background: url(images/ico_02.png);
      }
      ul li:nth-child(3) {
        background: url(images/ico_03.png);
      }
      ul li:nth-child(4) {
        background: url(images/ico_04.png);
      }
      ul li:nth-child(5) {
        background: url(images/ico_05.png);
      }

      /*  ul li:nth-child(1){
            background-position: 0 0;
        }
        ul li:nth-child(2){
            background-position: -77px 0;
        }
        ul li:nth-child(3){
            background-position: -154px 0;
        } */
      /*  ul li:nth-child(4){
            background: url(images/ico_04.png)
        }
        ul li:nth-child(5){
            background: url(images/ico_05.png)
        } */

      #box {
        width: 100px;
        height: 100px;
        background: green;
      }
    </style>
  </head>
  <body>
    <ul>
      <li>1</li>
      <li>2</li>
      <li>3</li>
      <li>4</li>
      <li>5</li>
    </ul>

    <div></div>

    <!-- 
    defer    
        1. 解析html
        2. 遇到带defer属性的script标签,继续解析html,同时下载script引入的文件
        3. 浏览器完成解析HTML,然后执行下载的脚本(按书写顺序执行)


    async
        1. 解析html
        2. 遇到带async属性的script标签。继续解析html,同时下载script引入的文件
        3. js文件下载完毕,浏览器暂停解析html,开始执行js
        4. js执行完毕,浏览器接着解析html

     -->
    <script src="js/jquery-3.4.1.js" defer></script>
    <script src="js/jquery-3.4.1.min.js" async></script>

    <div id="box"></div>

    <script>
      /*
            一、页面级的优化
                1、CSS Spritesr
                2、使用CDN
                3、压缩合并代码
                4、使用DNS预解析
            二、代码级别的优化 
                1、减少DOM操作
				2、异步加载
				3、事件代理
				4、使用requestAnimationFrame来替代setTimeout和setInterval
				5、图片懒加载

                60Hz

                16.7ms  1000ms/60Hz=16.7
         */

      var lis = document.querySelectorAll("li");
      var len = lis.length;
      var ul = document.querySelector("ul");

      /* for(var i=0;i<len;i++){
            lis[i].onclick=function(){

            }
        } */

      ul.onclick = function (ev) {
        //console.log(ev.target.tagName);

        if (ev.target.tagName.toLowerCase() == "li") {
          console.log(ev.target.innerHTML);
        }
      };

      var div = document.querySelector("div");

      console.time("kaivon");
      for (var i = 0; i < 5000; i++) {
        div.innerHTML += "a";
      }
      console.timeEnd("kaivon");

      console.time("kaivon");
      var str = "";
      for (var i = 0; i < 5000; i++) {
        str += "a";
      }
      div.innerHTML = str;
      console.timeEnd("kaivon");

      var box = document.getElementById("box");
      var timer = requestAnimationFrame(function fn() {
        box.style.width = box.offsetWidth + 5 + "px";
        box.innerHTML = box.offsetWidth / 5 + "%";

        // console.log(this);

        timer = requestAnimationFrame(fn);

        if (box.offsetWidth >= 500) {
          cancelAnimationFrame(timer);
        }
      });

      function getTopValue(obj) {
        var top = 0;

        while (obj.offsetParet) {
          top += obj.offsetTop;

          obj = obj.offsetParet;
        }
      }
    </script>

    <img src="images/ico.png" alt="" data-s="http://www.baidu.com/12.jpg" />
    <div>
      <div></div>
    </div>
  </body>
</html>

文章作者: Sunny
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Sunny !
  目录