অনেক প্যাকেজ থাকা সত্ত্বেও কীভাবে আমি প্রারম্ভকালীন সময়ের উন্নতি করতে পারি?


19

টিএল; ডিআর আমার কাছে প্রচুর পরিমাণে প্যাকেজ রয়েছে যা এটি আমার শুরুর সময়কে ব্যথা করে। যদি আপনি বিশ্বাস না করেন যে এটি হতে পারে তবে পড়ুন।


আমার ইম্যাকস স্টার্টআপের সময়টি বেশ কম। আমি ব্যবহার করি না use-package, আমি কেবলমাত্র প্রচুর হুকস সেট করেছি autoloadযাতে প্রায় সমস্ত কোড পিছিয়ে যায়। বাস্তবে পুরো জিনিসটি সাধারণত একটি অর্ধেক সেকেন্ডের মধ্যে লোড হয়, যদিও এটি দেখতে পাগলের মতো জটলা দেখায়।

তবে সময়ের সাথে সাথে আমি লক্ষ্য করেছি যে আমার সূচনার সময়টি অবিচ্ছিন্নভাবে ধীরে ধীরে ধীরে ধীরে হয়ে যায় gets এটি শেষ পর্যন্ত এমন পর্যায়ে পৌঁছেছে যেখানে প্রারম্ভকালীন সময়টি ≥ 1 সেকেন্ড। আমার অবশেষে যথেষ্ট ছিল এবং আমি সমস্যার মূলের মধ্যে খনন করেছি। আমি শেষ পর্যন্ত আমার পুরো ~/.emacsফাইলটি মন্তব্য করেছিলাম এবং শুরুর সময়টি এখনও 1 ডলার হিসাবে খুঁজে পেতাম । প্রকৃতপক্ষে, এটি কেবলমাত্র ~ 0.2সেকেন্ডের মধ্যে শেভ করেছিল, কখনও কখনও এমনকি এমনকি কমও। তারপরে আমি চেষ্টা করে emacs -qদেখেছি যে শুরুর সময়টি 0.1সেকেন্ড।

এলিসপ ম্যানুয়ালটির এই বিভাগটি পরীক্ষা করে , আমি জানতে পেরেছিলাম কেন emacs -qস্টার্টআপের সময় এতটা কমিয়ে দেওয়া হচ্ছে। দৃশ্যত emacs -qইমাক্স শুরুতে তিনটি জিনিস করা থেকে বিরত থাকে:

  1. আপনার init ফাইলটি লোড হচ্ছে
  2. আপনার default.elফাইল লোড করা হচ্ছে
  3. কলিং package-initialize

আমরা আমার থিম ফাইলটি ইতিমধ্যে বাতিল করে দিয়েছি, যেহেতু আমার সম্পূর্ণ মন্তব্য করা ~/.emacsপ্রায়শই কিছুই করে না। আমি কোনও default.elফাইল ব্যবহার করি না , তাই এটিও বাতিল হয়ে যায়। যা package-initializeপারফরম্যান্স হিটের অপরাধী হিসাবে ছেড়ে যায়।

এত package-initializeস্টার্টআপ সময় নেওয়া হবে কেন ? এটাই আমার প্রথম প্রশ্ন ছিল। আমি কি সবকিছু অটোলয়েড করছি না? হ্যাঁ ঠিক. তবে তা হ'ল সমস্যা।

আমি এই পোস্টটি পেয়েছি যা ব্যাখ্যা করে যে "অ্যাক্টিভেটিং" প্যাকেজগুলিতে অটোল্যাড ফাইলগুলি পড়া এবং লোড পাথ সেট করা থাকে। আপনার কাছে অনেকগুলি প্যাকেজ থাকলে এটি স্পষ্টতই I / O জরিমানা লাভ করে কারণ আপনার কাছে পড়ার মতো অনেক অটোলোড ফাইল এবং সেট করার জন্য অনেকগুলি পথ রয়েছে। দুর্ভাগ্যক্রমে, এটি ছাড়া, অটোলোড পরিচালনার কাজটি ব্যবহারকারীর হাতে পড়ে। অন্য কথায়, package.elঅটোল্যাড ফাইল এবং পাথগুলির জন্য ফাইল সিস্টেমকে হামাগুড়ি না দিয়ে আমাকে নিজেরাই পরিচালনা করতে হবে যা একটি ক্লান্তিকর এবং ত্রুটি-প্রবণ প্রক্রিয়া হতে পারে।

