详解关于JSON.parse()和JSON.stringify()的性能小测试

  

JSON.parse (JSON.stringify (obj))我们一般用来深拷贝,其过程说白了,就是利用JSON。stringify将js对象序列化(JSON字符串),再使用JSON.parse来反序列化(还原)js对象。至于这行代码为什么能实现深拷贝,以及它有什么局限性等等,不是本文要介绍的。本文要探究的是,这行代码的执行效率如何?如果随意使用会不会造成一些问题?

  

先上两个js性能测试的依赖函数

     /* *   *一个简单的断言函数   * @param值{布尔}断言条件   * @param desc{字符串}一个消息   */函数声明(价值,desc) {   让李=document.createElement(‘李’);   李。className=价值& # 63;“通过”:“失败”;   li.appendChild (document.createTextNode (desc));   . getelementbyid(结果).appendChild(李);   }         /* *   *一个测试套件,定时器是为了多次执行减少误差   * @param fn}{功能需要多次执行的代码块(需要测试,比对性能的代码块)   * @param配置对象}{配置项,maxCount:执行代码块的对循环次数,乘以:定时器执行次数   */函数intervalTest (fn,配置={}){   让maxCount=配置。maxCount | | 1000;   让时间=配置。* | | 10;   让timeArr=[];   让计时器=setInterval(函数(){   我们开始=new日期().getTime ();   (让我=0;我& lt;maxCount;我+ +){   fn.call(这个);   }   让时间=new日期().getTime()——开始;   断言(真的,“测量时间:”+时间+“女士”);   timeArr.push(运行);   如果(timeArr。长度===次){   clearInterval(计时器);   让平均=timeArr。减少(p c)=比;p + c)/次;   让p=document.createElement (“p”);   p。innerHTML=毖?$ {maxCount}次,定时器执行:${*}次,平均值:${平均}女士';   document.body.appendChild (p);   }   }, 1000);   }      

定义一些初始数据

        让jsonData=https://www.yisu.com/zixun/{   标题:“hhhhh”,   dateArr: [],   系列:[   {   名称:“line1”,   数据:[]   },   {   名称:“么”,   数据:[]   },   {   名称:“line3”,   数据:[]   },   ]   };      让res=[   {   名称:“line1”,   值:1   },   {   名称:“么”,   值:2   },   {   名称:“line3”,   值:3   },   );      

  

数据处理函数

     /* *   *处理json数据的函数。模拟真实环境中图表数据实时更新   * @param lastData{对象}上一次的数据   * @param res数组{}当前数据   * @returns数据处理完成后的结果集   */函数handleJsonData (lastData res) {//1。使用JSON.parse (JSON.stringify())深拷贝   让数据=https://www.yisu.com/zixun/JSON.parse (JSON.stringify (lastData));//2。不使用JSON序列化,直接修改参数//让数据=lastData;      如果(data.dateArr。长度> 60){   data.dateArr.shift ();   (让我=0;我      

maxCount=100   

跑起来,先让maxCount=100,为循环100次

        让jsonTest=function () {   jsonData=https://www.yisu.com/zixun/handleJsonData (jsonData, res);   };      intervalTest (jsonTest {maxCount: 100});      

1。使用JSON.parse (JSON.stringify())深拷贝的结果:

  

详解关于JSON.parse()和JSON.stringify()的性能小测试

  

2。不使用JSON序列化,直接修改参数的结果:

        函数handleJsonData (lastData res) {//1。使用JSON.parse (JSON.stringify())深拷贝//让数据=https://www.yisu.com/zixun/JSON.parse (JSON.stringify (lastData));//2。不使用JSON序列化,直接修改参数   让数据=lastData;//?   }      

详解关于JSON.parse()和JSON.stringify()的性能小测试

  

maxCount=1000         intervalTest (jsonTest {maxCount: 1000});      

1。使用JSON.parse (JSON.stringify())深拷贝的结果:

  

详解关于JSON.parse()和JSON.stringify()的性能小测试

详解关于JSON.parse()和JSON.stringify()的性能小测试