zoukankan      html  css  js  c++  java
  • 前端开发 之 性能优化

    原则

      1、多使用内存、缓存或者其他方法存储

      2、减少 CPU 计算、减少网络请求

    入手

      1、怎么让页面、静态资源加载的更快

      2、怎么让页面上的一些操作变得更快

    加载资源优化

    1、静态资源的压缩合并,预加载文件

    <script src="a.js"></script>
    <script src="b.js"></script>
    <script src="c.js"></script>

    <script src="abc.js"></script>  // 合并在一起

    window.addEventListener('DOMConetentLoaded', function(){
      setTimeout(function(){
        var xhr = new XMLHttpRequest();
        xhr.open('GET', 'http://dome.js');
        xhr.send(null);
        xhr.open('GET', 'http://demo.css');
        xhr.send(null);
        xhr.open('GET', 'http://demo.jpg');
        xhr.send(null);
      }, 1000)
    })

    2、静态资源进行缓存

    通过链接名称控制缓存
    <link rel="stylesheet" href="/css/main.css" />  // 浏览器第一访问后会自动缓存,第二次或以后访问都会从缓存中读取
    <link rel="stylesheet" href="/css/main_20171018.css" /> // 只有内容改变的时候,链接的名称才会改变,浏览器又会重新请求拉取,继续缓存 

    3、使用 CDN 让资源加载更快

    <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" />
    <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

    4、使用 SSR 后端渲染,数据直接输出到 HTML 中(如: angular,数据直接输出到页面上,不通过 Ajax 网络请求)

    渲染优化

    1、CSS 放前面,JS 放后面

    2、懒加载(图片懒加载、下拉加载更多),图片先不加载,什么时候用,什么时候加载

    <img id="imgId" src="preview.png" data-realsrc="abc.png" />  // 第一次加载是全站通用的预览图,很小,会很快加载
    <script type="text/javascript">
      var imgId = document.getElementById('imgId');
      imgId.src = imgId.getAttribute('data-realsrc');  // 当需要展示的时候,再把 data-realsrc 里面图片的真正地址赋值给 src
    </script>

    3、减少 DOM 查询,对 DOM 查询做缓存,减少 DOM 操作,多个操作尽量合并在一起执行(DOM 操作是非常昂贵的,意思就是耗时、耗性能)

    var listNode = document.getElementById('list');
    var frag = document.createDocumentFragment();  // 创建一个代码片段,不会有实质的 DOM 结构
    var x, li;
    for (x=0; x<10; x++) {
      li = document.createElement('li');
      li.innerHTML = 'List item' + x;
      frag.appendChild(li);  // 在片段中插入 li,不会触发的 DOM 操作
    }
    listNode.appendChild(frag);  // 只有一次的 DOM 插入操作

    4、事件节流

    var textarea = document.getElementById('text');
    var timeoutId;
    textarea.addEventListener('keyup', function(){
      if(timeoutId){
        clearTimeout(timeoutId);
      }
      timeoutId = setTimeout(function(){
        // 延迟执行 1秒 触发 change 事件
      }, 1000)
    })

    5、尽早执行操作(如:DOMContentLoaded)

    window.addEventListener('load', function(){
      // 页面的全部资源加载完才会执行,包括图片、视频等
    })

    window.addEventListener('DOMContentLoaded', function(){
      // DOM 渲染完即可执行,此时图片、视频等可能还没有加载完
    })
  • 相关阅读:
    TC SRM 591 (Div2. Practice only)
    SDL2 简单实现图片缩放移动查看
    Linux下socket编程 address already in use 问题
    POJ 2155 二维树状数组
    OJ开发笔记(1)
    开通博客啦~
    [转]STL transform算法中使用toupper函数
    Monkey and Banana HDU 1069
    Ignatius and the Princess IV HDU 1029
    Dungeon Master POJ 2251
  • 原文地址:https://www.cnblogs.com/joffe/p/7687937.html
Copyright © 2011-2022 走看看