मैं एक ऐसे वेब एप्लिकेशन पर काम करता हूं जो जेएसओएन डेटा को अपरकेस संपत्ति नामों के साथ प्राप्त करता है। मुझे उन संपत्ति नामों को लोअरकेस होने की आवश्यकता है, इसलिए मैं जेएसओएन ऑब्जेक्ट के माध्यम से लूप को दोबारा फ़ंक्शन का उपयोग कर रहा हूं और उन्हें लोअरकेस में बदल सकता हूं।जेएसओएन संपत्ति नामों को कम करता है जो जावास्क्रिप्ट कोड को अनुकूलित करता है
समस्या यह है कि मेरे JSON उत्तरों बहुत बड़े हो सकते हैं। मैं चाहता हूं कि समारोह अच्छी तरह से प्रदर्शन करे, भले ही इसे जेएसओएन को 60,000 संपत्ति नामों और घोंसले के विभिन्न स्तरों पर संसाधित करना पड़े।
lowercasing समारोह है:
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/
में ऊपर परीक्षण घड़ियों ~ 570ms पर।
क्या इस काम के प्रदर्शन में सुधार करने के लिए मैं कुछ भी कर सकता हूं?
संपादित करें: मैंने अपना आईई बंद कर दिया, आईई को दोबारा खोल दिया और फिर जेएसफ़ील्ड बेंचमार्क चलाया - अब यह मेरे लिए ~ 180ms पर आ रहा है। मेरी आईई बस कुछ दिनों तक सीधे तब तक खुली थी, इसलिए शायद यही खराब प्रदर्शन कर रहा था। किसी भी तरह से, मुझे अभी भी दिलचस्पी है यदि इस फ़ंक्शन को और अनुकूलित करने का कोई तरीका है। किसी भी समय जेएसओएन को प्रोसेस करने में अतिरिक्त समय खर्च करने से प्रत्येक AJAX अनुरोध के विलुप्त समय में सीधे जोड़ा जाता है।
यह मेरे – JKirchartz
78ms के लिए ~ 150 एमएस के आसपास पूर्ण होता है - IE9। I7 CPU के लिए Hurray। क्रोम लगभग 30% धीमा लगता है। सभी खर्च रिकर्सन में हैं, इसलिए मुझे यकीन नहीं है कि ऐसा कुछ और किया जा सकता है। –
दो शब्द: [क्रोम फ्रेम] (http://code.google.com/intl/de-DE/chrome/chromeframe/) –