আমি সেই রাস্তায় নামতে পছন্দ করব না আমার কাছে বর্তমানে 116 টি প্যাকেজ রয়েছে, যার মধ্যে 107 টি রয়েছে ELPA থেকে এবং 25 টি নির্ভরতা। আমি নিশ্চিত যে এই পুরো সংখ্যাটি আমার অভিনয়কে এত খারাপভাবে হ্রাস করছে। তবে আমি বিভ্রান্তিতে পড়েছি কারণ আমি আমার কোনও প্যাকেজ মুছে ফেলতে চাই না।

আমার বজ্র শুরু হওয়ার সময় ফিরে পাওয়ার কি এমন কোনও প্রতিকার আছে?


হালনাগাদ:

আমরা শুরু করেছি একটি নতুন থ্রেড উপর emacs-develসম্পর্কে মেইলিং লিস্ট কিছু প্যাচ দ্বারা স্টিফান Monnier (এই প্যাচ একটি বিবরণ এখানে ) এই সমস্যা সমাধানের জন্য। যে কেউ তার প্যাচগুলি পরীক্ষা করে প্রতিক্রিয়া জানাতে স্বাগত।

আরেকটি আপডেট:

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

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

তবুও আরেকটি আপডেট:

বাহ, দেখে মনে হচ্ছে এই বৈশিষ্ট্যটি অবশেষে অবতরণ করেছে এবং এটি ইম্যাক্স 27 এ হবে Ste স্টেফান মননিয়ারকে ধন্যবাদ!


দুর্দান্ত প্রশ্ন।
ড্রয়

use-packageএই জন্য যেতে উপায়।
ডডজি

সমস্যাটি ডাউনপ্লে করার চেষ্টা করছেন না (স্টার্টআপ ল্যাটেন্সিটি গুরুত্বপূর্ণ!), তবে ইম্যান্সকে ডেমন / সার্ভার হিসাবে চালিয়ে নেওয়া বিবেচনা করবেন যাতে আপনি কেবল একবার স্টার্টআপ ব্যয়ের জন্য অর্থ প্রদান করতে পারেন।
GManNickG

1
@GManNickG আমি একটি সার্ভার হিসাবে ইমাস চালাই। দুর্ভাগ্যক্রমে, প্রতি এখন এবং আমি ইমাকগুলিকে খুব বেশি চাপ দিয়েছি বা এটির সাথে খুব বেশি টিঙ্কার দিয়েছি এবং জিনিসগুলি পরিষ্কার করার জন্য পুনরায় চালু করা হ'ল উপায়। যখন এটি ঘটে তখন আমি আমার সূচনার সময়টি সর্বোত্তম হতে পছন্দ করি।
জিডিপি 2

উত্তর:


13

প্যাকেজ.এল এর ডিজাইনের পছন্দগুলির মধ্যে একটি হ'ল জিনিসগুলি "সরল" করে দেখানো। এর অংশটি হ'ল যে package-initializeসমস্ত প্যাকেজ ইনস্টল করা আছে তার অনুসন্ধান করে তারপরে কোনটি সক্রিয় করা উচিত তা নির্ধারণ করার চেষ্টা করে (একই প্যাকেজের একাধিক সংস্করণ উপলভ্য হলে পিনিং এবং সংস্করণগুলির সংযোজন অনুযায়ী), তারপরে লোড হয় প্রতিটি প্যাকেজের <pkg>-autoloads.elফাইল সক্রিয় করুন।

এন ইনস্টল করা প্যাকেজগুলির জন্য, এর অর্থ মূলত এন <pkg>-pkg.elপ্যাকেজ-বিবরণ ফাইল এবং এন <pkg>-autoloads.elফাইলগুলি পড়া। বৃহত এনএসগুলির জন্য, এটি একটি গুরুতর সমস্যা হয়ে উঠতে পারে। আর একটি সম্ভাব্য পারফরম্যান্স ইস্যু হ'ল এটি এন উপাদানগুলিতে যুক্ত করবে load-path, সুতরাং প্রতিবার আপনি যখন loadইমাসগুলি এন ডিরেক্টরিগুলির মাধ্যমে অনুসন্ধান করবেন, তাই প্রতিটি loadধীরে ধীরে ধীরে ধীরে কমবে।

