不会Web前端性能优化?来看程序员怎么做

2023-05-31 0 803

责任编辑将撷取许多后端操控性强化的常见方式,主要包括减少允诺单次、增大天然资源大小不一、各式各样内存、预处置和长相连监督机制,以及标识符各方面的操控性强化等各方面。

base64:特别是在终端端,调色板能base64(webpack),大相片禁用(如果读取速率过分慢的,所以很关键的相片,能用base64)

1、减少HTTP的允诺单次和数据传输统计数据流的大小不一

CSS Sprite(希伯尼安斯图、相片恶魔)控制技术

采用手写体工具栏(Icon Font)或是SVG等CorelDRAW

+减少HTTP允诺单次或是减少允诺文本的大小不一

+图形更快:即使它是如前所述标识符图形的,而对图形(png/jpg/gif)是须要先把相片标识符在图形

+不难使帧形变

+也能采用webp文档格式相片,此种文档格式要小许多(但须要服务端全力支持此种文档格式的允诺处置)

相片懒读取(延后读取)控制技术

+第二次读取网页的这时候JGD5允诺真实世界的相片,提升第二次图形网页的速率,允诺相片的附加耗用尽量千万别处置

+当网页读取完,把再次出现在使用者视线地区中的相片做真实世界读取,没有再次出现的先不读取(节省网络流量,也能减少对伺服器的允诺阻力)

+ 对统计数据我们也尽量先期读取(千万别一场允诺过多的统计数据,比如巨集控制技术)

音频文档中止预读取(preload=none),这样能减少第二次图形网页的速率,当须要播映的这时候在读取

应用程序和服务端的数据传输尽量如前所述JSON文档格式顺利完成,XML文档格式比JSON文档格式要大许多(还能如前所述十进制标识符或是文档流文档格式,此种文档格式比FTP好许多)

把网页的css/js等文档进行合并压缩

合并:争取css和js都只导入一个(webpack能实现并合并压缩哦)

压缩:如前所述webpack能压缩,对相片自己找工具先压缩,能采用伺服器的GZIP压缩

相片BASE64(用BASE64码代表相片,减少HTTP,减少浏览器图形速率,所以真是项目中,特别是终端端,如果相片读取缓慢,BASE64一下就好了,;但base64会导致文件中心的标识符超级恶心,不利于维护和开发,所以减少采用);webpack中科院配置相片

2、设置各式各样内存、预处置和长相连监督机制

不经常更改的静态天然资源做内存处置(一般做的是304或是ETAG等协商内存)

建立Cache-Control 和Expires HTTP的强内存

DNS内存或是预处置(DNS Prefetch),减少DNS的查找

设置本地的离线存储(manifest)或是把许多不经常更改的统计数据做本地临时存储(webstorage,indexdb)等

建立Connection:keep-alive Tcp长相连

采用HTTP2版本协议(现在用的一般都是http1.1),能多条tcp通道共存=>管道化链接

一个项目分为不同的域(不同的伺服器),比如:天然资源web伺服器、统计数据伺服器,相片伺服器,视频伺服器等,合理利用伺服器天然资源,但导致过多的DNS解析

Cache-Control的优先级高于Expires

如前所述本地存储,做统计数据的存储

3、标识符各方面的操控性强化

减少对闭包的采用(即使过多采用闭包会产生许多不销毁的内存,处置不好的话,会导致内存溢出“栈溢出”),减少闭包的嵌套(减少作用域链的查找层级)

对动画来说:能用css解决的不用js(能够用transform处置的,不用传统的css样式,即使transform开启硬件加速,不能引发回流,或是采用定位的元素也会好很多,即使定位的元素脱离文档流,不能对其他元素的位置造成影响),能用 requestAnimationFrame解决的不用定时器

+用requestAnimationFrame还有一个好处,当网页处于休眠

避免采用iframe(即使iframe会嵌入其他网页,这样父网页图形的这时候,还要同时把子网页也图形了,渲染进度会变慢)

减少直接对DOM的操作(原因是减少DOM的回流和重绘…),当代项目基本如前所述mvvm,mvc统计数据驱动视图图形的,对DOM的操作框架本身顺利完成,操控性要好许多

低耦合高内聚(如前所述封装的方式:方法封装,插件,组件,框架,类库等封装,减少网页中的冗余标识符,提升标识符采用率)

尽量采用事件委托

避免再次出现死循环或是嵌套循环(嵌套循环会成倍减少循环的单次)

项目中尽量采用异步编程来模拟出多线程的效果,避免主线程阻塞(异步操作如前所述Promise设计模式来管理)

JS中千万别采用with

避免采用css表达式

函数的防抖和节流

减少采用eval(主要原因是防止压缩标识符的这时候,由于符号书写不合规,导致标识符混乱)

相片地图:对多次调取采用的相片(特别是背景图),尽量把它提取成为公共的样式,而不是每一场重新设置background

减少filter滤镜的采用

尽量减少选择器的层级

尽量减少table布局

手动回收堆栈内存(赋值为null)

栈溢出:死递归

function func(){

func();

}

func();

解决方案:

function func(){

setTimeout(func,0);

}

func();

相互引用:引用类型之间的相互调用,形成嵌套式内存

let obj1={

name:obj1,

};

let obj2={

name:obj2,

x:obj1

}

obj1.x=obj2;

想持续了解更多,不妨点赞和呗。

我会不定期在头条撷取里面概括应用网站开发,css,html,JavaScript,jQuery,Ajax,node,angular等。

对web后端开发控制技术感兴趣的同学私信我‘学习‘免费领取后端资料+工具+源码及开发项目。

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务