性能优化是每一个项目都须要注意的问题,在这里结合项目实际状况较为系统的整理下css
web前端性能优化简单能够归纳为如下几点html
就是每一个页面之加载须要的内容,这一点在多页应用中通常都有注意,单页应用能够用webpack的import与vue的异步组件实现;react因为本人不熟,确定也有相应的解决方案前端
在目前的webpack4+中,只要将mode设置为production,webpack就会将对应的资源(html、css、js)进行压缩;gulp也有对应的模块(html-min,uglify)vue
将首屏不须要展现内容作懒加载处理,在须要展现时(好比滚动屏幕)再加载须要的内容react
这是一种比较经常使用的技术,就是jiang将页面须要展现的小图片图标集中到一整张图片中,经过background-position设置来展现,原理是因为浏览器对同一域名下的请求有并发个数限制(通常在4-10个)webpack
cdn原理简单来讲就是经过dns的负载均衡,将访问解析到最近的服务器,该服务器首次会到目标服务器加载内容,同时会缓存该内容,此后该地区访问此资源的时候就能直接读取服务器上的缓存内容;从而块加载的速度;同时还能够突破浏览器的并发个数限制于服务器的带宽限制web
3.1.1 Last-Modified(http1.0)与ETag(http1.1),浏览器会对响应头中有此两个字段的内容进行缓存,下次访问此资源的时候会带上f-Modified-Since(与Last-Modified相对应)If-None-Match(与ETag相对应);服务器在识别到文件没有变化的时候,会返回状态码304,同时也不会返回响应体;浏览器接收到服务器返回的内容后就会从缓存中读取相应内容;
关于为何会有两个字段,http1.0与http1.1各一个,由于http1.0中的约定会有服务器于客户端时间不一致的状况;下同gulp
3.1.2 Expires(http1.0)与Cache-Control: max-age=86400(http1.1),此个字段与3.1.1相似,不一样的是浏览器读到对应缓存后,若是没过时,就不会请求服务器,直接使用缓存里的内容浏览器
3.1.3 keep-alive,与tcp协议的三次握手相关,有此字段将会保持tcp连接,省去再次握手的过程;保持的时间可经过服务器软件进行配置缓存
3.1.4 Accept-Encoding,这个须要浏览器处理
因为script会阻塞浏览器对html的解析,对与没有依赖关系的script加上defer或async
此方法是因为img标签会阻塞html的解析
性能优化认证道远,目前只想到这些,算是抛砖引玉了,有没涉及到或者错误之处请大佬们不吝指正,谢谢~~