मैं कुछ लोगों से सुन रहा हूँ जो बड़े रेल्स व्यूज़ को छोटे पार्शियल्स में तोड़ने के बारे में चिंतित हैं: एक पार्शियल को रेंडर करने में वास्तव में कितना समय लगता है? क्या पार्शियल्स को कॉल करने के प्रदर्शन प्रभाव, कोड पठनीयता में लाभ से अधिक होंगे?
मैंने कुछ संख्याएँ चलाईं ताकि एक उदाहरण दे सकूं कि कैसे सरल पार्शियल रेंडरिंग इनलाइन रेंडरिंग की तुलना करती है, ताकि हम बाद में ट्रेडऑफ पर चर्चा कर सकें। ये वो कोड है जिसका उपयोग मैंने बेंचमार्क के लिए किया, एक बिल्कुल नए रेल्स ऐप में (with config.cache_classes = true):
<% require 'benchmark'
Benchmark.bmbm do |x|
x.report "inline" do
10000.times do -%>
<p>Hello!</p>
<% end
end
x.report "partial" do
10000.times do -%>
<%= render partial: "hello" %>
<% end
end
<% end -%>
<p>Hello!</p>
और परिणाम (रूबी 2.1 और रेल्स 4.0.2 का उपयोग करके, 2013 15" रेटिना मैकबुक प्रो पर):
Rehearsal -------------------------------------------
inline 0.010000 0.000000 0.010000 ( 0.007045)
partial 0.970000 0.090000 1.060000 ( 1.050433)
---------------------------------- total: 1.070000sec
user system total real
inline 0.010000 0.000000 0.010000 ( 0.005529)
partial 0.920000 0.070000 0.990000 ( 0.997491)
तो, एक पार्शियल रेंडर एक तेज़ मशीन पर औसतन लगभग 0.1ms पर चलता है। ये इनलाइन रेंडरिंग की तुलना में बहुत धीमा है, लेकिन पर्याप्त तेज़ है कि जब आपके पास URL जनरेशन, रेल्स हेल्पर्स, और ब्राउज़र रेंडरिंग समय जैसी चीजें भी हों तो इसे नोटिस करना मुश्किल होगा।
गति सब कुछ नहीं है
अगर पार्शियल्स रेंडर करने का प्रदर्शन बहुत खराब होता, तो भी मैं शायद विशाल व्यूज़ को तोड़ने का निर्णय लेता।
एक वाक्यांश है, "इसे काम करो, इसे सही करो, इसे तेज़ करो"। जब आप एक ऐसे व्यू को ठीक करने की कोशिश कर रहे हैं जो बहुत बड़ा है, तो आप "इसे काम करो" मोड से बाहर निकलने की कोशिश कर रहे हैं, और आप बस "इसे तेज़ करो" पर नहीं जा सकते। आप अपने कोड को कम रखरखाव योग्य बना देंगे, और आप रिफैक्टरिंग के कुछ अवसरों को चूक सकते हैं, जो कैशिंग के अवसरों को जन्म दे सकते हैं, जो और भी बड़े प्रदर्शन लाभ का कारण बन सकते हैं।
आप तब तक नहीं जानेंगे जब तक आप मापें नहीं
आपको मेरी संख्याओं पर विश्वास करने की ज़रूरत नहीं है। मैं सिफारिश करूंगा कि आप न करें! रूबी की बेंचमार्क लाइब्रेरी आपको अपने स्वयं के बेंचमार्क चलाने के लिए कुछ सरल उपकरण देती है। आपके पूर्ण स्टैक को प्रोफाइल करने के लिए भी उपकरण हैं, जैसे न्यू रेलिक और मिनीप्रोफाइलर। मैं अपने दैनिक काम में इन तीनों का काफी नियमित रूप से उपयोग करता हूं।
जब आप प्रोफाइल करते हैं, तो हमेशा प्रोडक्शन मोड में प्रोफाइल करें! रेल्स डेवलपमेंट वातावरण क्लासेज और व्यूज़ को ऑटो-रीलोड करता है, जो डेवलप करते समय उपयोगी होता है, लेकिन आपके प्रदर्शन नंबरों को मार डालेगा।