前端代码优化散记

  1. 把import Button from 'xxx' 的引入方式,变成import {Button} from 'xxx' 的方式引入,以利于按需打包。
  2. 原生监听事件、定时器等,必须在componentWillUnmount中清除,大型项目会发生内存泄露,极度影响性能。
  3. 使用PureComponent代替React.component,这样React机制会自动在shouldComponentUpdate中进行浅比较,决定是否更新,减少渲染次数。
  4. 对于有性能瓶颈的组件多结合 React.memo ,immetable.js 对shouldComponentUpdate ,PureComponent 进行助力调优。
  5. React的JSX语法要求必须包裹一层根标签,为了减少不必要的DOM层级,我们使用Fragment标签代替,这样渲染时候不会渲染多余的DOM节点,让DIFF算法更快遍历,减少渲染性能损耗。
  6. 绑定事件不要使用匿名箭头函数,例如:onClick={(event)=>{...}} 应该改写为 onClick = {this.handleClick} 形式,减少函数的构建次数及内测占用。
  7. DOM子节点的事件,优先绑定到父节点上,使用事件代理模式,避免事件内存占用随着子节点数量等比增长。
  8. 多利用React的key属性进行优化,减少渲染dom次数,避免错误用法一:用index做key、错误用法二:用index拼接其他的字段、正确用法:用唯一id作为key。
  9. html 通过 html-webpack-plugin 插件配置 minify 开启压缩。
  10. JS 通过 terser-webpack-plugin 插件配置 开启压缩。
  11. CSS 通过 mini-css-extract-plugin 插件提取为独立css文件,不要使用内嵌style样式,通过optimize-css-assets-webpack-plugin 插件配置 开启压缩。
  12. 图片在渲染前指定大小, img 元素是内联元素,在加载图片后会改变宽高,会导致整个页面重排,验证影响渲染性能,所以最好在渲染前就指定其大小,或者让其脱离文档流。
  13. 对于脚本与DOM/其它脚本的依赖关系很强:<script>设置defer属性(即脚本会立即下载,但会延迟到页面DOM渲染后再执行,执行有序)(例如:事件类、垫片类、DOM类)。
  14. 对于脚本与DOM/其它脚本的依赖关系不强:<script>设置async属性(即当前脚本不必等待其他脚本,也不会阻塞文档呈现,执行无序)(例如:采集类、帮助类、聊天类)。
  15. JS防抖操作,对指定时间内执行的连续事件,只执行最先的一次。
  16. JS节流操作,对指定时间内执行的连续事件,只执行最后的一次。
  17. 避免出现超过三层嵌套的CSS规则。
  18. 使用ID选择器后就不要添加多余类选择器。
  19. 不要使用标签选择器,而是用类选择器代替。
  20. 避免滥用float模式、声明过多font-size。
  21. 将元素设为不可见:visibility: hidden,这样可以减小重绘的压力,必要的时候再将元素显示。
  22. 控制DOM节点的嵌套深度,能少一层就少一层。
  23. 切换样式要提前定义好class,通过class的切换批量修改样式,避免多次重绘重排。
  24. React下直接DOM操作能避免则避免,避免不了也要将多次的append的DOM操作可以先插入到一个新生成的元素中,再一次性插入到页面中,减少页面重绘重排。
  25. 能不定义全局变量就不定义全局变量,使用局部变量代替全局变量,减少内存占用,提高查找速度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值