前端性能优化方式(持续更新)

407 阅读4分钟

web性能优化辅助工具

1.Lighthouse页面性能测试工具:github.com/GoogleChrom…

浏览器安装此插件,或者在node直接下载lighthouse

2.测试网站:www.webpagetest.org/

加载优化

-   压缩合并
-   代码分割code spliting,可以基于路由或动态加载
-   第三方模块放在cdn
-   大模块异步加载。例如:echarts可以使用require.ensure,加载成功后,再显示对应图表。
-   小模块适度合并,将一些零散的小模块合并在一起加载,速度较快。
-   可以使用pefetch预加载,在分布场景中非常适合

图片优化

-   小图使用雪碧图,iconFont,base64内联
-   图片使用懒加载
-   webp代替其他格式
-   图片一定要压缩
-   可以使用的img的srcset,根据不同分辨率显示不同尺寸图片,既保证显示效果,又能节省带宽,提高加载速度。

CSS优化

-   css写在头部
-   避免css的表达式
-   移除空置的css规则
-   避免行内style样式

JS优化

-   js写在body底部
-   js用defer放在头部,提前加载时间又不阻塞dom解析
-   script标签添加crossorigin,方便错误收集

渲染优化

-   尽量减少reflow和repaint:涉及到样式,尺寸,节点增减的操作,都会触发reflow和repaint
-   用变量缓存dom样式,不要频繁读取
-   通过DocumentFragment或innerHTML批量操作dom
-   dom隐藏,或复制到内存中,类似virtual dom,进行修改,完成后再替换回去。
-   动画元素一定要absolute,脱离文档流,不影响其他元素。
    动画不要用lefttop等操作,要使用transformopacity,同时开启渲染层(will-changetranslate3d(0,0,0))
-   动画尽量用requestAnimationFrame,不要用定时器
-   移动端硬件加速,触发GPU渲染,还是translate3d(0,0,0)

首屏优化(显示快,滚动流畅,懒加载,懒执行,渐进展现)

-   代码分离,将首屏不需要的代码分离出去
-   服务端渲染或预渲染,加载完html直接渲染,减少白屏时间
-   DNS prefetch,使用dns-prefetch减少dns查询时间,PC端域名发散,移动端域名收敛
-   减少关键路径css,可以将关键的css内联,这样可以减少加载和渲染时间

打包优化(主要是webpack优化)

-   拆包 extemals dllPlugin
-   提取公共包 commonChunkPlugin或splitChunks
-   缩小范围 各种loader配置include和exclude,noParse跳过文件
-   开启缓存 各种loader开启cache
-   多线程加速 happypack或thead-loader
-   tee-shaking ES模块分析,移除死代码
-   Scope Hoisting ES6 模块分析,将多个模块合并到一个函数里,减小内存占用,减小体积,提高运行速度

webpack长缓存优化:

-   js文件使用chunkhash,不使用hash
-   css文件使用contenthash,不使用chunkhash,不受js变化影响
-   提取vendor,公共库不受业务模块变化影响
-   内联webpack runtime到页面,chunkid变化不影响vendor
-   保证module id 稳定,不使用数字作为模块id,改用文件内容的hash值,使用HashedModuleIdsPlugin,模块的新增或删除,会导致其后面的所有模块id重新排序,为避免这个问题
-   保证chunkhash稳定,使用webpack-chunk-hash,替代webpack自己的hash算法,webpack自己的hash算法,对于同一个文件,在不同的开发环境下,会计算出不同的hash值,不能满足跨平台需求

vue优化

-   路由懒加载组件
-   keep-alive缓存组件,保证原显示状态
-   列表项添加key,保证唯一
-   列表项绑定事件,使用事件代理v-for
-   v-if和v-for不要用在一个标签上,它会在每个项上进行v-if判断

react优化

-   路由组件懒加载,使用react-loadable
-   类组件添加shouldComponent或PureComponent
-   函数组件添加React.memo
-   列表项添加key,保证唯一
-   函数组件使用hook优化,useMemo,useCallback

SEO优化

①网站结构布局优化

-   网站结构层次越少,越容易被抓取,也就容易被收录。
-   控制首页链接数量:可以爬取到内页
-   扁平化的目录层次:尽量在“蜘蛛”跳转三次可以到达任意一个内页
-   导航优化:图片标签加上alt和title
-   网站的结构布局
-   控制页面的大小,减少HTTP请求,提高网站加载速度

②网页代码优化

-   <title>标签:强调重点
-   <meta keywords>标签:强调重点
-   <meta description>标签:高度概括网页内容
-   <body>标签:代码语义化
-   <a>标签:加上title加以说明
-   <caption>标签:表格使用该标签说明标题
-   <strong><em>标签:需要强调时使用,突出关键词
-   <iframe>框架蜘蛛不会抓取
-   diasplay:none会被搜索引擎过滤掉,应当设置z-index或设置到浏览器显示器之外