ইমাসগুলি কীভাবে অনেক এল-ফাইল দিয়ে তাত্ক্ষণিকভাবে শুরু করার ব্যবস্থা করে?


11

প্রতিটি ইমাস'আর যেমন জানতে পারবেন, আমি বর্তমানে আমার বিস্তৃত ডট-ইম্যাকস কনফিগারেশনে ভুগছি। আমার সমস্ত প্যাকেজগুলি কনটেইনারগুলির মধ্যে রয়েছে use-packageএবং আমি আমার সমস্ত .elফাইলগুলি বাইক কম্পাইল করেছিলাম। এমনকি এটি সহ, ইমাসগুলি 6.4 সেকেন্ডের মধ্যে শুরু হয় এবং তারপরে বাকী প্যাকেজগুলি (এর মধ্যে প্রায় 40) লোড করে।

আমি দীর্ঘ প্রারম্ভকালীন সময়ের সমাধানের জন্য অন্য উপায়গুলি সম্পর্কে ভাবছিলাম, তখন আমি কিছু লক্ষ্য করেছি। ডিফল্ট ইমাস (ব্যবহারকারী কনফিগারেশন ব্যতীত) অনেক .elলাইব্রেরি ব্যবহার করে, যা প্রতিটি ইমাসের সাথে অন্তর্ভুক্ত থাকে। তারা অবস্থিত \shares\emacs\version number\lisp\

এমনকি অনেক লিস্প ফাইল সহ, এটি এক সেকেন্ডে শুরু করার ব্যবস্থা করে। আমি যখন ডিফল্ট ইমাসদের সাথে অন্তর্ভুক্ত অনেকগুলি প্যাকেজের ফাইলগুলি পরীক্ষা করছিলাম তখন আমি কোনও অসাধারণ কাজ পাইনি যা ইমাকরা কেন এক সেকেন্ডের মধ্যে শুরু করতে পারে তা ব্যাখ্যা করতে পারে। কেউ কি আমাকে বলতে পারে যে .elইমাকস কীভাবে এটি হাজার হাজার ফাইলের সাথে পরিচালনা করে ?


1
আপনি যেখানেই সম্ভব :defer tআপনার use-packageঘোষণাগুলিতে ব্যবহার করেন ?
চন্দ্রাগার

7
ইমা্যাকস-এ অসংখ্য কোর লাইব্রেরিগুলি ইমা্যাকস নির্মাণের সময় ব্যবহৃত ডাম্প প্রক্রিয়াটির মাধ্যমে এক্সিকিউটেবলের মধ্যে পূর্ব-লোড হয় যা এটি অবিশ্বাস্যরূপে দ্রুত অনেক কিছু লোড করার বিভ্রম দেয়। আপনি সে সম্পর্কে জানতে আগ্রহী কিনা তা দেখুন । C-h i g (elisp) Building Emacs
ফিল্ডস

2
@ ফিলস: আপনি যদি কোনও উত্তরে আপনার মন্তব্য প্রসারিত করতে পারেন তবে এটি দুর্দান্ত হবে, মনে হচ্ছে ডাম্প প্রক্রিয়াটি এখনও ইমাস-এসই-তে উল্লেখ করা হয়নি।
পেপ্রিকা

এবং খনি
76s

উত্তর:


9

কেউ কি আমাকে বলতে পারে যে ইমাসগুলি কীভাবে এটি পরিচালনা করে, এমনকি হাজার .el-ফাইল সহ?

ইমাকস "পরিচালনা করে" যা প্রারম্ভকালে লোড না করে এর ফলে মূল অ্যাপ্লিকেশনটির লোডটি ধরে রাখে না। এটি দ্রুত ব্যবহারকারীর কাছে কীবোর্ড নিয়ন্ত্রণ ফিরিয়ে দেওয়ার প্রভাব হিসাবে কার্যকর হয়।

তবে এটি কখন বোঝা হয়? সেই ফাংশন, মোড বা বৈশিষ্ট্যটির প্রথম ব্যবহারে।

এটা কি ধীর হয় না? হ্যাঁ, প্রথম ব্যবহারে। এটাই বাণিজ্য বন্ধ আপনি কি ইমাস সূচনা সময়ে বা প্রথম ব্যবহারের সময় ধীরগতিতে চান?

