मैंने कुछ लोगों से सुना है जो बड़े रेल विचारों को छोटे भागों में विभाजित करने के बारे में चिंतित हैं:आंशिक रूप से प्रस्तुत करने में वास्तव में कितना समय लगता है? क्या आंशिक कॉल करने का प्रदर्शन प्रभाव कोड पठनीयता में लाभ से अधिक होगा?
मैंने इनलाइन रेंडरिंग की तुलना में सरल आंशिक प्रतिपादन की तुलना में एक उदाहरण देने के लिए कुछ संख्याएँ चलाईं, इसलिए हम बाद में ट्रेडऑफ़ पर चर्चा कर सकते हैं। यह वह कोड है जिसका उपयोग मैं एक नए रेल ऐप में बेंचमार्क करने के लिए करता था (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>
और परिणाम (2013 15 ”रेटिना मैकबुक प्रो पर रूबी 2.1 और रेल 4.0.2 का उपयोग करके):
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 जेनरेशन, रेल हेल्पर्स, और ब्राउज़र रेंडरिंग टाइम जैसी चीज़ें भी हों तो यह नोटिस करना मुश्किल होगा।
गति ही सब कुछ नहीं है
यदि आंशिक रूप से प्रस्तुत करने का प्रदर्शन बहुत खराब होता, तो भी शायद मैं विशाल विचारों को अलग करने का निर्णय लेता।
एक मुहावरा है, मेक इट वर्क, मेक इट राइट, मेक इट फास्ट। जब आप किसी ऐसे दृश्य को ठीक करने का प्रयास कर रहे हैं जो बहुत बड़ा है, तो आप "इसे काम करें" मोड से बाहर निकलने का प्रयास कर रहे हैं, और आप केवल "इसे तेज़ करें" पर नहीं जा सकते। आप अपने कोड को कम रखरखाव योग्य बना देंगे, और आप रिफैक्टरिंग के कुछ अवसर चूक सकते हैं, जिससे कैशिंग के अवसर पैदा हो सकते हैं, जिससे और भी बड़े प्रदर्शन लाभ हो सकते हैं।
जब तक आप माप नहीं लेंगे तब तक आपको पता नहीं चलेगा
आपको मेरे नंबरों पर विश्वास करने की जरूरत नहीं है। मैं अनुशंसा करता हूं कि आपने नहीं किया! रूबी की बेंचमार्क लाइब्रेरी आपको अपने स्वयं के बेंचमार्क चलाने के लिए कुछ सरल उपकरण देती है। आपके पूर्ण स्टैक को प्रोफाइल करने के लिए टूल भी हैं, जैसे न्यू रेलिक और मिनीप्रोफाइलर। मैं इन तीनों का नियमित रूप से अपने दैनिक कार्य में उपयोग करता हूं।
जब आप प्रोफाइल करते हैं, तो हमेशा प्रोडक्शन मोड में प्रोफाइल करें! रेल विकास पर्यावरण कक्षाओं और विचारों को ऑटो-रीलोड करता है, जो विकास करते समय उपयोगी होता है, लेकिन आपकी प्रदर्शन संख्या को मार देगा।