前端代码优化散记

  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. 能不定义全局变量就不定义全局变量,使用局部变量代替全局变量,减少内存占用,提高查找速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75593.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

显示器配置信息删除

显示器配置信息删除 1 介绍2 操作参考 1 介绍 笔记本屏幕坏了&#xff0c;手头的拓展显示器都是配置成拓展显示&#xff0c;需要先找一台没配置过的显示器将系统中显示器配置信息删除&#xff0c;这样就能复制屏幕显示到拓展屏幕上了。 2 操作 Windows 的显示器配置位于注册…

flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题

flutter开发实战-video_player播放多个视频MediaCodecVideoRenderer error问题 在开发过程中&#xff0c;我这里使用video_player播放多个视频的时候&#xff0c;出现了MediaCodecVideoRenderer error 一、使用video_player播放视频 使用video_player播放单个视频请查看 htt…

python基础语法(二)

目录 注释注释的语法注释行文档字符串 注释的规范 输入输出和用户的交互通过控制台输出通过控制台的输入 注释 注释的语法 注释行 python的注释:使用#开通的行都是注释 # 这是一行注释C语言的注释:使用//的都是注释 // 这是一行注释文档字符串 使用三引号引起来的称为文档…

人工智能安全-4-小样本问题

0 提纲 小样本学习问题数据增强基于模型的小样本学习基于算法的小样本学习相关资源1 小样本学习问题 在小样本监督分类中,通常将问题表述为 N-way-K-shot分类, 当K = 1,称为one-shot learning;当K = 0时,成为zero-shot learning(ZSL)。ZSL就要求学习的问题具备充足的先…

Mybatis-plus 抽象-接口方法类

Model pojo 类继承 Model 抽象类&#xff0c;即可获得 CRUD&#xff08;增删改查&#xff09;功能。Model 使用映射类 pojo 继承 Model 抽象类&#xff0c;直接使用该类可以进行 CRUD&#xff0c;但是必须存在对应的 xxMapper 继承 BaseMapper。 Mapper Mapper 用于 service…

算法AB实验平台进化历程和挑战

1 AB 平台简介 AB 实验平台这几年在互联网公司得到了越来越广泛的应用&#xff0c;采用 AB 实验来评估产品和技术迭代效果也成为主流的业务新功能效果评估方式&#xff0c;数据驱动的文化在这几年得到了不少公司的广泛的认同&#xff0c;通过数据和指标来说明产品效果也得到了…

ROM是什么? 刷ROM是什么意思?

文章目录 ROM是什么&#xff1f;刷ROM是什么意思 ROM是什么&#xff1f; ROM是只读内存&#xff08;Read-Only Memory&#xff09;的简称&#xff0c;是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的…

大数据组件-Flink环境搭建

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

Nacos使用和注册部分源码介绍

Nacos简单介绍 Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集&#xff0c;帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构 (例…

汇编:lea 需要注意的一点

lea和mov的效用上不一样&#xff0c;如果当前%rsi的值是0&#xff0c; lea 0x28(%rsi),%rax &#xff0c;这个只是计算一个地址&#xff0c;而不是去做地址访问。 mov 0x8(%rsi),%rsi&#xff0c;而这个mov&#xff0c;在计算完地址&#xff0c;还要访问内存地址。如果rsi是0&a…

NLP信息抽取全解析:从命名实体到事件的PyTorch实战指南

目录 引言背景和信息抽取的重要性文章的目标和结构 信息抽取概述什么是信息抽取信息抽取的应用场景信息抽取的主要挑战 实体识别什么是实体识别实体识别的应用场景PyTorch实现代码输入、输出与处理过程 关系抽取什么是关系抽取关系抽取的应用场景PyTorch实现代码输入、输出与处…

超高真空度精密控制解决方案设计中百度“文心一言”的具体应用

摘要&#xff1a;本文采用国产版本ChatGPT百度“文心一言”作为一种辅助工具&#xff0c;针对超高真空度精密控制装置的开发进行了初期的技术路线设计&#xff0c;对话调研的重点是了解可调节式微流量进气阀门和可用于连接非线性输出信号型真空计的PID控制器。总体而言&#xf…

Google Hacking搜索

Google Hacking概述 GoogleHacking基本用法逻辑或OR逻辑与And逻辑非NOT完整匹配 GoogleHacking高级用法sitefiletypeinurlintitleintext Google Hacking DataBaseGoogle Hacking概述 GoogleHacking&#xff1a;利用搜索引擎有争对性的搜索信息来对网络入侵的技术和行为。搜索引…

异步请求库的实际应用案例:爬取豆瓣经典电影

在日常爬虫过程中&#xff0c;你有没有遇到过需要爬取大量数据的情况&#xff0c;但是传统的同步请求方式让您等得焦头烂额&#xff1f; 这个问题的根源在于传统的同步请求方式。当我们使用同步请求时&#xff0c;程序会一直等待服务器的响应&#xff0c;直到数据返回后才能继续…

【juc】ReentrantReadWriteLock之缓存(仅当学习)

目录 一、说明二、代码示例2.1 pom依赖2.2 示例代码2.3 实体类 三、示例截图 一、说明 1.针对于读多写少的情况 2.先查缓存&#xff0c;没有再去查库 二、代码示例 2.1 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…

期权权利金计算方法大揭秘!详解期权权利金的计算公式

期权的权利金就是指期权合约市场当时的价格&#xff0c;权利金是会浮动的&#xff0c;跟股票的价格一样&#xff0c;随着市场的波动而波动。权利金是期权费&#xff0c;不是保证金。那么期权权利金计算方法大揭秘&#xff01;详解期权权利金的计算公式。 一、什么是期权的权利金…

031:vue子组件向父组件传递多个参数,父组件2种解析方法

第031个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

C++初阶--类和对象(中)

目录 类的6个默认成员函数构造函数使用方法 析构函数使用方法 拷贝构造函数使用方法 赋值运算符重载赋值运算符重载 const成员 上篇末尾我们讲到了关于c实现栈相较于c语言在传递参数时的一些优化&#xff0c;但实际上&#xff0c;c在 初始化 清理 赋值 拷贝等方面也做了很大程…

Java虚拟机(JVM)夺命20连问

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Java voliate关键字常见面试题

1. 什么是 volatile 关键字&#xff1f;它的作用是什么&#xff1f; volatile 是 Java 中的关键字&#xff0c;用于声明一个变量是“易变”的&#xff0c;即可能被多个线程同时修改。它的主要作用是保证对该变量的读写操作具有可见性&#xff0c;即一个线程对该变量的修改对其…