2011-04-21 19 views
49

रेल 3.0 एक गंभीर कुत्ता है। मैं 5 साल तक रेल पर विकास कर रहा हूं, और स्टार्टअप के लिए यह कभी धीमा नहीं रहा है। विशेष रूप से, परीक्षण एसएसडी के साथ शीर्ष पायदान मैकबुक पर बूटस्ट्रैप के लिए हमेशा के लिए लेते हैं, इसलिए पुनरावृत्ति चक्र गंभीर रूप से पीड़ित होते हैं। हर बार जब मैं एक परीक्षण शुरू करता हूं तो मुझे एक लेख पढ़ने की जरूरत है। यह पागल है और "चुस्त" नहीं है। मैं संकलन भी कर सकता हूं।रेल बूटस्ट्रैप इतनी धीमी क्यों है और मैं इसके बारे में क्या कर सकता हूं?

मेरे पास अंततः रेल से आगे बढ़ने के लिए यह प्रमुख प्रेरणा है - जब मुझे मौका मिलता है।

यदि किसी के पास कोई समाधान है, तो कृपया इसे पेश करें। मुझे पता है कि इस समस्या से कई लोग पीड़ित हैं।

मैं rspec का उपयोग नहीं करता - मुझे पता है कि rspec के परीक्षणों में मदद करने के लिए एक समाधान है।

मैं fast_require और रेल-देव-बूस्ट का उपयोग कर रहा हूं, लेकिन इसका कोई महत्वपूर्ण प्रभाव नहीं है।

मैं रूबी 1.9.2 पर हूं और होने की आवश्यकता है। एक बहुत ही सरल नियंत्रक परीक्षण में 4 जीबी रैम और एसएसडी के साथ दोहरी कोर 2.13 गीगा मैकबुक एयर पर 26 सेकंड लगते हैं! क्यूं कर!?

+2

वही बात यहाँ। एक चीज जिसे आप देखना चाहते हैं वह perftools.rb है। https://github.com/tmm1/perftools.rb –

+0

