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())深拷贝的结果:
2。不使用JSON序列化,直接修改参数的结果:
函数handleJsonData (lastData res) {//1。使用JSON.parse (JSON.stringify())深拷贝//让数据=https://www.yisu.com/zixun/JSON.parse (JSON.stringify (lastData));//2。不使用JSON序列化,直接修改参数 让数据=lastData;//? }
maxCount=1000
intervalTest (jsonTest {maxCount: 1000});1。使用JSON.parse (JSON.stringify())深拷贝的结果:
详解关于JSON.parse()和JSON.stringify()的性能小测试