এটি চেষ্টা করার এবং এটির গতি বাড়ানোর বিভিন্ন উপায় রয়েছে:

  • কোনও ~/.emacs.d/elpa/package-initialize.el(c)ফাইল প্রাক্পম্পিউট করার জন্য কিছু উপায় সরবরাহ করুন যা <pkg>-autoloads.elডান ক্রমে সমস্ত অধিকারকে একত্রিত করার ফলাফল হবে । তারপরে package-initializeউপস্থিত থাকাকালীন এই ফাইলটি লোড করতে এবং সমস্ত কিছু এড়িয়ে যেতে পারে। এর পরে আপনি কোনো না কোনোভাবে রিফ্রেশ করতে / ফ্লাশ প্রয়োজন চাই package-initialize.el(c)ফাইল যখন প্যাকেজ যোগ করা / আপডেট / মুছে অথবা আপনি আপনার পরিবর্তন যখন package-pinned-packagesঅথবা আপনার package-load-list। আমি মনে করি এটি সিস্টেমে মোটামুটি কিছু পরিবর্তন দিয়ে করা সম্ভব (কেবলমাত্র এমনটি যা সত্যিই পরিবর্তনের প্রয়োজন হবে বলে আমি মনে করি package-initializeএটি উপলভ্য প্যাকেজগুলি সম্পর্কে মেটাডেটা লোড না করেই "কেবলমাত্র সক্রিয়" করতে বলা যেতে পারে)।

  • সুপার-প্যাকেজগুলি তৈরি করার / পরিচালনা করার কোনও উপায় সরবরাহ করুন, অর্থাত্ প্যাকেজ যা বিভিন্ন প্যাকেজগুলিকে একের সাথে একত্রিত করে (যাতে কেবলমাত্র একটি উপাদান যুক্ত হয় load-path, একটি <pkg>-pkg.elএবং একটি <pkg>-autoloads.elবোঝা)। এটি করা আরও কঠিন হতে পারে (কারণ এরপরে আপনি এই জাতীয় সুপার-প্যাকেজগুলিতে থাকা প্যাকেজগুলির কেবলমাত্র অংশ সক্রিয় করতে পারবেন না, তাই নির্ভরতা / সংস্করণ বিশ্লেষণটি জটিল হতে পারে)।

উপরের প্রথম বিকল্পটি প্রয়োগ করা খুব সহজ হওয়া উচিত এবং আপনার যখন অনেকগুলি প্যাকেজ ইনস্টল করা থাকে তখন package-initialize আরও দ্রুত তৈরি করা উচিত। আপনি যদি এটি চেষ্টা করে দেখতে আগ্রহী হন তবে আমার কাছে বিনা দ্বিধায় সহায়তা চাইতে পারেন।

এফডাব্লুআইডাব্লু, আমি আমার টেস্ট সেটআপে "হাত ধরে" এই জাতীয় একটি মেগা-অটোল্যাড ফাইল তৈরি করার চেষ্টা করেছি। ফলাফল: package-initializeপ্রায় 0.9s সময় নেওয়ার সময়, mega-autoloads.elফাইলটি লোড করতে 0.3s লাগে যা আমি 0.2 কে নীচে নামিয়ে আনতে পারি load-source-file-function, এবং ফাইলটি বাইট-সংকলন করে 0.1 এ নিয়ে যেতে পারি। আমি আরও ভাল গতি প্রত্যাশা করেছি, সত্যি বলতে, তবে এটি এখনও সার্থক।

[সম্পাদনা] এই "মেগা অটোল্যাডস" পদ্ধতিটি এখন ইমাসের মাস্টার শাখায় (কিছু দূর ভবিষ্যতে ইমাসস -27 হওয়ার জন্য) উপলভ্য। এটি নতুন package-quickstartভেরিয়েবল দ্বারা নিয়ন্ত্রিত ।


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

এল-গেট একক অটোলোড ফাইলের পদ্ধতির ব্যবহার করে, এটি মূলত বেশিরভাগ সময় কাজ করে। কিছু প্যাকেজগুলির সাথে সমস্যা রয়েছে যার অটোল্যাডগুলি ফাইল সিস্টেমের অবস্থানের উপর নির্ভর করে যার মধ্যে তারা মূল্যায়ন করা হয় I আমি "সঠিক ক্রমে" বলতে কী বোঝাতে চাইছি তা অনুসরণ করি না, কেন অটোল্যাড লোডিংয়ের ক্রমটি কেন কার্যকর হবে (আমি তা করি নি) এটি কি বর্তমান প্যাকেজ.এল এর পক্ষেও নির্বিচারক ছিল)?
npostavs

