रूबी आवेदन पर रूबी प्रोफाइलिंग के लिए बुनियादी रत्न सूची

यहां तक ​​कि रेल डेवलपर्स पर अधिकांश अनुभवी रूबी कभी-कभी लंबे विकास प्रक्रियाओं में उत्पन्न होने वाली कष्टप्रद गलतियों के बारे में भूल जाते हैं, जैसे कि n + 1 प्रश्न या कहीं से कुछ अप्रत्याशित प्रश्नों के साथ बहुत समय खो देते हैं।

उत्पादन से पहले इन सभी त्रुटियों से बचा नहीं जा सकता है, लेकिन कम से कम आप कोशिश कर सकते हैं :)

हां, यह बेहतर विकास प्रक्रियाओं के लिए लोकप्रिय रत्नों की भूल या नहीं की एक और सूची है।
चलो शुरू करते हैं।

1. बुलेट


बुलेट - n + 1 प्रश्नों के साथ लड़ने के लिए सबसे लोकप्रिय और सबसे आसान समाधानों में से एक।

यह रत्न आपको यह दिखाने के लिए अलग-अलग तरीके प्रदान करता है कि कुछ प्रश्न कुशल नहीं हैं। ब्राउज़र (कंसोल लॉग), विकास लॉग, आउटपुट फ़ाइल। मेरी पसंद सिर्फ एक विकास लॉग का उपयोग करना है क्योंकि यह इतना कष्टप्रद नहीं है (कुछ समस्याएं केवल समय में नहीं दिखाई दे रही हैं या वर्तमान वास्तुकला के साथ आसानी से हल नहीं हो सकती हैं)।

यह कैसे काम करता है : आपके पास, उदाहरण के लिए, कुछ मॉडल ( सेवाओं ) के लिए सूचकांक अनुरोध। और इस मॉडल के कई अलग-अलग संबंध हैं ( सेवा has_many समूह हैं ), उनके संबंध भी हैं .. ( समूह has_many उपयोगकर्ता , उपयोगकर्ताओं has_many लोगो , आदि)। और यह डेटा के अक्षम लोडिंग ( एन + 1 ) का कारण बन सकता है। आप logo_url दिखाना चाहते हैं और यह हर उपयोगकर्ता के लिए अनावश्यक प्रश्न बनाना शुरू कर देता है (कभी-कभी आप इसे तुरंत देखते हैं, कभी-कभी यह इतना स्पष्ट नहीं होता है)। अधिकांश मामलों में बुलेट आपके देव लॉग में अगली पंक्तियाँ फेंक देगी:

GET /api/services USE eager loading detected Service => [:groups] Add to your finder: :includes => [:groups] Call stack /home/projects/test_app_name/app/services/index.rb:18:in `perform' /home/projects/test_app_name/app/controllers/services_controller.rb:7:in `index' 

जैसा कि आप देख सकते हैं, यह अनुरोध दिखाता है, जो पाया गया था (उत्सुक लोड हो रहा है), मॉडल और क्या वास्तव में कई बार लोड किया गया। और कॉल स्टैक, बिल्कुल।

काफी अच्छी शुरुआत!



बुलेट अप्रयुक्त उत्सुक लोडिंग और काउंटर कैश पा सकते हैं। और आपको इसके किसी भी डिटेक्टर को निष्क्रिय करने की अनुमति देता है।

 # Each of these settings defaults to true # Detect N+1 queries Bullet.n_plus_one_query_enable = false # Detect eager-loaded associations which are not used Bullet.unused_eager_loading_enable = false # Detect unnecessary COUNT queries which could be avoided # with a counter_cache Bullet.counter_cache_enable = false 



अपनी परियोजनाओं में, मैं अप्रयुक्त उत्सुक लोडिंग प्रश्नों को अक्षम करना पसंद करता हूं, क्योंकि यह एक सामान्य स्थिति है जब एक लोडिंग मॉडल सेवा का कई स्थानों पर उपयोग किया जाता है, और विभिन्न स्थानों के लिए, आपको कुछ संबंधों को लोड करने की आवश्यकता नहीं होती है जो स्पष्ट रूप से कुछ अन्य स्थानों में आवश्यक है। और यह स्थिति अंत में बहुत कष्टप्रद है। आप बेहतर तरीके से कुछ जानकारी को लोड करते हैं और फिर उसे कहीं सही तरीके से लोड करना भूल जाते हैं।

मेरा विन्यास ( विकास में। आरबी ):

 config.after_initialize do Bullet.enable = true Bullet.rails_logger = true Bullet.unused_eager_loading_enable = false end 

अधिक जानकारी :


2. ActiveRecordQueryTrace (active_record_query_trace)


active_record_query_trace - वह रत्न जो लॉग इन करता है / सक्रिय रिकॉर्ड द्वारा निष्पादित सभी एसक्यूएल प्रश्नों का बैकट्रेस प्रदर्शित करता है

