前端性能优化

2021-07-23  本文已影响0人  前端人

缓存处理

准备资源包

<link href="/js/index.ec325bab.js" rel="preload" as="script" />

rel="preload" 预加载 不执行,要执行要重新加载

<link rel="prefetch"> 已经被许多浏览器支持了相当长的时间,但它是意图预获取一些资源,以备下一个导航/页面使用(比如,当你去到下一个页面时)。这很好,但对当前的页面并没有什么助益。此外,浏览器会给使用prefetch的资源一个相对较低的优先级——与使用preload的资源相比。毕竟,当前的页面比下一个页面相对更加重要

as rel="preload"设置后使用
<link href="/js/notFindPage.ec325bab.js" rel="prefetch" />
<link href="main.css" rel="stylesheet">

加载

预加载
link ref=preload 预加载 当前页要用
ref =prefetch 下载资源以被下一个导航用,优先级比较低

异步加载
script async defer延迟加载
有了async属性,表示后续文档的加载和渲染与js脚本的加载和执行是并行进行的,即异步执行,但是标记为 async 的脚本并不保证按照指定它们的先后顺序执行,也就是说后面的js脚本可能先于之前的Js脚本执行
加载完成后立即执行 ,在window.onload之前执行 DOMContentLoaded不一定能够监控到

有了defer属性,加载后续文档的过程和js脚本的加载(此时仅加载不执行)是并行进行的(异步),js脚本的执行需要等到文档所有元素解析完成之后,DOMContentLoaded事件触发执行之前

在文档解析完成之后执行

按需加载

少加载,多用缓存

缓存的使用

服务器对缓存进行控制 让代码更新要立即生效,没有变更要应用缓存 etag if-modify-since从上次请求后是否有修改 文件修改时间进行对比
service work 离线缓存

公共资源包 ,变更少的包 进行缓存

1.第三方资源缓存 变动少 缓存价值大
2公共模块提取缓存
3异步公共模块提取缓存
4.运行时缓存

contenthash css文件hash使用contenthash,这样不受js模块变化影响
chunkhash
[chunkhash],使得文件只随着内容变化,不随着编译变化

[hash]是每次编译都变化一次

contenthash css变化 js模块会变化

hash [范围最大] 是针对整个项目的,如果把整个项目当做是一个文件(为什么非要是单个的1.txt就这么好理解成是文件了?),那么这个项目文件的内容发生改变(文件删除添加,文件内容修改),都会导致整个项目的hash值发生改变.

chunkhash [范围其次] 是根据当前入口文件最终打包出来的js文件.output. 当前依赖链中,有任意文件变动,都会改变这个hash值.

而contenthash [范围最小] 就仅仅只是针对当前文件的内容.

关于缓存 就是代码更新后 没有立即生效的问题

注意缓存的读取和设置是否同步

js解析
先读后写
属性短链接

weakMap 弱引用 是指不能确保其引用的对象不会被垃圾回收器回收的引用
weakSet 避免内存泄漏
使用场景 储存 DOM 节点 私有成员变量 监听事件

css解析
从右到左解析

渲染
减少回流的操作 reflow,布局属性变化会导致回流

打包速度优化
cdn
noParse 第三方组件
排除 node_modles 文件夹下的内容
删除多余的npm包

上一篇下一篇

猜你喜欢

热点阅读