@ স্টেফান দয়া করে সমাধানটি যদি এখানে সম্ভব হয় তবে তা ভাগ করুন।
ম্যানুয়েল উবার্তি

1
@ এনপোস্টাভস: বেশিরভাগ <pkg>-autoloads.elফাইল কেবল অটোলোড সেটআপ করে এবং প্রকৃত অর্ডার দেওয়ার বিষয়ে চিন্তা করে না, তবে এলোমেলোভাবে অন্যান্য কাজ করা থেকে তাদের বাধা দেওয়ার কিছুই নেই, এবং প্যাকেজ.এল গ্যারান্টি দেয় যে যার <pkg>উপর নির্ভর করে প্যাকেজটি <pkg>নিজেই সক্রিয় হয়ে যাবে।
স্টেফান

1
এই বিষয়ে আরেকটি আপডেট: আমরা এখানে মেলিং তালিকায় একটি নতুন বিষয় শুরু করেছি এবং যে কেউ স্টেফানের পরিবর্তনগুলি সম্পর্কে মন্তব্য করতে বা পরীক্ষা করতে নিরপেক্ষ।
জিডিপি 2

6

package-initializeলোড করতে এত বেশি সময় নেওয়ার বিষয়ে আপনি যে সমস্যাটি বর্ণনা করছেন তা একটি পরিচিত সমস্যা। কিছু ইম্যাক ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে অটোলোডগুলি লোড করে সমাধানের চেষ্টা করার মধ্যে এটি অন্যতম।

আমি আপনার সমস্যার দুটি সমাধান দেখতে পাচ্ছি।

  1. আপনি যে প্যাকেজগুলি আগ্রহী সেগুলির পথ নির্ধারণ করতে এবং অটোলোডগুলি লোড করতে কার্যকারিতা লিখুন (বা কোনও ফ্রেমওয়ার্ক থেকে এক্সট্রাক্ট করুন) Write
  2. স্পষ্টভাবে গতি লক্ষ্য করে এমন একটি ফ্রেমওয়ার্ক ব্যবহার করুন। আমি ব্যক্তিগতভাবে ডওম ইম্যাক্সের প্রস্তাব দিই । এই কাঠামোর সাহায্যে, আমি প্রায় 1 সেকেন্ডে 200 এরও বেশি প্যাকেট লোড করছি।

ডওম ইম্যাক্সের সুপারিশ করার জন্য অন্যতম প্রধান রেজোজন হ'ল ফ্রেমওয়ার্কটি প্যাকেজ পরিচালনকে ইমাসের বাইরে রাখে। আমার ভুল ব্যাখ্যা করবেন না, এটি এখনও ইমাস যা প্যাকেজ পরিচালনা করছে, এটি কেবলমাত্র মানক ব্যবহারকারী সেশনের বাইরে প্যাকেজ পরিচালনা করা হয়। এখানে দর্শনটি হ'ল: সাধারণত যখন ইমাস শুরু হয় তখন আমাদের ধরে নেওয়া উচিত যে সমস্ত প্যাকেজ উপস্থিত রয়েছে এবং ইতিমধ্যে লোড করা যায়। এটি অনেক সময় সাশ্রয় করে। ডওম ইম্যাকস ইম্যাক্সের সমতুল্য apt-getবা তার pacmanজন্য বাছাই করে । একবার প্যাকেজ ইনস্টল হয়ে গেলে, যখনই ইমাস শুরু হয় এটি ইতিমধ্যে ইনস্টল করা বলে ধরে নেওয়া হয়; কোন প্রশ্ন জিজ্ঞাসা করা হয়নি।


ভাই, জেনে খুশি যে এই সমস্যাটি কেবল আমাকে প্রভাবিত করছে না। আমাকে ডওম ইমাসকে নির্দেশ করার জন্য আপনাকে ধন্যবাদ Thank আমাকে এটির কাছাকাছি নজর রাখতে হবে এবং আমার নিজের সেটআপের সাথে কী মানিয়ে নিতে পারি তা দেখতে হবে।
জিডিপি 2

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