এটা লক্ষণীয়? অন্যান্য মূল গ্রন্থাগারগুলিও লোড হওয়ায় প্রারম্ভের সময় লোড হতে আরও বেশি সময় লাগে take তবে প্রথম ব্যবহারের ক্ষেত্রে এটি কেবলমাত্র সাবসেট বৈশিষ্ট্যটি লোড হওয়ার কারণে দ্রুত অনুভূত হয়।

তাহলে কেন কেউ স্টার্টআপে লোড তুলবে? কারন কিছু শুরুতে সমস্ত ঘন ঘন ব্যবহৃত লাইব্রেরিগুলি লোড করার অপেক্ষায় আপত্তি করে না কারণ একবারে লোড করা সমস্ত ক্রিয়াকলাপ পরে তত্পরতার সাথে সম্পাদন করে।

আমি কীভাবে নির্বাচন করতে পারি? যেমন ড্র এবং অন্যান্যরা এই খুব প্রশ্নের তাদের প্রতিক্রিয়াগুলিতে ইঙ্গিত করেছেন, আপনি নিয়ন্ত্রণ করতে অটোলোড এবং অনুরূপ কৌশল ব্যবহার করতে পারেন। তবে সবচেয়ে গুরুত্বপূর্ণ বিবেচনাটি আপনার ব্যবহারের ধরণ হওয়া উচিত। আপনি যদি vi এর মতো ইমাকগুলি ব্যবহার করতে থাকেন, ক্রমাগত খোলার এবং বন্ধ হয়, হ্যাঁ শুরু করার সময়টি বেদনাদায়কভাবে সুস্পষ্ট হয়ে যায়। তবে অন্যদিকে, আপনি যদি সর্বদা চলমান ইম্যাকগুলি ব্যবহার করেন তবে 1 সেকেন্ড বা 1 মিনিটের প্রারম্ভকালীন সময়টি যত্নের জন্য যথেষ্ট লক্ষণীয় বা গুরুত্বপূর্ণ হবে না।

দ্রষ্টব্য আপনি পরীক্ষার সময়, চলমান বা অন্যথায় vi এর মতো ইম্যাকগুলি ব্যবহার করার সময় তাত্ক্ষণিক প্রারম্ভের জন্য ব্যাচ মোড বা জিল ব্যবহার করতে পারেন ।

আমার পছন্দটি হল স্টার্টআপে লোড করা যাতে কোনও ত্রুটি সামনে পড়ে। আমি যখন ট্রাম্প দ্বারা পরিচালিত বেশ কয়েকটি দূরবর্তী অবস্থানের সাথে অগণিত বাফার, মোড এবং সংকলন রাষ্ট্র সক্রিয় থাকাকালীন কোনও কাজের দিনের মাঝে কোনও লোড ত্রুটিগুলি মোকাবেলা না করা পছন্দ করি। এই ধরনের পরিস্থিতিতে অটোলোড ত্রুটিগুলি ডিবাগ করা খুব সুখকর নয়।


10

অন্তর্ভুক্ত লাইব্রেরিগুলির মধ্যে অনেকগুলি আপনি শুরু করার সময় লোড হয় না।

কিছু কমান্ড ইত্যাদি স্বয়ংক্রিয়ভাবে চালিত হয় যার অর্থ ইমাকগুলি সেগুলিকে স্বীকৃতি দেয় এবং সেগুলি কীভাবে লোড করতে হয় তা জানে। আপনি যখন স্বয়ংক্রিয়ভাবে ব্যবহৃত একটি কমান্ড ব্যবহার করার চেষ্টা করবেন, ইমাসগুলি তারপরে পাঠাগারটি বোঝায় যা এটি সংজ্ঞায়িত করে, যদি এটি এখনও লোড না করা থাকে।

আপনার নিজের কমান্ড বা লাইব্রেরিতে কমান্ডের জন্য আপনি নিজের অটোলোড তৈরি করতে পারেন। Elisp ম্যানুয়াল, নোড দেখুন Autoload


অলস-লোডিং হিসাবে পরিচিত, আমি অনুমান করি? অলস-লোডিং কীভাবে অর্জিত হয় তার কোনও উদাহরণ রয়েছে, এটি যখন বলা হবে তখনই লোড হবে?
রিনিফ্রোগার

