मैंने उस गाइड का थोड़ा सा लिखा।
आप निश्चित रूप से उत्पादन में संकलित नहीं रहना चाहते हैं।
जब आप संकलन करते हैं, तो यही होता है:
फ़ाइल के लिए प्रत्येक अनुरोध / संपत्ति Sprockets को पारित किया है। कैश के लिए (आमतौर पर फाइलसिस्टम) जो भी रेल का उपयोग कर रहा है, उसमें से प्रत्येक संपत्ति के लिए पहले अनुरोध पर इसे संकलित और कैश किया जाता है।
बाद के अनुरोधों पर Sprockets अनुरोध प्राप्त करता है और फ़िंगरप्रिंट किए गए फ़ाइल नाम को देखना पड़ता है, यह जांचें कि फ़ाइल (छवि) या फ़ाइलें (css और js) जो कि संपत्ति बनाती हैं, संशोधित नहीं हुई थीं, और फिर अगर कोई कैश्ड संस्करण है तो सेवा करें।
यह संपत्ति फ़ोल्डर में और प्लगइन्स द्वारा उपयोग किए जाने वाले किसी भी विक्रेता / संपत्ति फ़ोल्डर में सब कुछ है ।
यह ओवरहेड का एक बहुत है, ईमानदार होने के लिए, कोड गति के लिए अनुकूलित नहीं है।
यह इस बात पर प्रभाव डालेगा कि ग्राहक के पास कितनी तेज संपत्ति तार पर जाती है, और आपकी साइट के पृष्ठ लोड समय को नकारात्मक रूप से प्रभावित करेगी।
डिफ़ॉल्ट के साथ तुलना करें:
जब संपत्तियां प्री-कंपाइल की जाती हैं और संकलन बंद हो जाता है, तो संपत्तियां संकलित की जाती हैं और उन्हें फिंगरप्रिंट किया जाता है public/assets
। Sprockets, रेल के लिए फ़ाइलनाम के लिए सादे की एक मैपिंग तालिका लौटाता है, और Rails फाइल सिस्टम को यह लिखता है। मैनिफ़ेस्ट फ़ाइल (RML 3 में RML या RAIL 4 में यादृच्छिक नाम के साथ JSON) को स्टार्टअप पर रेल द्वारा मेमोरी में लोड किया जाता है और एसेट हेल्पर विधियों द्वारा उपयोग के लिए कैश किया जाता है।
यह सही फिंगरप्रिंट वाली परिसंपत्तियों के साथ पृष्ठों की पीढ़ी को बहुत तेज़ बनाता है, और फ़ाइलों की सेवा स्वयं वेब-सर्वर-से-द-फाइलसिस्टम तेजी से होती है। दोनों नाटकीय रूप से लाइव संकलन से अधिक तेज हैं।
पाइपलाइन और फिंगरप्रिंटिंग का अधिकतम लाभ प्राप्त करने के लिए, आपको अपने वेब सर्वर पर भविष्य के हेडर सेट करने की आवश्यकता है, और js और css फ़ाइलों के लिए gzip कम्प्रेशन को सक्षम करें। Sprockets संपत्ति के gzipped संस्करण लिखता है जिसे आप अपने सर्वर का उपयोग करने के लिए सेट कर सकते हैं, प्रत्येक अनुरोध के लिए ऐसा करने की आवश्यकता को हटा सकते हैं।
इससे क्लाइंट को जितनी जल्दी हो सके उतनी तेजी से संपत्ति मिल जाती है, और संभव है कि सबसे छोटे आकार में, पेजों के क्लाइंट-साइड डिस्प्ले को तेज किया जाए, और दूर के हेडर के साथ रिक्वेस्ट को कम किया जाए।
तो अगर आप लाइव संकलन कर रहे हैं:
- बहुत धीमी गति से
- संपीड़न में कमी
- प्रभाव पृष्ठों के समय प्रस्तुत करना होगा
बनाम
- जितनी जल्दी हो सके
- दबा हुआ
- सर्वर (वैकल्पिक रूप से) से अधिक दबाव हटाइए।
- पृष्ठों का रेंडर समय कम से कम करें।
संपादित करें: (टिप्पणी का अनुसरण करने का उत्तर)
पहले अनुरोध पर पाइपलाइन को बदला जा सकता था लेकिन ऐसा करने में कुछ बड़ी बाधाएँ हैं। पहला यह है कि फ़िंगरप्रिंट किए गए नामों के लिए लुकअप तालिका होनी चाहिए या सहायक विधियाँ बहुत धीमी हैं। एक संकलित-ऑन-डिमांड सेनेरियो के तहत लुकअप टेबल पर अपील करने के लिए कुछ तरीका होना चाहिए क्योंकि प्रत्येक नई संपत्ति संकलित या अनुरोध की जाती है।
इसके अलावा, किसी को अज्ञात परिसंपत्तियों के लिए धीमी परिसंपत्ति वितरण की कीमत का भुगतान तब तक करना होगा जब तक कि सभी संपत्तियां संकलित और जगह पर न हों।
डिफ़ॉल्ट, जहां एक बार में सब कुछ संकलित करने की कीमत का भुगतान ऑफ-लाइन किया जाता है, सार्वजनिक आगंतुकों को प्रभावित नहीं करता है और यह सुनिश्चित करता है कि सब कुछ जीवित रहने से पहले काम करता है।
डील-ब्रेकर यह है कि यह उत्पादन प्रणालियों में बहुत अधिक जटिलता जोड़ता है।
[संपादित करें, जून २०१५] यदि आप इसे पढ़ रहे हैं क्योंकि आप एक तैनाती के दौरान धीमे संकलन समय के लिए एक समाधान की तलाश कर रहे हैं, तो आप स्थानीय स्तर पर परिसंपत्तियों को तैयार करने पर विचार कर सकते हैं। इस पर जानकारी परिसंपत्ति पाइपलाइन गाइड में है । यह आपको स्थानीय रूप से केवल तभी बदलने की अनुमति देता है, जब कोई परिवर्तन होता है, यह प्रतिबद्ध करता है, और फिर बिना किसी पूर्व-गति के चरण के साथ तेजी से तैनात होता है।