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

    一、了解浏览器

      1:浏览器的主要功能是将用户输入的url地址转化为可视化的图像;浏览器是多进程多线程的

      2:进程:程序是一次性执行,它占有一片独有的内存空间,是操作系统的最小基本单元

      3:线程:是进程内的一个独立执行单元,是cpu调度的最小单元

      4:浏览器内有html解析器、css解析器、js引擎、layout模块和绘图模块等

    二、什么是css阻塞和js阻塞?

      1:css阻塞:

        内联样式style标签和外联样式link引入;

        #style标签的样式:

          由html解析器解析、不阻塞DOM解析、不阻塞浏览器的渲染

        #外联link引入的样式:(推荐使用的方式)

          由css解析器解析、阻塞浏览器的渲染

          不阻塞DOM渲染:DOM解析和CSS解析是并行的,浏览器解析DOM成dom tree,解析CSS成css tree,最终生成render tree

          阻塞其后面的js渲染:若后面js是获取dom元素来修改样式,css还没有解析完毕,那js会获取到错误的信息

        #优化的核心理念:尽快提高外联css的加载速度

          使用cdn进行外部资源加速、对css进行压缩、减少http请求个数,对多个css文件合并、优化样式表代码

      2:js阻塞:

         阻塞DOM解析、阻塞浏览器渲染、阻塞后续js的执行

         #优化的核心理念:尽量放在代码底部,js加载按照前后顺序  

    三、重排和重绘

      1:图层:浏览器渲染一个页面时,会将页面分为多个图层layers

      2:重排(reflow):又称为回流;可以理解为元素位置发生变动,重排一定会产生重绘,重绘不一定产生重排

      3:重绘(repaint):某个元素发生了重绘,则整个图层就会发生重绘;比如元素颜色的变化   

      #优化方案:

        减少产生重排和重绘的属性的使用;例如visibility替代display、将多次样式的使用合并为一次操作

    四、延迟加载(懒加载)、预加载

      #懒加载:

        1:js图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片

        2:意义:懒加载的主要目的是作为服务器前端的优化,减少请求次数或者延迟请求数

        3:实现方式:

          1:纯粹的延迟加载,使用setTimeout或者setInterval进行加载延迟

          2:条件加载,就是符合某些条件或者触发了某些事情才开始异步下载

          3:可视区加载,即仅加载用户可以看到的区域    

        4:实现步骤:页面的img刚开始不设置src属性,浏览器就不会发送请求下载图片;

          首先,不要将图片地址放在src属性中,而放在自定义属性中,页面加载完成后,根据scrollTop判断图片是否在用户视野中,如果在,将自定义属性中的路径放在src中;在滚动事件中重复判断是否进入视野  

      #预加载:

        1:提前加载图片,当用户需要查看时直接从本地缓存中渲染

        2:意义:可以说是牺牲服务器前端性能,换取更好的用户体验  

        3:实现方式:用CSS和JavaScript实现预加载、仅使用JavaScript实现预加载、使用Ajax实现预加载

          详情:https://www.cnblogs.com/ranyonsue/p/11778306.html(他人的博客)

    五、前端性能优化

        减少http请求:最直接的方式是减少页面资源,但不现实,所以减少http请求次数;例如: 合并css和js文件、使用精灵图、行内图片等

        减少DNS查询:用户输入url之后,浏览器先要查询域名对应的服务器ip地址,在DNS查询完成之前,浏览器无法从服务器下载任何数据;使用keep-alive或者使用较少的域名

        避免重定向:重定向所需要的信息都在http请求头中,而响应体一般是空的,定义url地址时尽量是完整的地址;客户端在接收到服务器的重定向时后,会根据响应头中的location地址再次发送请求,重定向会影响用户体验

        缓存ajax请求(最重要的优化方式是缓存响应结果)

        图片延迟加载(懒加载)、预加载

        减少dom操作

        样式文件放在head

        脚本放在页面底部

        使用外联样式和脚本

        减少cookie大小

      

  • 相关阅读:
    Use Eclipse to develop groovy[docs.codehaus.org]
    Map.putAll方法——追加另一个Map对象到当前Map集合(转)
    限制某个进程只能在某个CPU上运行
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java实现蓝桥杯 算法提高 身份证号码升级
    Java蓝桥杯 算法训练 复数归一化
    Java实现 蓝桥杯 算法提高 最大乘积
    Java实现 蓝桥杯 算法训练 p1103
  • 原文地址:https://www.cnblogs.com/xsk-walter/p/13582593.html
Copyright © 2011-2022 走看看