(मैंने सिर्फ उनके जीथूब पृष्ठ से विवरण के भाग की नकल की क्योंकि उन्हें आपके पास जानना आवश्यक है)

रेल के विकास कंसोल और लॉग में प्रत्येक क्वेरी के लिए बैकट्रेस प्रदर्शित करता है। आपको नीचे ट्रैक करने की अनुमति देता है जहां आपके एप्लिकेशन में प्रश्नों का निष्पादन किया जाता है। प्रदर्शन अनुकूलन के लिए उपयोगी है और यह पता लगाने के लिए कि बड़े आवेदन में परिवर्तन करते समय कहां से शुरू करें।

सक्षम होने पर, प्रत्येक क्वेरी को लॉग इन किया जाएगा:

 Started GET "/" for 172.19.0.1 at 2019-09-29 07:08:04 +0000 Processing by HomeController#index as HTML Users::User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 10014 LIMIT 1 Query Trace: app/controllers/concerns/user_stack.rb:44:in `peek' Clubs::Club Load (1.7ms) SELECT `clubs`.* FROM `clubs` WHERE `clubs`.`id` = 15 LIMIT 1 Query Trace: app/controllers/concerns/user_aware.rb:38:in `current_club' 

मेरी तरफ से कहना चाहता हूं, कि यह रत्न बहुत उपयोगी है जब आप प्रोजेक्ट पर काम करना शुरू से नहीं करते हैं और यह नहीं जान सकते कि सब कुछ कैसे काम कर रहा है (या सिर्फ सहकर्मियों की सुविधाओं के साथ), और कुछ क्वेरी कॉल आसानी से समझ में नहीं आती हैं। यह बहुत समय बचा सकता है, वास्तव में।

थोड़ा ध्यान दें:
हर ActiveRecord क्वेरी के लिए लॉग फ़ाइल में एक अतिरिक्त बैकट्रेस होगा। डिफ़ॉल्ट रूप से, यह 5 है, जो आपके लॉग को पूरी तरह से अपठनीय बनाने के लिए काफी बड़ा है।
लेकिन इसे नियंत्रित किया जा सकता है:

 ActiveRecordQueryTrace.lines = 1 # or 2, something not big 

अधिक जानकारी:


3. rails_panel


RailsPanel रेल विकास के लिए एक क्रोम एक्सटेंशन है जो आपकी विकास की कहानी को समाप्त करेगा। डेवलपर टूल पैनल में - ब्राउज़र में आपके रेल एप्लिकेशन अनुरोधों के बारे में सभी जानकारी रखें। डीबी / प्रतिपादन / कुल समय, पैरामीटर सूची, प्रदान किए गए विचारों और अधिक के लिए अंतर्दृष्टि प्रदान करता है।

इस एक्सटेंशन का उपयोग करने के लिए आपको अपने ऐप के Gemfile में meta_request रत्न जोड़ना होगा:

 group :development do gem 'meta_request' end 

Chrome वेबस्टोर से RailsPanel एक्सटेंशन इंस्टॉल करें। यह एक्सटेंशन इंस्टॉल करने का अनुशंसित तरीका है, क्योंकि यह प्रत्येक नए संस्करण पर ऑटो-अपडेट होगा।

यह सक्षम रेल_पेल रत्न / विस्तार का उदाहरण है:

छवि

अधिक जानकारी:


4. रैक-मिनी-प्रोफाइलर


मणि स्थापित करने और अपनी परियोजना को खोलने के बाद आप पृष्ठ पर बाएं ऊपरी कोने में पॉपअप देखेंगे (पुन: कॉन्फ़िगर किया जा सकता है):



इस पर क्लिक करने के बाद आप अधिक विस्तृत जानकारी देखेंगे:



जैसा कि आप देख सकते हैं, अधिक कुशल काम के लिए यहां बहुत उपयोगी जानकारी है। इसके अलावा, यह एसपीए अनुप्रयोगों के साथ काम करता है।

अधिक जानकारी:


5. newrelic / datadog


न्यू रेलिक एक प्रदर्शन प्रबंधन प्रणाली है , जिसे न्यू अवशेष, इंक द्वारा विकसित किया गया है। यह आपको अपने रेल या रूबी के प्रदर्शन के बारे में गहरी जानकारी प्रदान करता है क्योंकि यह उत्पादन में चलता है और उन्हें newrelic.com पर पहुंचाता है जहां आप वास्तविक समय में उनकी निगरानी कर सकते हैं। (यह भी है कि उनके पास कोई खाता नहीं है)

एक विकल्प के रूप में डाटाडॉग भी एक बहुत अच्छा विकल्प है। वे नई Relic जैसी ही कार्यक्षमता प्रदान करते हैं। बस उनकी संभावनाओं, उपयोगकर्ता इंटरफ़ेस, कीमतों की जांच करें और जो भी आपको पसंद हो उसे चुनें।

अधिक जानकारी:


पढ़ने के लिए धन्यवाद!

Source: https://habr.com/ru/post/hi482330/


All Articles