रूबी पर रूबी में नियंत्रक कार्रवाई को प्रोफ़ाइल करने का सबसे अच्छा तरीका क्या है। वर्तमान में मैं puts Time.now
में फेंकने की ब्रूट-फोर्स विधि का उपयोग कर रहा हूं जो मुझे लगता है कि एक बाधा होगी। लेकिन वास्तव में, वास्तव में गंदा लगता है। वहां एक बेहतर तरीका हो गया है।प्रोफ़ाइल एक रेल नियंत्रक कार्रवाई
उत्तर
बेंचमार्क मानक पुस्तकालय और रेल (इकाई, कार्यात्मक, एकीकरण) में उपलब्ध विभिन्न परीक्षणों का उपयोग करें। तो यहाँ हम सिर्फ बेंचमार्क पुस्तकालय के माध्यम से कुछ 100 बार, यह समय करते हैं, और सुनिश्चित करें कि यह समय की SOME_LIMIT राशि से कम ले लिया
def test_do_something
elapsed_time = Benchmark.realtime do
100.downto(1) do |index|
# do something here
end
end
assert elapsed_time < SOME_LIMIT
end
: यहाँ एक उदाहरण है।
आप इन लिंक को उपयोगी भी पा सकते हैं: Benchmark.realtime reference और Test::Unit reference। इसके अलावा, अगर आप 'पुस्तक पढ़ने' की बात में हैं, तो मैंने Agile Web Development with Rails से उदाहरण के लिए विचार उठाया, जो विभिन्न परीक्षण प्रकारों और प्रदर्शन परीक्षण पर थोड़ा सा बात करता है।
आप FiveRuns TuneUp सेवा एक कोशिश देने के लिए चाहते हो सकता है देख रहा है अच्छी तरह से लायक है, के रूप में यह वास्तव में नहीं बल्कि प्रभावशाली है रूपरेखा पर एक Railscast है। अस्वीकरण: मैं किसी भी तरह से पांचRuns से जुड़ा नहीं हूं, मैंने अभी इस सेवा को आजमाया है।
ट्यूनअप एक नि: शुल्क सेवा है जहां आप एक प्लगइन डाउनलोड करते हैं और जब आप अपना आवेदन चलाते हैं तो यह स्क्रीन के शीर्ष पर एक पैनल इंजेक्ट करता है जिसे विस्तृत प्रदर्शन मीट्रिक प्रदर्शित करने के लिए विस्तारित किया जा सकता है।
यह आपको कुछ अच्छे ग्राफ देता है, जिसमें यह दिखाता है कि मॉडल, व्यू और कंट्रोलर में कितना समय व्यतीत होता है। आप व्यक्तिगत एसक्यूएल प्रश्नों को देखने के लिए भी नीचे ड्रिल कर सकते हैं कि ActiveRecord निष्पादन कर रहा है यदि आपको आवश्यकता है और यह आपको किसी अन्य क्लिक के साथ अंतर्निहित डेटाबेस स्कीमा दिखा सकता है।
अंत में, आप सामुदायिक प्रदर्शन विश्लेषण और सलाह के लिए वैकल्पिक रूप से अपने प्रोफाइलिंग डेटा को पांचRuns साइट पर अपलोड कर सकते हैं।
लिंक टूटा हुआ है (DNS समाप्त हो गया)। – mrzasa
मैंने थोड़ी देर पहले इस तकनीक को उठाया और इसे काफी आसान पाया है।
जब यह जगह हो, तो आप नियंत्रक को मारने वाले किसी भी URL पर ?profile=true
जोड़ सकते हैं। आपकी कार्रवाई सामान्य रूप से चलती है, लेकिन ब्राउज़र में प्रस्तुत पृष्ठ वितरित करने के बजाय, यह एक विस्तृत, अच्छी तरह से स्वरूपित रूबी-प्रोफेसर पृष्ठ भेजेगा जो दिखाता है कि आपकी कार्रवाई ने अपना समय कहां बिताया था।
पहले, अपने Gemfile को माणिक प्रोफेसर जोड़ने के लिए, शायद विकास समूह में:
group :development do
gem "ruby-prof"
end
फिर अपने ApplicationController के लिए एक around filter जोड़ें:
around_filter :profile if Rails.env == 'development'
def profile
if params[:profile] && result = RubyProf.profile { yield }
out = StringIO.new
RubyProf::GraphHtmlPrinter.new(result).print out, :min_percent => 0
self.response_body = out.string
else
yield
end
end
माणिक प्रोफेसर उत्पादन पढ़ना एक है एक कला का थोड़ा सा, लेकिन मैं इसे एक अभ्यास के रूप में छोड़ दूंगा।
अतिरिक्त नोट ScottJShea द्वारा: आप माप प्रकार जगह इस बदलना चाहते हैं: आवेदन नियंत्रक की प्रोफाइल विधि में
RubyProf.measure_mode = RubyProf::GC_TIME #example
if
से पहले। आप ruby-prof page पर उपलब्ध मापों की एक सूची पा सकते हैं। इस लेखन के अनुसार memory
और allocations
डेटा स्ट्रीम दूषित प्रतीत होते हैं (see defect)।
किसी के लिए यह भी नहीं कह रहा है, आपको अपने एप्लिकेशन नियंत्रक के शीर्ष पर "रूबी-प्रोफेसर" की आवश्यकता भी है। इसके अलावा, मेरे लिए, मुझे "self.response_body =" को "self.response.body =" में बदलना पड़ा (रेल 2.3.14) – Pavling
उन बदलावों के लिए धन्यवाद। रेल 3.0 में 'प्रतिक्रिया_बीआई' जोड़ा गया था। और यदि आप बंडलर का उपयोग कर रहे हैं, तो आपको रूबी-प्रोफेसर की आवश्यकता नहीं होनी चाहिए, लेकिन मुझे खुशी है कि यह तकनीक रेल के पुराने संस्करण के लिए काफी अनुकूल थी। –
टिप के लिए धन्यवाद, पैवलिंग। मैं रेल 2.3.14 का उपयोग कर रहा हूं, और इसे काम करने में परेशानी हो रही है। मुझे ग्राफ_html_printer.rb में "तर्कों की गलत संख्या (1 के लिए 0)" मिलती है: 98: 'full_name' में, इससे कोई फर्क नहीं पड़ता कि रूबी-प्रोफेसर का कौन सा संस्करण इंस्टॉल है। कोई विचार क्या हो सकता है? – jsarma
इस रेल 4.2.6 में काम करता है:
o=OpenStruct.new(logger: Rails.logger)
o.extend ActiveSupport::Benchmarkable
o.benchmark 'name' do
# ... your code ...
end
- 1. नियंत्रक कार्रवाई
- 2. नियंत्रक कार्रवाई
- 3. एक नियंत्रक कार्रवाई
- 4. रेल 3.0: नियंत्रक को नई कार्रवाई जोड़ना
- 5. क्यों रेल नियंत्रक कार्रवाई विधि पैरामीटर
- 6. रेल: कस्टम नियंत्रक कार्रवाई के लिए मार्ग
- 7. नियंत्रक कार्रवाई
- 8. एक रेल इंजन नियंत्रक कार्रवाई को ओवरराइड करें
- 9. रेल कैशिंग: एक कार्रवाई
- 10. परीक्षण नियंत्रक कार्रवाई User.Identity.Name
- 11. बाहर नियंत्रक कार्रवाई Symfony2
- 12. रेल नियंत्रक
- 13. मैं नियंत्रक कार्रवाई
- 14. एमवीसी Jquery नियंत्रक कार्रवाई
- 15. रेल नियंत्रक
- 16. रेल एक नियंत्रक में एक मॉडल
- 17. रेल पर रूबी 3 link_to नियंत्रक और कार्रवाई
- 18. रेल: नियंत्रक/कार्रवाई को देखने में कैसे निर्धारित करें
- 19. एक HTTP नियंत्रक के बिना किसी अन्य नियंत्रक कार्रवाई से एक नियंत्रक कार्रवाई चलाने का सही तरीका क्या है?
- 20. रेल नियंत्रक बिना नियंत्रक
- 21. Yii नियंत्रक कार्रवाई इकाई सेलेनियम
- 22. रेल: मैं नियंत्रक/क्रिया
- 23. रेल नियंत्रक
- 24. एक प्रोफ़ाइल
- 25. कंटेनर देखें नियंत्रक - सूचित कार्रवाई की मूल
- 26. नियंत्रक में कस्टम गुण या कार्रवाई
- 27. एएसपी.नेट एमवीसी - नियंत्रक कोड से वर्तमान कार्रवाई?
- 28. यह निर्धारित करें कि नियंत्रक कार्रवाई को
- 29. दृश्य के बिना एमवीसी नियंत्रक कार्रवाई चलाएं?
- 30. पृष्ठभूमि कार्यकर्ता ब्लॉकिंग एमवीसी नियंत्रक कार्रवाई
इस उत्तर आपको बताता है कि सुनिश्चित करें कि आपके कार्रवाई जल्दी से पर्याप्त चल रहा है बनाने के लिए। यह आपको प्रोफाइलिंग में मदद नहीं करता है, जो यह पता लगा रहा है कि कार्रवाई का कौन सा हिस्सा सबसे अधिक समय ले रहा है। –