优化JavaScript代码,降低JSON属性名称

Ell*_* B. 7 javascript performance internet-explorer

我正在开发一个Web应用程序,它接收带有大写属性名称的JSON数据.我需要这些属性名称是小写的,所以我使用一个函数来递归循环通过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;
};
Run Code Online (Sandbox Code Playgroud)

我在这里进行一些基准测试:http://jsfiddle.net/emw89/7/

上面的测试时钟在我的机器上大约570毫秒.

我能做些什么来改善这个功能的性能吗?

编辑:我关闭了我的IE,重新打开IE并再次运行了jsfiddle基准测试 - 它现在为我提供了~180ms.我的IE已经开放了几天直到那时,所以也许这就是造成这种糟糕表现的原因.无论哪种方式,如果有进一步优化此功能的方法,我仍然感兴趣.任何时候花在处理JSON上的额外时间都会增加每个AJAX请求的经过时间.

usr*_*usr 5

var lowerCache = {};

FN = function (obj)
{
    if (typeof(obj) === "string" || typeof(obj) === "number")
        return obj;

        var l = obj.length;
    if (l) {
        l |= 0;
        var result = [];
        result.length = l;
        for (var i = 0; i < l; i++) {
            var newVal = obj[i];
            result[i] = typeof(newVal) === "string" ? newVal : FN(newVal);
        }
        return result;
    } else {
     var ret = {};
     for (var key in obj) {

         var keyStr = typeof(key) === "string" ? key : String(key);
         var newKey = lowerCache[keyStr];
         if (newKey === undefined) {
             newKey = keyStr.toLowerCase();
             lowerCache[keyStr] = newKey;
         }

         var newVal = obj[key];
         ret[newKey] = typeof(newVal) === "string" ? newVal : FN(newVal);
     }
     return ret;
    }
};
Run Code Online (Sandbox Code Playgroud)

快100%.