lanzhusiyu 2019-07-01
采用CSS雪碧图(CSS Sprit/CSS 图片精灵)技术,把一些小图合并在一张大图上,使用的时候通过背景图片定位,定位在具体的某一张小图上
.pubBg{ background: url('../img/sprit.png') no-repeat; background-size: x y; /*和图片的大小保持一致*/ } .box{ background-position: x y; /*通过背景定位,定位到具体的位置,展示不同的图片即可*/ } <div class="pubBg box"></div>
真实项目中,我们最好把CSS或者JS文件进行合并压缩。尤其是在移动端开发的时候,如果css或者js内容不是很多,我们可以采取内嵌式,以此减少HTTP请求的次数,加快页面的加载速度
服务器端开启资源文件的GZIP压缩
采用图片的懒加载技术,在页面开始加载的时候,不请求真实图片的地址,而是用默认图占位,当页面加载完成后,再根据相关的条件依次加载真实图片(减少页面首次加载HTTP请求的次数)
真实项目中,我们开始图片都不加载,页面首次加载完成,先把第一屏幕中可以看见的图片进行加载,随着页面的滚动,再把下面区域中能够呈现出来的图片进行加载
根据图片的懒加载技术,我们还可以扩充出数据的懒加载
对于不经常更新的数据,最好采用浏览器的304缓存做处理(主要由服务器端处理)
例如:第一次请求CSS和JS下来,浏览器会把请求的内容缓存起来,如果做了304处理,用户再次请求CSS和JS,直接从缓存中读取,不需要再去服务器获取了(减少了HTTP请求的次数)
当用户强制刷新页面(CTRL+F5)或者当前缓存的CSS或者JS发生了变动,都会重新从服务器端拉取
...
对于客户端来讲,我们还可以基于localStorage来做一些本地存储,例如:第一次请求的数据或者不经常更新的CSS和JS,我们都可以把内容存储到本地,下一次页面的加载,我们从本地获取即可,我们设定一定的期限或者一些标识,可以控制在某个阶段重新从服务器获取
如果当前页面中出现了Audio或者Video标签,我们最好设置他们的preload=none
;当页面加载的时候,音视频资源不进行加载,播放的时候在进行加载(减少页面首次加载HTTP请求的次数)
preload=metadata;页面首次加载的时候只把音视频资源的头部信息进行加载
[优势]
在真实项目中,并不是所有的数据都要基于JSON,我们尽可能这样做,但是对于某些特殊需求(例如:文件流的传输或者文档传输),使用JSON就不合适了
采用CDN加速
CDN: 分布式(地域分布式)在编写JS代码的时候,尽量减少对DOM的操作
在JS中操作DOM是一个非常消耗性能的事情,但是我们又不可避免的操作DOM,我们只能尽量减少对于他的操作
【操作DOM的弊端】
编写代码的时候,更多使用的是异步编程
同步编程会导致:上面东西完不成,下面任务也做不了,我们开发的时候,可以把某一个区域模块都设置为异步编程,这样只要模块之间没有必然的先后顺序,都可以独立进行加载,不会受到上面模块的堵塞影响(用的不多)尤其是AJAX数据请求,我们都要使用异步编程,最好是基于promise设计模式进行管理(项目中经常使用fetch,vue axios等插件来进行AJAX请求处理,因为这些插件中就是基于promise设计模式对ajax进行封装处理)
CSS选择器优化
.headerBox .nav .left a{}
(选择器是从右向左查找的)避免使用CSS表达式
/*CSS表达式*/ .box{ background-color:expression((new Data()).getHours()%2?'red':'blue') }
JS中避免使用eval
JS中尽量减少闭包的使用
闭包也有自己的优势:保护和保存,我们只能尽量减少,但不可避免
在做DOM事件绑定的时候,尽量避免一个个的事件绑定,而是采用性能更高的事件委托来实现
事件委托(事件代理)把事件绑定给外层容器,当里面的后代元素相关行为被触发,外层容器绑定的方法也会被触发执行(冒泡传播机制导致),通过事件源是谁,我们做不同的操作即可
避免浏览器中异常错误的抛出
尽可能避免代码出错使用TRY CATCH做异常信息捕获