2015-01-08 4 views
6

मुझे यह जानने की जरूरत है कि eager_load को false गैर उत्पादन वातावरण में क्यों चुना जाता है? मैंने जिन तर्कों के बारे में सुना है उनमें से एक का कहना है कि eager_load मेजर में अधिकांश रेल और एप्लिकेशन को उत्सुक लोड करता है। इसलिए व्यक्तिगत परीक्षण के लिए eager_load का उपयोग करके यह धीमा हो जाता है। हालांकि यह कुछ प्रश्न उठाता है जैसे रेल और एप्लिकेशन से संबंधित कोड लोड किए बिना परीक्षण कैसे चलता है? रेल और एप्लिकेशन से संबंधित कोड क्या है जो उत्सुक हो रहा है?eager_load = true का क्या प्रभाव है?

ActiveSupport ActionDispatch ActiveModel ActionView ActionController ActiveRecord ActionMailer Jquery::Rails::Engine MyApp::Application

इन कक्षाओं और उनके उपवर्गों उत्सुक जा रहा है के सभी लोड किए गए हैं: config.eager_load_namespaces निम्नलिखित वर्गों देता है?

विकास या परीक्षण वातावरण में eager_load = false का उपयोग करने के स्पष्ट नुकसान क्या हैं?

उत्तर

3

हालांकि यह कुछ प्रश्न उठाता है जैसे रेल और एप्लिकेशन से संबंधित कोड लोड किए बिना परीक्षण कैसे चलता है?

परीक्षण मांग पर आवश्यक कोड लोड करता है क्योंकि यह इसका उपयोग करने का प्रयास करता है। तो उदाहरण के लिए कुछ कोड लाइन पर परीक्षण Active::Record कक्षा का उपयोग करना चाहता है। eager_load पर false पर सेट करें इस कक्षा को अभी तक आवश्यक नहीं है, जो एक वेनिला रूबी प्रोग्राम पर अपवाद का कारण बन जाएगा। रेल परियोजना के भीतर हालांकि परीक्षण के लिए परीक्षण पर Active::Record की आवश्यकता होगी। तो अंत में एक एकल परीक्षण तेजी से चलता है, क्योंकि केवल आवश्यक कोड भागों की आवश्यकता होती है।

इस तकनीक eager_loading के विपरीत है और यह autoloading

क्या रेल और आवेदन संबंधित है कोड है कि उत्सुक लोड किया जा रहा है कहा जाता है?

https://github.com/rails/rails देखें। यह कर्मचारियों का एक गुच्छा है।

क्या ये सभी कक्षाएं और उनके उप-वर्ग उत्सुक हैं?

हाँ

eager_load का उपयोग करने का स्पष्ट नुकसान = में विकास या परीक्षण वातावरण झूठी क्या हैं?

विकास वातावरण में यह तेजी से बूट समय प्राप्त करता है (वसंत जैसे प्रीलोडर का उपयोग करते समय उपेक्षित) के रूप में यह एक लाभ और सर्वोत्तम अभ्यास है। शायद cache_classes=false विकल्प के साथ परिवर्तनों को पुनः लोड करने के लिए भी आसान है, क्योंकि आपके पास पुनः लोड करने के लिए कम है (केवल एक धारणा)।

परीक्षण वातावरण में कभी-कभी आप eager_loading=false का उपयोग नहीं कर सकते हैं यदि आप कुछ कोड मीट्रिक कोड कवरेज या स्टाइल चेक करने का अनुमान लगाना चाहते हैं। जैसे simple_cov आपको परीक्षण शुरू करने से पहले सभी कोड eager_load करने की आवश्यकता है।

और सामान्य रूप से ऐसा हो सकता है कि कुछ लिबररी का उपयोग eager_loading के साथ नहीं किया जा सकता क्योंकि यह कक्षा को लोड करने पर कुछ प्रारंभिकता है जो इसे पहले से ही उपलब्ध कराने से पहले उपलब्ध होना चाहिए। हालांकि यह एक पिछला मामला है, यह कहकर, यह हमारे साथ neo4j.rb मणि

+0

रूबी का ऑटोलोड लोड कोड से उपयोग करने के लिए काफी अलग है विकास में (हालांकि यह फ्रेमवर्क कोड के लिए प्रयोग किया जाता है) –

0

उत्सुक भार स्टार्टअप पर आपके सभी ऐप को लोड करता है जो स्टार्टअप समय बढ़ाता है।

उदाहरण के लिए यदि आप सिर्फ एक मॉडल के व्यवहार की जांच करने तो आप, नियंत्रक आदि भले ही आप उनमें से केवल एक

उपयोग करना चाहता था लोड करने के लिए सभी मॉडलों के लिए इंतजार करना पड़ रेल सांत्वना लोड करना चाहते हैं
+0

यह सही है, हालांकि यह लेखकों के प्रश्नों को पूरी तरह से संबोधित नहीं करता है –

संबंधित मुद्दे