最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 性能优化的举措、细则

    正文概述 掘金(katara)   2021-03-05   485

    性能优化举措

    一、思路

    1. 根据浏览器请求、渲染资源的逻辑来阐述。
    2. 根据用户的感知角度来阐述
    3. 根据我们目前最常见的开发 部署的模式来阐述
    4. 业界的性能优化规则:

    ps : 浏览器加载页面的流程,请见:

    二、网络层面

    是否需要 距离 速度 总量 工具

    实际上也有:TCP握手连接、HTTP请求报文、HTTP回复报文(理解资源加载的性能约束,包括:TCP连接限制、TCP慢启动) 后续再展开介绍。

    2.1 不用传输

    2.1.1 缓存
    	dns缓存
    	cdn缓存
    	服务器缓存
    		nginx缓存
    
    	客户端缓存
    

    CDN缓存 why:

    CDN(Content Distribute Network,内存分发网络)的本质上仍然是一个缓存,而且将数据缓存在离用户最近的地方,是用户以最快速度获取数据,即所谓网络访问第一跳。CDN一般缓存的是静态资源,如图片,文件,CSS,Script脚本,静态网页等,但是这些文件访问频率很高,将其缓存在CDN可极大改善网页的打开速度

    nginx缓存 why:

    代理服务器也可以通过配置缓存功能加速Web请求,当用户第一次访问静态内容的时候,静态内容就被缓存在反向代理服务器上,这样当其他用户访问该静态内容的时候,就可以直接从反向代理服务器返回,加速Web请求响应速度,减轻服务器负载

    客户端缓存:why:

    CSS,JavaScript,Logo,图标等这些静态资源文件更新的频率都比较低,而这些文件又几乎是每次HTTP请求都需要的,如果将这些文件缓存在浏览器中,可以极好地改善性能。

    客户端缓存:how to do

    设置HTTP头中Cache-Control和Expires属性,可设定浏览器缓存,缓存时间可以是数天甚至是几个月。有时候,静态资源文件变化需要及时应用到客户端浏览器,这种情况可以通过改变文件名实现,比如一般会在JavaScript后面加上一个版本号,使浏览器刷新修改的文件。

    2.1.2 减少传输次数(有点偏内容层面了)
    		1. 合并传输
            	api 合并传输??
            		怎么合并没懂
            	css 合并 ;js合并,图片合并 css sprite等等。
            	 iconfont
            2. 按需加载(即暂且不用传输的先不传送)
            	单页应用下的按照路由的需要加载 
            	不再当前页的 不传送
            3. 使用http2.0  3.0  --可一个tcp,多个http传输
    

    why:

    HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要建立通信链路,进行数据传输,而在服务器端,每个HTTP都需要启动独立的线程去处理,这些通信和服务的开销都很昂贵,减少HTTP请求的数目可有效提高访问性能。

    2.2 传输内容少

        见下方内容的部分
    

    2.3 传输速度快

    1. 带宽大
    2. 服务器相关的性能好,相关反应速度也就快了。
    3. ★★★prefetch(利用空闲时间),可用webpack 的 PreLoadWebpackPlugin插件
    

    2.4 减少传输距离

    使用cdn能帮你选择最优的服务器下载响应你的资源
    

    2.5 工具能不能优化

    http传输协议使用 3.0 2.0 更高的版本
    

    总结如下:

    1. 使用cdn 
    2. 开启相关缓存
    3. 增加带宽
    4. http版本升级
    5. refetch(利用空闲时间)
    

    三、资源(内容)层面

    3.1 有内容,不出错

    即避免202
    避免重定向
    

    3.2 内容少

    3.2.1 分批传输
    	    1. 大的内容,分拆一下。
            2 使用流,边看便下载
    3.2.2 去除多余的大小
    	  1. 设计师设计的时候就不大面积使用背景图,
    	   2. api 请求的时候,去除多余的大小,不必要的返回
    	   3. 去除多余的依赖: 控件中的依赖 干掉;webpack 中的sourcemap
    	   2. 去除多余的代码和注释 分号 空格等等
    	   5. 技术选型恰当
    	   6. 首页,从单页面 改用多页。
    	   7. 资源按需加载。如hui控件的按需使用
    	   8. 其他: 代码压缩、
    	   9. 减少cookie大小: 
           10. 规范代码: 无用的东西,不需要的东西(css  js 图片等)删除掉。 
    3.2.3 本身内容再少
        3.2.3.1 压缩一下
    		 1. 首页gzip
    		 2. 设计师自己压缩图片 视频资源
    		 3. 代码压缩: webpack 工具已经帮我们做好了
        3.2.3.2 内容再减少 
                    1. 模块化,组件化,
                    2.按需加载:
                    	 第三方库和工具的 按需加载
                    	可用代码拆分(Code-splitting)只传送用户需要的代码。
                    	滚动加载,部分加载 懒加载
                    3. 业务梳理的时候,首屏设计好。避免大面积图片
                    4. 使用更小的第三方库
                    5. 使用新一代图片格式,清晰且体积小
                    6. 初次使用模糊的 小图,后续再用高清
                     
    

    减少cookie大小:how to do

    可以考虑静态资源使用独立域名访问,避免请求静态资源时发送Cookie,减少Cookie传输的次数。

    3.3 内容的执行过程(页面得渲染过程)

    避免重排 ,少重绘
    	减少dom操作---缓存dom,虚拟dom
    js css 执行不阻塞
        文件的位置的重要性。
            代码编写的逻辑性
    

    3.4 减少IO操作

        1.减少全局变量;
        2.减少全局组件;
        3.减少dom操作---缓存dom,虚拟dom
    

    3.5代码上的优化

    css
    	避免在HTML中书写style
    	避免CSS表达式:CSS表达式的执行需跳出CSS树的渲染
    	移除CSS空规则:CSS空规则增加了css文件的大小,影响CSS树的执行
    	正确使用display:display会影响页面的渲染
    	不滥用float:float在渲染时计算量比较大,尽量减少使用
    	不滥用Web字体:Web字体需要下载、解析、重绘当前页面,尽量减少使用
    	不声明过多的font-size:过多的font-size影响CSS树的效率
    	值为0时不需要任何单位:为了浏览器的兼容性和性能,值为0时不要带单位
    	标准化各种浏览器前缀
    	避免让选择符看起来像正则表达式:高级选择符执行耗时长且不易读懂,避免使用
    js
    	减少重绘和回流
    	变量的缓存
    		缓存DOM选择与计算:每次DOM选择都要计算和缓存
    		缓存.length的值:每次.length计算用一个变量保存值
    	尽量使用事件代理:避免批量绑定事件
    	尽量使用id选择器:id选择器选择元素是最快的
    	touch事件优化:使用tap(touchstart和touchend)代替click(注意touch响应过快,易引发误操作)
    

    四、 渲染层面

    深入理解浏览器的render过程,详情请见()

    4.1 渲染工具的优化

    推荐用户使用chrome浏览器
    GPU加速
        	用某些HTML5标签和CSS3属性会触发GPU渲染: 
                HTML标签:video、canvas、webgl
                CSS属性:opacity、transform、transition
        减少DOM节点:DOM节点太多影响页面的渲染,尽量减少DOM节点
        设置viewport:HTML的viewport可加速页面的渲染
    

    4.2 不阻塞

    页面渲染 不频繁切换渲染引擎和js引擎。
    	css 头 ,js尾
    	css 种少正则 少表达式;能css处理的不js
    

    4.3 优化高频事件: scroll、touchmove等事件可导致多次渲染

    函数节流
    函数防抖
    使用requestAnimationFrame监听帧变化:使得在正确的时间进行渲染
    增加响应变化的时间间隔:减少重绘次数
    

    4.4 优化动画

    尽量使用CSS3动画
    合理使用requestAnimationFrame动画代替setTimeout
    适当使用Canvas动画:5个元素以内使用CSS动画,5个元素以上使用Canvas动画,iOS8+可使用WebGL动画
    
    避免滥用框架、库
    

    4.5 避免重排 ,少重绘

    避免不必要的DOM操作
    避免使用document.write
    减少drawImage
    缓存dom,虚拟dom
    

    五、用户层面:

    1. 预加载:preload(在主渲染前进行预加载) 和,可

    首屏的渲染时间

    根据2 -5 - 8原则,最好能让用户在2秒内看到整个页面,可操作页面。

    举措:

    首屏加载同时请求不操作4个 
    按需加载
    	懒加载
    	滚动加载
    	不使用spa 模式--或者把首页单独拿出来
    延迟加载
    	比较大的资源如 图片 延迟加载
    增加loading  或者时间提示   或者好看的动画
    其他性能优化的点 均使用
    

    ps: 2-5-8原则

    用户在2秒内得到响应,会感觉页面的响应速度很快 Fast
    用户在2~5秒间得到响应,会感觉页面的响应速度还行 Medium
    用户在5~8秒间得到响应,会感觉页面的响应速度很慢,但还可以接受 Slow
    用户在8秒后仍然无法得到响应,会感觉页面的响应速度垃圾死了(此时会有以下四种可能)
        难道是网速不好,发起第二次请求 => 刷新页面
        什么垃圾页面呀,怎么还不打开 => 离开页面,有可能转投竞争对手的网站
        垃圾程序猿,做的是什么页面啊 => 咒骂开发此页面的程序猿
        断网了 => 网线断了?Wi-Fi断了?信号不好?话费用完了?
    

    六 比较影响性能的点

    图片的性能优化

    cssspite 
    不在HTML中缩放图片
    使用小体积可缓存的favicon
    优化图片
    	使用最新的图片格式,或者较好的图片格式png等
    	图片压缩一下
    base64的使用。
    预加载
    懒加载
    避免图片空连接 或者错误的链接
    

    缓存的使用

    未完待续
    

    更新时间 2021.03.05


    起源地下载网 » 性能优化的举措、细则

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元