之前一直说React效率高的原因是因为在把虚拟DOM渲染为真实DOM的时候并不是每一次都渲染所有的,而是会进行一定的算法处理,只重新渲染新的DOM。
这里说到的算法,其实就是diffing
算法,或者说diff
算法,diff算法有一个重要的特点就是会一层层的判断每一层标签的属性和内容是否一致,如果一致就会复用,不一致才会重新生成。
之前一直说React效率高的原因是因为在把虚拟DOM渲染为真实DOM的时候并不是每一次都渲染所有的,而是会进行一定的算法处理,只重新渲染新的DOM。
这里说到的算法,其实就是diffing
算法,或者说diff
算法,diff算法有一个重要的特点就是会一层层的判断每一层标签的属性和内容是否一致,如果一致就会复用,不一致才会重新生成。
在之前的React类式组件定义的时候,有说到有一个必不可少的内容,即render
函数,这个函数是React自带的,每当组件的状态变化的时候,就会触发一次render。
render函数就是React生命周期中的一个,与之类似的这些函数通常被称作React生命周期函数、React生命周期钩子函数、React生命周期钩子、React生命周期回调函数。
这些函数包括constructor、componentWillMount、render、componentDidMount、componentWillUnmount、componentWillReceiveProps、shouldComponentUpdate、componentWillUpdate、componentDidUpdate等。
前边有发过一篇代码优化的文章:记一次java程序从6H到30min的优化过程
大概描述的是一个java程序从最大内存至少80G运行6H30min,到最大内存降到75G并且运行30min的优化过程。
但是实际上这个结果并不达标,基于现有的环境,期望的最大内存不能超过64G,并且在可以接收的处理时间内这个内存应该越小越好。
终于又经过了几天的奋战后,这个结果变成了28G和14min。(这里的时间,并非指单纯读文件的时间,而是整个程序所有业务的完整时间)
之前简单学习的react中函数式组件和类式组件的基本使用,函数式组件适用于定义简单的组件,类式组件适用于定义复杂的组件。
复杂的组件指的是有状态的组件,所谓的状态,在react中就是三大核心属性之一的state。
我们有一个java系统,需要从固定的文件目录中读取csv格式的文件,然后将文件内容读取后在进行一系列的转换以及数据库操作,包含文件内容转换为java对象、内容去重、查询oracle、生成目标数据集合、数据存入oracle和mongodb。
起初,文件目录中有四个文件,一个4.3G,另外三个都是几百兆,四个文件一起有5.3G,大约1200万条初始数据。
程序之前使用的文件都比较少,因此之前设置的主要jvm参数是-Xms64m -Xmx64G -XX:NewRatio=1 -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/
,之前运行时也都很正常,但是这一次却几个小时都不结束。
由于当前项目的前端中使用的是React,所以其实我应该算是接触它有很长一段时间了。
但是一直以来都是局部小功能的修改,并没有系统性的学习和理解。
鉴于工作技术优先的原则,我觉得有必要从零开始系统的学习一下。