আপনি কী জিজ্ঞাসা করছেন তা নিশ্চিত নন। হ্যাঁ, আপনি এটিকে অলস লোডিং বলতে পারেন। এলিসপ ম্যানুয়ালটিতে উদাহরণ এবং ব্যাখ্যা রয়েছে। ;;;###autoloadআপনার লাইব্রেরিতে কমান্ড সংজ্ঞা দেওয়ার ঠিক আগে অটোল্যাড কুকি ( ) যুক্ত করা এটি একটি অটোলোড সংজ্ঞা দেওয়ার একটি উপায়, এটি নিশ্চিত করে যে এটির পাঠাগারটি লোড হবে যখন কেউ এটি আহ্বান করে।
ড্রিউ

... তবে সেই অটোলোড কুকিগুলি কীভাবে প্রক্রিয়া করা হয় / কীভাবে তা বোঝার জন্য সেই ম্যানুয়াল লিঙ্কটি পড়ুন। প্যাকেজ পরিচালক তাদের সমস্ত ELPA প্যাকেজগুলির জন্য পরিচালনা করে। অন্যথায় আপনি (autoload...)তাদের রেজিস্ট্রেশন করতে সরাসরি আপনার init ফাইলে কল করবেন।
ফিলি

আপনার উভয় জবাবের জন্য ধন্যবাদ, এটি এর আরও সন্ধান করতে অনেক সাহায্য করেছে!
রিনিফ্রোগার

9

অন্যান্য উত্তরগুলি ছাড়াও (যা ব্যাখ্যা করে যে সংখ্যাগরিষ্ঠ লাইব্রেরিগুলি কেবলমাত্র চাহিদার উপরে লোড করা হয়), এক্সিকিউটেবলের মধ্যে অনেকগুলি মূল এলিজপ লাইব্রেরি প্রাক লোডিংয়ের বিষয়টিও রয়েছে emacsযা এটি একটি লোডিংয়ের একটি বিভ্রম সরবরাহ করে অবিশ্বাস্যভাবে দ্রুত জিনিস অনেক।

এটি ইমাকসের একটি তথাকথিত "বেয়ার" সংস্করণ চালিয়ে অর্জিত হয় (এটি যা আসলে সংকলিত হয়েছিল এবং এটি সম্পূর্ণ কার্যকরী, তবে কেবলমাত্র এলিস্প ইন্টারপ্রেটার এবং সিতে লিখিত অন্যান্য মূল কার্যকারিতা ধারণ করে) এবং লোড করতে বলে সমস্ত এলিস্প লাইব্রেরি যা পূর্ব-লোড করা উচিত, অবশেষে emacsনির্মিত লাইব্রেরিগুলির সাথে প্রকৃত বাইনারিটি "ডাম্পিং" করার আগে ।

এই প্রক্রিয়াটি এলিজপ ম্যানুয়ালটিতে বিশদে রয়েছে:
C-hig (elisp) Building Emacs RET

আপনি যদি ইমাসকে নিজেই সংকলন করে থাকেন তবে আপনি এই প্রক্রিয়াটি নিয়ে পরীক্ষা করতে পারবেন, এবং আপনি যদি চান তবে চূড়ান্ত নির্বাহের বিকল্প সংস্করণগুলিও ফেলে দিতে পারেন (সাধারণত প্রস্তাবিত নয়, তবে সুবিধাটি সেখানে রয়েছে)।

সংকলিত temacsবাইনারি srcডিরেক্টরিতে পাওয়া যাবে এবং আপনি প্রতিটি সংস্করণকে এভাবে চালিয়ে শুরু সময়ের পার্থক্যটি তুলনা করতে পারেন:

$ time ./temacs -l loadup --batch
$ time ./emacs --batch

আমার সিস্টেমে প্রাক্তনটি 4 সেকেন্ড সময় নেয় (যার সময়কালে 111 এলিস্প লাইব্রেরিগুলি লোড করা হয়), তবে পরবর্তীটি ~ 0.02 সেকেন্ড নেয়।


এই পয়েন্টটি তৈরি করার জন্য খুব সুন্দর @ ফিলস।
ইমাস ব্যবহারকারী
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.