【发布时间】:2012-02-23 21:23:32
【问题描述】:
我正在开发一个接收带有大写属性名称的 JSON 数据的 Web 应用程序。我需要这些属性名称是小写的,所以我使用一个函数递归循环遍历 JSON 对象并将它们转换为小写。
问题是我的 JSON 回复可能会变得非常大。我希望该函数能够很好地执行,即使它必须处理具有 60,000 个属性名称和各种嵌套级别的 JSON。
小写函数为:
FN = function (obj)
{var ret = null;
if (typeof(obj) == "string" || typeof(obj) == "number")
return obj;
else if (obj.push)
ret = [];
else
ret = {};
for (var key in obj)
ret[String(key).toLowerCase()] = FN(obj[key]);
return ret;
};
我正在这里执行一些基准测试:http://jsfiddle.net/emw89/7/
上面的测试在我的机器上大约 570 毫秒。
我可以做些什么来提高这个功能的性能吗?
编辑:我关闭了我的 IE,重新打开了 IE 并再次运行了 jsfiddle 基准测试——它现在对我来说大约是 180 毫秒。直到那时,我的 IE 已经连续打开了几天,所以也许这就是导致性能如此糟糕的原因。无论哪种方式,我仍然对是否有进一步优化此功能的方法感兴趣。处理 JSON 所花费的任何额外时间都会直接增加每个 AJAX 请求的运行时间。
【问题讨论】:
-
对我来说完成大约 150 毫秒
-
78ms - IE9。 i7 CPU 万岁。 Chrome 似乎慢了大约 30%。所有的费用都在递归中,所以我不确定还有很多其他可以做的事情。
-
两个字:Chrome Frame
-
您能否提供更多背景信息?为什么你需要它们小写?不能修复 JSON 的来源吗?
-
我刚刚关闭/重新打开了我的 IE,处理时间从 ~570ms 下降到 ~180ms。也许长时间打开 IE 会降低性能……谁知道呢? @Tim 我需要这个功能的原因是因为我从一个奇怪的专有后端提取数据。该后端将记录结构数据序列化为 JSON,所有属性名称都大写——无法绕过它。这个函数的替代方法是将我的代码和客户端模板中的所有属性都大写——但这很快就会变得丑陋。
标签: javascript performance internet-explorer