ऐसा लगता है कि [रूबी 1.9.3 लोडिंग समय में महत्वपूर्ण वृद्धि हो रही है] (http: //www.rubyinside।com/माणिक 1-9-3-तेजी से लोडिंग-बार-आवश्यकता-4927.html)। – hammar

+3

अपनी स्वीकृति रेटिंग पर काम करने का प्रयास करें: पी –

उत्तर

8

Yehuda Katz के शब्दों में:

कुछ चीजें सी की आवश्यकता है कि कोड 1.9 कि धीमी गति से बातें करता हैं नीचे। ऐसा एक उदाहरण यह सुनिश्चित करने के लिए $ LOAD_PATH को फिर से जांच रहा है कि यह सभी आवश्यकतानुसार विस्तारित है। यह ऐसा कुछ है जिसे रूबी-कोर द्वारा संबोधित किया जाना चाहिए। यदि पहले से कोई नहीं है तो मैं रेडमाइन पर टिकट खोलूंगा।

मुझे भी इस समस्या का सामना करना पड़ रहा है और $ LOAD_PATH समस्या संभावित कारण की तरह दिखती है। आइए आशा करते हैं कि यह जल्द ही तय हो जाएगा।

तो यह मुझे लगता है जैसे आपको केवल इसके माध्यम से पीड़ित होने की आवश्यकता होगी और उम्मीद है कि यह रूबी 1.9.3 में तय की जाएगी।

+0

अच्छा खोज। संदर्भ: http://groups.google.com/group/rubyonrails-core/browse_thread/thread/88519ef5a53088a1/c01ba447c6dc0de7?lnk=raot –

+0

ऐसा लगता है कि यह प्रासंगिक हो सकता है (मुझे एहसास है कि प्रतिबद्धता लगभग एक वर्ष पुरानी है, लेकिन मैं मान लें कि यह 1.9.2 में नहीं है)। https://github.com/ruby/ruby/commit/2db572514cd9f5cc8957ab8f35f39650bb243ea7 यह देखने के लिए रूबी के "किनारे" निर्माण को देखना दिलचस्प होगा कि समस्या हल हो गई है या नहीं। – bratsche

+0

आरवीएम के साथ मैंने रूबी-1.9.2-पी 180 और रूबी-हेड के बीच मेरी वर्तमान परियोजना के लिए "रेक मार्ग" पर एक त्वरित तुलना की और पाया कि रूबी-हेड लगभग 16% तेज था। हालांकि यह बहुत वैज्ञानिक नहीं था (और मैंने 1.8.7 के साथ परीक्षण नहीं किया है क्योंकि यह परियोजना 1.8.7 पर काम नहीं करेगी), लेकिन शायद यह अभी भी दिलचस्प है। – bratsche

18

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

+1

केवल आरएसपीईसी के लिए स्पार्क नहीं है? मैं परीक्षण :: इकाई और कंधे का उपयोग करता हूं। इसके अलावा - परीक्षण में सुधार मदद करता है, लेकिन यह वास्तव में मौलिक समस्या को हल नहीं करता है। –

+0

[परीक्षण :: इकाई के लिए एक संस्करण] है (https://github.com/timcharper/spork-testunit)। मैं मानता हूं कि यह एक पूर्ण समाधान नहीं है, लेकिन यह इस उपयोग के मामले में बहुत मदद करता है। – hammar

+0

स्पार्क टेस्ट :: यूनिट के साथ भी काम करता है। बस याद रखें कि स्पॉर्क्स का उपयोग करके कुछ "गॉथचास" है, मैंने लिंक की एक सूची संकलित की है जो आपको उन पर काबू पाने में मदद करेगी: https://gist.github.com/1118210 – arikfr

3

यह 'आवश्यकता' बयान लिखने के लिए भुगतान करने का एक व्यापारिक तरीका है। रेल सही काम करने की कोशिश कर रहे हैं, और इसलिए सब कुछ preloads। मूल रूप से आप दो समाधान है:

  1. उपयोग पहले से लोड होने पुस्तकालय है कि रेल प्रक्रिया (उदाहरण के लिए spork)
  2. अपने परीक्षणों में रेल का उपयोग न करें, निकालने डोमेन है कि आप रेल के बाहर का परीक्षण कर सकते spawns (सभी नष्ट सॉफ्टवेयर के बारे में एक स्क्रीनकास्ट है)। यह तक उबलता है, जब संभव हो तो रेल लोडिंग छोड़ देता है।

सभी ने कहा कि मैं समाधान 1 का उपयोग कर रहा हूं)। और होने मेरी सूट आधे सेकंड के तहत चलाए (केवल 70 परीक्षण, लेकिन रेल लोड करने के लिए के लिए waitng कम है)

7
समस्या

, की आवश्यकता होती है की सुस्ती होने लगते हैं आप

CPUPROFILE=/tmp/my_app_profile RUBYOPT="-r`gem which perftools | tail -1`" ruby -I lib:test test/unit/user_test.rb 
pprof.rb --text /tmp/my_app_profile 
जैसे कुछ न्यूनतम रूपरेखा करते हैं

आपको शायद आवश्यकता में बहुत समय व्यतीत करना चाहिए (दूसरा विकल्प इसे लोड करने में बहुत कुछ देख रहा है लेकिन मुझे लगता है कि आप पहले ही जानते हैं कि यह मुद्दा नहीं है)।

मेरे बॉक्स में (मैकबुक प्रो 2011 13 पर ओएसएक्स, कोर i5 और कताई हार्ड ड्राइव के साथ), समय 5 सेकंड के क्रम में अधिक है, जो अभी भी बहुत अधिक है लेकिन रास्ता अधिक सहनशील है, तो शायद इसके लायक जांच कर मतभेद है।

कितने जवाहरात आप अपने सिस्टम में इंस्टॉल किया है? हाँ, यह rediculously धीमी है तुम्हारे बिना बंडलर/rubygems परीक्षण/बूटिंग चलाने का भी प्रयास है?

+0

मैं बंडलर और रूबीगेम्स के बिना परीक्षण कैसे चला सकता हूं? वे आवेदन और सभी परीक्षणों की निर्भरता हैं। –

+0

आपको विक्रेता में अपने रत्नों को अनपैक करने में सक्षम होना चाहिए/(बंडलर को वैश्विक रूबीगेम्स लुकअप को बाईपास करना चाहिए)। यदि आप किसी भी मामले में बंडलर की तुलना में रत्न को हटाते हैं तो इसका उपयोग नहीं किया जाना चाहिए। अंत में आप config/boot.rb में लाइनों को टिप्पणी कर सकते हैं जो इसे लोड/सेटअप कहते हैं, और कस्टम आवश्यकता के साथ उन्हें प्रतिस्थापित करें। देर से उत्तर के लिए क्षमा करें। – riffraff

+0

दिलचस्प दृष्टिकोण। मैंने "बंडल - पैथ विक्रेता" के बाद "बंडल पैकेज" किया है, हालांकि boot.rb से प्रासंगिक लाइनों को हटाकर पैक किए गए रत्नों को लोड करने में विफल रहता है। मैं अपने जेमफाइल को हटाना नहीं चाहता क्योंकि मैं बंडलर का उपयोग करना चाहता हूं। –

3

। ओह प्रतीक्षा करें, mvn install में मेरी जावा दिनों में कभी भी एक मिनट से भी कम समय नहीं लगा। mvn clean install के साथ यह पागल धीमा था। शुभ दिन, याद रखना हमेशा मेरी आत्मा को प्राप्त करता है।

+1 spork, @hammar के रूप में पता चलता है

ऑटो शुरू करने के लिए परीक्षण guardhttps://github.com/guard/guard-test के साथ गठबंधन है और आप एक हत्यारा कॉम्बो है। यह अपने आप खिड़की और/या स्क्रीन में चल रहा है और देखने के लिए अपनी उत्पादकता जवाब देने के लिए :)

अपडेट/इसके ऊपर जाना:

अनुकूलन युक्ति: डाल application.rb में एक to_s रास्तों पर, autoload_paths को जोड़ा गया, मैन्युअल रूप से इसे बार-बार रनटाइम करने के लिए इसे टालना। कुछ सेकंड बंद हो सकता है ...

2

जैसा कि @ user185374 कहता है, आप require के व्यापार का भुगतान कर रहे हैं।

मैं एक दिलचस्प resource पर ठोकर खाई Rails का उपयोग किए बिना Rails परीक्षण तेजी लाने के लिए ... उदाहरण Rspec साथ दिया जाता है, लेकिन आप तर्क होगा।

यहाँ कैसे लेखक का सार है:

मैं तुम्हें नहीं बता सकता कि यह 2 सेकंड के भीतर चलाने के लिए मेरी 150 चश्मा के सभी मतलब है। मुझे लगता है कि यह एक अतिरिक्त काम का थोड़ा सा है, लेकिन यह प्रयास के लायक है!

एक अन्य समाधान मैं सिर्फ पाया: Hydra समानांतर परीक्षण:

http://logicalfriday.com/2011/05/18/faster-rails-tests-with-hydra/

+0

क्या आप लिंक भूल गए थे? –

+0

अरे, मैंने कुछ गड़बड़ कर दिया :) सही – apneadiving

2

यह एक ज्ञात समस्या है, खासकर रुबी 1.9.2 पर।

अच्छी खबर यह है कि रुबी स्टार्ट-अप (require) को तेज करने के लिए a patch है।

0

अच्छी खबर। रुबी 1.9.3 में अपग्रेड करने के बाद रेल एक सहनशील समय के भीतर शुरू होता है।

0

zeus gem देखें।

इससे चीजों को काफी महत्वपूर्ण बनाना चाहिए।

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