JS JSON对象与JSON字符串相关
JSON对象与JSON字符串效率
怎样拼接json字符串更好?
在一个项目中向后台传递参数的形式是将JSON拼接到URL中,我是后来看代码的,发现原开发者用的是直接把字符串拼接,如下:
'{"memberid":"' + memberid + '","cardbag_number":"' + cardbag_number + '"}';
但是我觉得这样十分不方便编码阅读,会严重拉低编码体验,于是想也用可以使用JSON.stringify()
将对象转换为字符串,如下:
JSON.stringify({
memberid: memberid,
cardbag_number:cardbag_number
});
这样是极大的改善了编码体验,但是是不是会增加运行的时间,或者运行内存呢?
于是我有了比较他们运行占用的想法。
这次比较的是运行时间,运行内存会在后续比较。
我首先编写了一段(如下)简单的测试代码,使用console.time()
记录时间作比较。
memberid = 5;
cardbag_number = 5;
console.time("JSON转换");
JSON.stringify({
memberid: memberid,
cardbag_number:cardbag_number
});
console.timeEnd("JSON转换");
console.time("String拼接");
'{"memberid":"' + memberid + '","cardbag_number":"' + cardbag_number + '"}';
console.timeEnd("String拼接");
从得到的运行结果来看字符串拼接的速度的确比JSON转换快得多,大概是一个数量级。
JSON转换: 0.147ms
String拼接: 0.013ms
但是考虑到直接拼接字符串,的确比较难以阅读,所以就有了使用ES6中字符串模板的想法,如下:
`{
memberid: ${memberid},
cardbag_number: ${cardbag_number}
}`;
我在之前的代码上增加了关于字符串模板相关的代码。
memberid = 5;
cardbag_number = 5;
console.time("JSON转换");
JSON.stringify({
memberid: memberid,
cardbag_number:cardbag_number
});
console.timeEnd("JSON转换");
console.time("String拼接");
'{"memberid":"' + memberid + '","cardbag_number":"' + cardbag_number + '"}';
console.timeEnd("String拼接");
console.time("ES6 模板字符串");
`{
memberid: ${memberid},
cardbag_number: ${cardbag_number}
}`;
console.timeEnd("ES6 模板字符串");
运行后发现字符串模板与字符串拼接数量级相当,大多数时间模板字符串比直接拼接字符串的速度要快。
JSON转换: 0.149ms
String拼接: 0.013ms
ES6 模板字符串: 0.009ms
所以,使用字符串模板会更快,更便于阅。
但是我们尝试拼接作为
所以我们通常会在这里停下脚步确定自己使用字符串模板来开发。
但是为什么字符串模板会更快呢。
疑问: 但是我们发现,按照模板字符串的样式会产生一个问题,拼接出来的Url会产生换行,我们是否需要进一步解决这个问题,除去模板字符串的的空格和换行呢?
为什么字符串模板会更快
我已经知道了,但是我要去吃饭了,回头再写。