JavaScript / 前端 · 12月 22, 2020 0

JSON序列化内存泄漏

产品形态

一个看书的应用,可以翻页。

场景

为了更好的缓存ajax数据,做了比较多的数据缓存,测试发现,使用页面一会过后页面会变卡,在微信浏览器环境下,直接闪退。第一反应是请求太慢,去掉花费时间较长的请求后,依然变卡。所以就做了时间断点测试。

过程分析

代码如下:

一共有4个时间点:

  1. 这整块代码的执行时间:getPageContent
  2. 获取源数据的执行时间:getChapterJSON
  3. 数组查找方法:chapterJSONfind
  4. 对象序列化:JSONstringify

然后执行翻页操作所得的时间如下:

一眼可以看出,JSONstringify的时间越来越长,导致第十次交互时,直接页面闪退。
打印出这个对象后,发现了循环引用,导致内存泄漏

总结

这些操作都是在微信环境下测试的,在谷歌浏览器上,没有这种现象发生,想必是做过优化,微信的x5内核则会内存泄漏。下次在序列化对象之前务必检查啊~~

冀ICP备19028007号