मुझे आवश्यकता के बजाय ऑटोलॉड का उपयोग कब करना चाहिए?


30

मैं जो कुछ समझता हूं requireउसका उपयोग कोड के बड़े हिस्से (कुछ मॉड्यूल की तरह) को लोड करने के लिए किया जाता है, हालांकि यह व्यक्तिगत कार्यों को भी लोड कर सकता है।

दूसरी तरफ ऑटोलॉड, केवल कार्यों को पंजीकृत करता है और लोडिंग को निष्पादन समय तक रोकता है।

मैंने हाल ही में एक लेख पढ़ा है जो autoloadविशेष रूप से उपयोग की वकालत करता है ।

autoloadसे बेहतर है require? इनमें से प्रत्येक के लिए कुछ विशिष्ट उपयोग के मामले क्या हैं?


3
@ गिल्स: एफडब्ल्यूआईडब्ल्यू, मैं आपके द्वारा हटाए गए टैग autoloadऔर requireइस प्रश्न से असहमत हूं । टैग जोड़ना librariesठीक था, लेकिन अब कोई भी खोज कर रहा है, टैग का उपयोग कर रहा है, इस बारे में प्रश्नों के लिए autoloadया requireइसे नहीं ढूंढेगा। वे दोनों महत्वपूर्ण Emacs-Lisp फ़ंक्शन हैं जो लोग खोज करेंगे। बहुत बुरा। और सोचें कि वास्तव में एक Emacs साइट के लिए कितना उपयोगी elispऔर libraries(esp। elisp) व्यवहार में होगा: वे Emacsland में ज्यादा अंतर नहीं करते हैं, मुझे डर है। (लेकिन नहीं, मैं उनके होने और उनका इस्तेमाल करने के खिलाफ नहीं हूं।)
ड्रू

@ मैं लागू मेटा चर्चा से जा रहा हूँ । अगर आपको लगता है कि यह सामान्य सिद्धांत यहां लागू नहीं होता है, तो कृपया इसे मेटा पर बढ़ाएं।
गिलेस एसओ-

1
@ गिल्स: हो गया । हां, मैंने उसे पढ़ा और समझ लिया कि शायद वही था जिसने आपको प्रेरित किया था। मैं सामान्य सिद्धांतों के बहुत से असहमत नहीं हूं। इसका मतलब यह नहीं है कि एक कंबल तरीके से उनका पीछा करना हमेशा टीआरटी है।
ड्रू

2
मैं ड्रू से सहमत हूं: चूंकि यह प्रश्न विशेष रूप से उपयोग के मामलों को अलग करने के बारे में है autoloadऔर requireमुझे लगता है कि वे टैग उचित हैं। वास्तव में, इस सवाल का लेबल लगाना [केवल] librariesअति-सामान्यीकरण है। मैं require"my-foobar-cfg" के लोडिंग को ट्रिगर करने के लिए एक उपयोग के लिए, जो कि, जैसा कि नाम से पता चलता है, इसमें केवल मेरा कॉन्फ़िगरेशन है, कि लाइब्रेरी।
पेपरिका

जवाबों:


28

autoloadके लिए एक विकल्प नहीं है require। आमतौर पर requireयह सुनिश्चित करने के लिए उपयोग किया जाता है कि एक निश्चित फ़ाइल लोड की गई है। autoloadदूसरी तरफ Emacs को एक संकेत देता है जिसमें फ़ाइल को तुरंत लोड किए बिना दिए गए फ़ंक्शन को ढूंढना है। केवल जब ऑटोलॉइड फ़ंक्शन कहा जाता है, तो संबंधित फ़ाइल लोड होती है।

मूल रूप से autoloadआपके साथ एक पूरी फ़ाइल को लोड करने में देरी हो सकती है जब आपको वास्तव में इसकी आवश्यकता होती है। यही कारण है कि (विशेष रूप से बड़े) पैकेज आमतौर पर अपने प्रवेश कार्यों को autoloadएस के रूप में परिभाषित करते हैं ।

यदि आप एक पैकेज के लिए भारी अनुकूलन करना चाहते हैं तो आमतौर पर आप भाग्य से बाहर हैं autoload। यदि आप अभी भी बचना चाहते हैं requireतो फ़ाइल के उपयोग से लोड होने के बाद तक अपने अनुकूलन को स्थगित कर सकते हैं eval-after-load

Emacs मैनुअल इस विषय को निम्नलिखित वर्गों में शामिल करता है:


2
शायद यह भी ध्यान देने योग्य है: autoload(अधिक या कम) कमांड परिभाषा प्रदान करने के बारे में है, इसलिए आप उन आदेशों का उपयोग कर सकते हैं। एक पुस्तकालय में सब कुछrequire बनाने के बारे में है (और पुस्तकालयों में पुस्तकालय की आवश्यकता होती है, पुनरावर्ती रूप से)। आदेशों की तुलना में Emacs में अधिक है। (लेकिन हाँ, एक बार जब एक ऑटोलॉइड कमांड का आह्वान किया जाता है, तो इसकी पूरी लाइब्रेरी लोड हो जाती है।)
ड्रू

4

Emacs इनिशियलाइज़ेशन के संदर्भ में, कोई विकल्प नहीं बनाते हैं। GitHub उपयोगकर्ता jwiegley के पास उत्कृष्ट उपयोग-पैकेज घोषणा मैक्रो है, जिसे आवश्यकता के अनुसार एक पैकेज या ऑटोलॉड की आवश्यकता होगी। मांग पर लोड किए जा सकने वाले पैकेजों की लोडिंग को रोकने के लिए सबसे अच्छा उपयोग किया जाता है।


3

यदि आप चाहते हैं कि एक निश्चित सुविधा लोड और उपलब्ध हो जब आपके Emacs शुरू हो गए हैं, तो उपयोग की आवश्यकता है, अन्यथा ऑटोलॉड का उपयोग करें। मैं व्यक्तिगत रूप से स्टार्टअप समय को बहुत अधिक महत्व देता हूं (मैं वास्तव में प्रति सप्ताह कई बार Emacs को पुनरारंभ करता हूं, कभी-कभी प्रति दिन कई बार), इसलिए मैं स्वीकार करता हूं कि Emacs को एक निश्चित फ़ंक्शन में थोड़ा समय लगेगा जब मुझे इसकी आवश्यकता होगी। इसलिए, इस बारे में सोचें कि Emacs शुरू होने के बाद आप क्या सीधे उपलब्ध होना चाहते हैं और जरूरत पड़ने पर क्या लोड किया जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.