React缓冲池的性能抖动

上上周在进行团队分享时,有人提出了对React缓冲池性能的质疑。

起初我坚持认为,空间换时间,缓冲池对性能肯定是有提升效果的,但通过几组对照实验,发现缓冲池在一定情况下,的确有一定的性能提升,但当数据规模增大时,不但不会提升性能,反而会更加慢。

细想一下,还是能想明白,缓冲池本身的适用情景,频繁需要使用某种对象,但是是循环利用的情况。比如运行阶段一共需要用到10000次某种类的实例,缓冲池大小满足峰值需要,假设峰值为100,同时尽可能的串行请求该对象,避免新的内存申请。这种情况下,由于极大的复用了现有的内存对象,理论上讲肯定是有性能提升的。但实际项目中这样的情况或许并不多,所以不见得能体现出缓冲池的提升效果。

而更有甚者,某些情况下,还可能导致缓冲池性能抖动,我总结了一下,大概有以下几种:

  • 缓冲池poolSize设置过小,而同一时刻需要用到的实例数很多。比如缓冲池大小只有10,而同时需要的实例数量为10000,这时缓冲池形同虚设
  • js虚拟机在内存管理时做了一定的优化,导致大量创建实例的开销下降,反而优于使用缓冲池的情况。一般来说,对象创建之后随机销毁,这样的测试例子达到一定规模时,时间开销就会小于使用了缓冲池的情况
  • 缓冲池对象的Pooler过程开销较大,甚至超过了new的开销

不能迷信过去的知识,时代在变化,js的执行引擎越来越牛逼了。

Show Comments

Get the latest posts delivered right to your inbox.