2012-05-16 9 views
5

का उपयोग करके प्रदर्शन सुधार प्राप्त नहीं कर सकते https://www.ruby-toolbox.com/categories/JSON_Parsers के अनुसार, मुझे ओज का उपयोग करके हैश को क्रमबद्ध करने के दौरान पागल गति प्राप्त करना चाहिए। मैंने नवीनतम मणि स्थापित किया है, इसे मेरे जेमफाइल में शामिल किया है, बंडल इंस्टॉल चलाएं, और यह पुष्टि कर सकता है कि इसका उपयोग हो रहा है। How can _know_ which JSON renderer is active in my Rails 3 app? हालांकि, JSON प्रतिक्रिया को प्रस्तुत करने में बिल्कुल कोई गति नहीं है।ओज JSON पार्सर

लाइब्रेरी में, मैं रूबी के mysql मॉड्यूल के साथ एक विरासत MySQL डेटाबेस से पूछता हूं। मैं तारों को मूल्यों में परिवर्तित करता हूं, और हैश की एक सरणी देता हूं। यह ठीक काम करता है, और इसमें लगभग 1.5 से 2 सेकंड लगते हैं। यह होना चाहिए, यहां डेटा का एक हिस्सा है जिसे पुनर्प्राप्त किया जा रहा है।

नियंत्रक

@data = Gina.points(params[:project], params[:test], 
    session[:username], session[:password]) 
respond_to do |format| 
    format.html { render :text => @data } 
    format.json { render :json => @data } # :text => MultiJson.engine 
end 

लाइब्रेरी

dbh = Mysql.real_connect(@@host, u, p) 
res = dbh.query("SELECT * FROM #{d}.#{t}") 
    @data = [] 
    res.each_hash do |row| 
    obj = {} 
     row.each_pair do |k, v| 
      v.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? obj[k] = v : obj[k] = v.to_f 
     end 
    @data << obj 
end 

मेरे समस्या 'प्रस्तुत करना: json' के साथ है हिस्सा। लगभग 1.5 एमबी डेटा के लिए, इसमें लगभग 8 या 9 सेकंड लग सकते हैं। बड़े डेटासेट्स (3.5 - 4 एमबी) पर, इसमें 25 या 30 लग सकते हैं। मैंने लाइफ में "कृत्रिम" विभाजक के साथ एक स्ट्रिंग को जाम करके जेएसओएन का उपयोग करके चारों ओर लिखा है, एक सादे का उपयोग करके jQuery में देखें। , और उसके बाद ब्राउज़र में जेएस में एक हैश में स्ट्रिंग को पार्स करना। मैं छोटे सेट पर 1.4 सेकंड तक और बड़े लोगों पर 5 सेकंड तक हूं।

जेएसओएन दृष्टिकोण स्वच्छ और समझने योग्य है, और इस बात के अनुरूप है कि चीजों को काम करने के लिए कैसे डिजाइन किया गया था। स्ट्रिंग-पार्सिंग दृष्टिकोण एक गंदे हैक है, और मुझे यह पसंद नहीं है, लेकिन यह छह गुना तेजी से है। दो दृष्टिकोणों की तुलना में मैंने जो आकर्षक चीज सीखी है वह यह है कि जेएसओएन को मेरी हैकी स्ट्रिंग को "क्रमबद्ध" करना पाठ के रूप में "प्रतिपादन" जितना तेज़ है (वास्तव में ऐसा करने के लिए कुछ भी नहीं है)। इस प्रक्रिया का गहन हिस्सा वास्तव में हैश क्रमबद्ध कर रहा है, लेकिन यह वही चीज है जो मैं अपेक्षा करता हूं कि "तेज" JSON लाइब्रेरी बेहतर करेगी।

क्या मैं मूल रूप से गलत समझ रहा हूं कि ओज मेरे लिए क्या कर रहा है, या क्या मैं कुछ गलत कर रहा हूं?

उत्तर

2

this blog post के रूप में के साथ बताया बदलें, रेल मजबूर json एन्कोडिंग विधि to_json अपनी ही एन्कोडिंग कार्यान्वयन उपयोग करने के लिए। यह आधार वर्गों जैसे ऐरे, हैश और इंटीजर को प्रभावित करता है।

इसका मतलब है कि json एन्कोडिंग के दौरान डिफ़ॉल्ट रूप से mult_json और oj का उपयोग नहीं किया जाता है, यही कारण है कि आपको लगता है कि यह धीमा है।

आप ओजोड को एन्कोड करने के लिए मैन्युअल रूप से उपयोग कर सकते हैं क्योंकि @ युजिंगज़ ने इंगित किया है।

वैकल्पिक रूप से, मैं मल्टीजसन का उपयोग करने के लिए a patch gem बनाने के लिए ब्लॉग पोस्ट का उपयोग करता हूं, जो स्वचालित रूप से ओज को एन्कोड करने के लिए उपयोग करना चाहिए।

2

आप ओज का उपयोग नहीं कर रहे हैं! जब तक आप इसे स्पष्ट रूप से कॉल नहीं करेंगे तब तक यह स्वचालित रूप से प्रभावी नहीं होगा। अपने मूल JSON प्रस्तुत करना

Oj.dump(args) 
संबंधित मुद्दे