Web前端优化小总结

  • 1.JS中尽量减少闭包的使用(原因 闭包会产生不释放的栈内存)

---循环给元素事件绑定的时候,尽可能把后期所需要的信息存储到元素的自定义属性中
--- 可以在最外层形成一个闭包,把一些后续需要的公共信息进行存储,而不是每一个方法都创建闭包
--- 尽可能的手动释放不被占用的内存。

  • 2.尽量合并CSS和JS文件

--- (把需要引入的css合并为一个,js也是合并为一个),原理是减少http请求次数,尽可能的把合并后的代码进行压缩,减少http请求资源大小。
--- webpack这种自动化构建工具可以帮我们实现代码的合并和压缩(工程化开发)
--- 移动端开发(追求高性能pc开发)如果css或者js不是需要很多,我们可以把js和css直接写成内嵌式

  • 3.尽量使用字体图标或者svg图标来代替传统的png图片

(因为字体图标是矢量图,基于代码便携出来的,放大不会变形,渲染速度快)

  • 4.减少对DOM的操作(主要是减少DOM的重绘和回流(重排))

--- 关于重排的分离读写:设置的代码写在一起
--- 使用文档碎片或者字符串拼接做数据绑定(DOM动态创建)

    1. 在JS中避免嵌套循环

(额外增加很多循环次数)和死循环(遇到死循环浏览器会卡死)

    1. 采用图片的懒加载(延迟加载)

    --- 为了减少页面第一次加载过程中,http的请求次数,让页面打开速度变快
    --- 步骤:开始加载页面的时候,所有的真实图片都不去发送http请求加载,而是给一张占位图,当页面加载完,并且图片在可视区域内,我们再去做图片加载。

    1. 利用浏览器和服务器端的缓存技术(304缓存)

把一些不经常更新的静态资源文件做缓存处理,例如 JS/CSS/静态图片都可以做缓存,原理也是为了减少http的请求次数和请求大小,让获取速度更快

    1. 尽可能使用事件委托(事件代理)来处理事件绑定操作,减少DOM的频繁操作,其中包括给每一个DOM元素做事件绑定
    1. 尽量减少CSS表达式的使用
#mydiv {
  position:absolute;
  width:100px;
  height:100px;
  left:expression(document.body.offsetWidth - 110 + "px");
  top:expression(document.body.offsetHeight - 110 + "px");
}
    1. CSS选择器解析规则是从右向左解析

.container .link a{
先找到所有的A,再删选是在.link样式类中的,再次筛选是在.container样式类中的。。。先找到的是所有的A,操作起来是消耗性能的,我们在使用css选择器的时候尽可能减少对标签选择器的使用
}

  • 11.做CDN加速(重量级优化)

    1. CSS雪碧图技术(css sprite/css 图片精灵)

    把所有相对资源较小的图片汇总到一张大张大图上,后期我们只需要把大图加载下来,用背景定位的方式展现对应的小图即可

    1. 减少对于cookie的使用(最主要是减少本地cookie存储内容的大小),因为客户端操作cooike的时候,这些信息总是在客户端和服务器端传来传去
    1. 页面中的数据获取采用异步编程和延迟分批加载

    使用异步获取数据,是为了降低http通道阻塞,不会因为数据没有请求回来耽误下面信息的渲染,提高页面的打开速度(我们可以这样处理:需要动态绑定数据的区域先隐藏,等数据返回并且绑定完成后让其显示)
    延迟分批加载是类似于懒加载,是为了减少http的请求次数

  • 15.页面中出现音视频标签,我们不让页面加载的时候就去加载音视频资源

(不然页面加载速度慢),(方案:设置 preload="none"即可),等待页面加载完成 音视频播放的时候我们去加载音视频资源。

    1. 在客户端和服务器端进行信息交互的时候,对于多项数据,我们尽可能基于JSON格式来进行传送。 (JSON格式的数据,处理方便,资源偏小)相对于XML格式的传输才会有这个优势
  • 17.尽可能实现JS封装(低耦合高内聚),减少页面中的冗余代码,减少http请求资源的大小

    1. JS中尽量减少对EVAL的使用,因为JS在合并压缩的时候,可能会出现由于出现由于符号不完善,导致代码执行优先级错乱问题。EVAl处理起来消耗性能也是偏大一点的。
    1. CSS中设置定位后,最好使用Z-INDEX改变盒子层级, 让所有的盒子不在相同的平面上,这样后续处理的时候,性能有那么一丢丢的提高。
    1. 在基于AJAX的GET请求进行数据交互的时候,根据需求可以让其产生缓存(这个缓存不是304缓存),这样下一次从相同地址获取的数据是上一次缓存的数据(但是很少用,项目中一般刻意清除这个缓存的时候偏多)
  • 21.尽量减少对于filter滤镜属性的使用(这个属性消耗性能较大一些)

  • 22.在CSS倒入的时候尽量减少使用@import导入式,因为@import是同步操作,只有把这个对应的CSS导入,才会向下加载,而link是异步操作

额外技巧

我们一般都把CSS放在body上,把JS放在body下面(让其先加载css,再加载JS,先加载CSS是为了保证页面渲染的过程中元素是带着样式渲染的,而JS一般都是用来操作DOM元素的,需要等待元素加载完再操作)

能用css搞定的,绝对不用JS,能用原生JS搞定的,绝对不用插件,绝对不使用flash (低版本浏览器的音视频除外)
---CSS处理动画等功能的性能优于JS,而且CSS中的transform变形还开启了硬件加速

使用keep-alive实现客户端和服务器长连接

尽量使用设计模式管理我们的代码(单例,构造,promise,发布订阅),方便后期的升级和维护

开启服务器端的gzip压缩(这个压缩可以有效减少请求资源文件的大小),其实客户端图片资源也是可以进行压缩的(但是对应24位的位图,压缩后可能会变模糊)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网站优化离不开前后端的互相协作,但是对于前端工程师来说,在保证后端技术方案不变时,能不能只利用前端技术来优化网站呢...
    留七七阅读 6,382评论 0 31
  • Yahoo!的Exceptional Performance团队为改善Web性能带来最佳实践。他们为此进行了一系列...
    拉风的老衲阅读 1,872评论 0 1
  • 围绕前端的性能多如牛毛,涉及到方方面面,以我我们将围绕PC浏览器和移动端浏览器的优化策略进行罗列注意,是罗列不是展...
    流动码文阅读 695评论 0 0
  • 前言 前端的工作并不仅仅是实现「视觉&交互稿」,想要开发一个高性能易维护的「完美」站点并未易事,针对前端的性能优化...
    木羽zwwill阅读 653评论 0 4
  • 今日,放学后,弟弟想在幼儿园外的树林外,可是周围蚊子多,我想拉他走,他又不愿意,我们彼此相持不下,直到我告诉他回去...
    简丹的日记阅读 266评论 0 3