TL; DR मेरे पास इतनी बड़ी मात्रा में पैकेज हैं कि यह मेरे स्टार्टअप समय को नुकसान पहुंचा रहा है। यदि आपको विश्वास नहीं है कि मामला हो सकता है, तो पढ़ें।
मेरा Emacs स्टार्टअप का समय काफी छोटा है। मैं उपयोग नहीं करता use-package
, मैं बस हुक के टन सेट और autoload
इतना है कि लगभग सभी कोड स्थगित है। वास्तव में यह पूरी चीज आमतौर पर आधे सेकंड से भी कम समय में भरी हुई है, इसके बावजूद यह एक पागल गड़बड़ की तरह लग रहा है।
हालांकि, समय के साथ मैंने देखा कि मेरे स्टार्टअप समय को न्यूनतम रूप से धीमा, बेवजह मिलता है। यह अंततः उस बिंदु पर पहुंच गया है जहां स्टार्टअप का समय to 1 सेकंड है। आखिरकार मेरे पास पर्याप्त था और मैंने समस्या की जड़ में खोद दिया। मैंने अंततः अपनी पूरी ~/.emacs
फ़ाइल को टिप्पणी की और पाया कि स्टार्टअप का समय अभी भी । 1 सेकंड था। वास्तव में, यह केवल ~ 0.2
सेकंड से मुंडा था , कभी-कभी कम भी। फिर मैंने कोशिश की emacs -q
और पाया कि स्टार्टअप का समय ~ 0.1
सेकंड था ।
एलिफ़स मैनुअल के इस खंड की जाँच करने पर , मुझे पता चला कि emacs -q
स्टार्टअप का समय इतना कम क्यों हो रहा है। जाहिर है emacs -q
स्टार्टअप पर तीन बातें करने से Emacs बंद हो जाता है:
- अपनी init फ़ाइल लोड करना
- अपनी
default.el
फ़ाइल लोड कर रहा है - बुला
package-initialize
हमने अपनी इनिट फ़ाइल पहले ही खारिज कर दी है, क्योंकि मेरी पूरी टिप्पणी ~/.emacs
लगभग कुछ भी नहीं है। मैं एक default.el
फ़ाइल का उपयोग नहीं करता, इसलिए इसे भी खारिज कर दिया गया। जो package-initialize
प्रदर्शन हिट के लिए अपराधी के रूप में निकल जाता है।
package-initialize
इतना स्टार्टअप टाइम क्यों ले रहा होगा ? यह पहला सवाल था जो मैंने खुद से पूछा। मैं सब कुछ autoloading नहीं कर रहे हैं? सही है। लेकिन है कि ठीक समस्या है।
मुझे यह पोस्ट मिली, जो बताती है कि "एक्टीवेटिंग" पैकेज में ऑटोलॉड फाइल्स पढ़ना और लोड पाथ सेट करना होता है। यह स्पष्ट रूप से एक I / O दंड देता है जब आपके पास कई पैकेज होते हैं क्योंकि आपके पास पढ़ने के लिए कई ऑटोलैड फाइलें होती हैं और सेट करने के लिए कई रास्ते होते हैं। दुर्भाग्य से, इसके बिना, ऑटोलॉड्स के प्रबंधन का कार्य उपयोगकर्ता के हाथों में आता है। दूसरे शब्दों में, package.el
ऑटोलैड फ़ाइलों और रास्तों के लिए फाइलसिस्टम को क्रॉल किए बिना , मुझे यह प्रबंधित करना होगा कि जो स्वयं एक थकाऊ और त्रुटि वाली प्रक्रिया हो सकती है।
मैं उस सड़क से नीचे नहीं जाना पसंद करूंगा। वर्तमान में मेरे पास 116 पैकेज हैं, जिनमें से ELPA के 107 और 25 आश्रित हैं। मुझे यकीन है कि यह संख्या इतनी अधिक है कि मेरे प्रदर्शन को इतना खराब कर रही है। लेकिन मैं एक विचित्र स्थिति में हूं क्योंकि मैं अपना कोई भी पैकेज नहीं निकालना चाहता।
क्या मेरे लाइटनिंग स्टार्टअप समय को वापस पाने के लिए ऐसी स्थिति में कोई उपाय है?
अपडेट करें:
हमने इस समस्या को हल करने के लिए स्टीफन मोननियर (इन पैच का विवरण यहाँ है ) द्वारा कुछ पैच के बारे में मेलिंग सूची पर एक नया सूत्र शुरू किया है। किसी का भी स्वागत है उसका पैच टेस्ट करने और प्रतिक्रिया देने के लिए।emacs-devel
एक और अपडेट:
ऐसा लगता है कि स्टीफन मोननियर या तो इस मुद्दे में दिलचस्पी नहीं ले रहे हैं या उन्हें मेरे संदेश नहीं मिल रहे हैं। मैं पूर्व को मानने के लिए इच्छुक हूं, जो ठीक है, हालांकि अगर ऐसा है तो मैं उससे किसी तरह की प्रतिक्रिया की सराहना करूंगा। वैसे भी, इस मुद्दे के लिए उन्होंने अब तक जो कोड तैयार किया है वह काफी अच्छा काम करता है। उनके सबसे हाल के पैच यहां (Emacs 25.3 के लिए) और यहां (Emacs मास्टर शाखा के लिए ) पाए जा सकते हैं ।मैंने अपने स्टार्टअप समय पर उनके पैचेज़ की बदौलत अच्छे सुधार देखे हैं और मैं एक ऐसे बिंदु पर हूँ जहाँ मैं अपने स्टार्टअप समय के साथ सहज हूं कि यह मेरे अनुकूलन की सुविधाओं को काटे बिना जितना संभव हो उतना अनुकूलित हो। मैं उम्मीद कर रहा था कि ये पैच कुछ बिंदु पर इसे एमएसीएस मेनलाइन में बना देंगे, लेकिन मुझे लगता है कि मुझे (या किसी और) को स्टीफन के बजाय अब इसके लिए मशाल उठानी होगी। कॉपीराइट असाइनमेंट और लाइसेंसिंग के बारे में हमें मेलिंग लिस्ट में कुछ जगह नहीं मिली। ऐसा करने में मैं शुरू में असहज था, लेकिन रिचर्ड स्टालमैन और अन्य की कुछ टिप्पणियों के कारण, कॉपीराइट असाइनमेंट उतना प्रतिबंधात्मक नहीं हो सकता जितना मैंने मूल रूप से सोचा था। इसके अलावा, कॉपीराइट कार्य के विकल्प के रूप में सार्वजनिक क्षेत्र में अपने काम करना मेरे लिए संभव हो सकता है।
किसी भी मामले में, अब तक के पैच के लिए धन्यवाद स्टीफन! मुझे उम्मीद है कि आप इन परिवर्तनों को विकसित करना जारी रखेंगे, लेकिन यदि नहीं, तो यह ठीक है और मैं इसे किसी बिंदु पर विकसित करना जारी रख सकता हूं। मैं बाकी सभी को भी धन्यवाद देता हूं जिन्होंने इस मुद्दे को सुलझाने के लिए अंतर्दृष्टि और योगदान की पेशकश की।
फिर भी एक और अद्यतन:
वाह, यह सुविधा अंत में उतरा जैसा दिखता है और Emacs 27 में होगा। Stefan Monnier को धन्यवाद!
use-package
इसके लिए जाने का रास्ता है।