paint-brush
সঠিক নির্ভরতা নির্বাচন করা: একটি ব্যাপক ব্যবহারিক গাইডদ্বারা@dsitdikov
2,107 পড়া
2,107 পড়া

সঠিক নির্ভরতা নির্বাচন করা: একটি ব্যাপক ব্যবহারিক গাইড

দ্বারা Daniil Sitdikov5m2023/04/17
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

আপনি সত্যিই এটা প্রয়োজন? হয়তো আপনার পরিবেশ ইতিমধ্যে সবকিছু আছে. ঠিক আছে, আমাদের এটা দরকার। প্রথমত, নিরাপত্তা বিবেচনা করুন। এটি ব্যবহার করা কতটা নিরাপদ? তারপর, রক্ষণাবেক্ষণ। শেষ মুক্তি কবে? রিলিজ কত ঘন ঘন ঘটবে? ইস্যু। উন্মুক্ত ইস্যু এবং বন্ধের অনুপাত কত? এবং অন্যান্য পয়েন্ট: কোডের গুণমান, পরীক্ষার কভারেজ, লাইব্রেরির আকার, নির্ভরতার সংখ্যা এবং লাইসেন্স।
featured image - সঠিক নির্ভরতা নির্বাচন করা: একটি ব্যাপক ব্যবহারিক গাইড
Daniil Sitdikov HackerNoon profile picture

আপনি যদি একটি উচ্চমানের Michelin-স্টার রেস্তোরাঁর একজন শেফ হয়ে থাকেন, তাহলে আপনি কি এলোমেলোভাবে যাচাইকৃত নয় এমন উৎস থেকে সবজি এবং মাংস কিনতেন? প্রায় যেকোনো গড় প্রকল্পের খরচ কয়েক হাজার বা এমনকি মিলিয়ন ডলারে পরিমাপ করা হয়। আমি বিশ্বাস করি যে আমাদের শিল্পের রেস্তোরাঁর মতো একই পদ্ধতি থাকা উচিত।


এখনই নিজেকে জিজ্ঞাসা করার প্রথম প্রশ্ন: আপনার কি সত্যিই একটি নতুন নির্ভরতা দরকার? বর্তমান পরিবেশ, যেমন ভাষা বা ইনস্টল করা লাইব্রেরি ব্যবহার করে সমস্যাটি সমাধান করা যেতে পারে? উদাহরণস্বরূপ, UUID তৈরি করতে একটি অতিরিক্ত লাইব্রেরি ইনস্টল করার প্রয়োজন নেই। Node.js এবং ব্রাউজারগুলি এটিকে বাক্সের বাইরে সমর্থন করে : crypto.randomUUID()


দ্বিতীয় প্রশ্ন: আপনার কি পুরো লাইব্রেরি দরকার? উদাহরণস্বরূপ, যদি আপনার শুধুমাত্র একটি ড্রপডাউন প্রয়োজন হয়, তাহলে বুটস্ট্র্যাপের মতো কিছু ইনস্টল করা কি মূল্যবান? সম্ভবত রেডিক্স UI থেকে একটি আনস্টাইল না করা ড্রপডাউন উপাদান সহ একটি একক, ফোকাসড লাইব্রেরিতে নিজেকে সীমাবদ্ধ করা ভাল?


ঠিক আছে. আমরা মনে কয়েক প্রার্থী আছে. সুতরাং, কিভাবে আমরা সঠিক একটি নির্বাচন করবেন?

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


আমি গত কয়েক বছর ধরে যে মানদণ্ড ব্যবহার করছি তার একটি তালিকা প্রস্তুত করেছি। আমি আশা করি তারা আপনাকে সবচেয়ে উপযুক্ত লাইব্রেরি বেছে নিতে সাহায্য করবে। এগুলিকে ব্যাপকভাবে বিবেচনা করা এবং কিছু ক্ষেত্রে, তাদের মধ্যে নির্বাচন করার সময় আপস করা অপরিহার্য৷


দাবিত্যাগ: আমি নীচে উল্লিখিত লাইব্রেরিগুলির সমালোচনা করছি না বা তাদের ব্যবহারকে নিরুৎসাহিত করার চেষ্টা করছি না। কিছু দৃষ্টান্তে, আমি ইচ্ছাকৃতভাবে নাম বাদ দিয়েছি যাতে বাস্তবিক নির্ভুলতা বজায় রেখে মানদণ্ডের উদাহরণে ফোকাস করা যায়।


1. নিরাপত্তা

এটি ব্যবহার করা কতটা নিরাপদ? এটা কথাসাহিত্যের মত শোনাতে পারে, কিন্তু হ্যাঁ, নির্ভরতা বিপজ্জনক হতে পারে। উদাহরণস্বরূপ, 500k ডাউনলোড সহ একটি লাইব্রেরিতে একটি আকর্ষণীয় বৈশিষ্ট্য যোগ করা হয়েছে : এটি কম্পিউটারের সমস্ত ফাইল ❤️ দিয়ে প্রতিস্থাপন করার চেষ্টা করে যদি আপনার IP ঠিকানা একটি নির্দিষ্ট সীমার মধ্যে পড়ে।


একটি আকর্ষণীয় তথ্য হল যে এই নির্ভরতাটি vue-cli- এ ব্যবহৃত হয়েছিল। আমরা কিভাবে এই ধরনের সমস্যা আবিষ্কার করতে পারি? সমস্যা পৃষ্ঠা দেখুন, অথবা লাইব্রেরির নাম দিয়ে গুগল করার চেষ্টা করুন। সাধারণত, এই ধরনের তথ্য দ্রুত পৃষ্ঠ.



2. রক্ষণাবেক্ষণ

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


গো-এর বিশ্ব থেকে এখানে একটি উদাহরণ দেওয়া হল: 18.2K তারা সহ একটি লাইব্রেরির লেখকরা তাদের নির্ভরতা বজায় রাখা বন্ধ করার সিদ্ধান্ত নিয়েছে এবং এটি সংরক্ষণাগারভুক্ত করেছে৷ এর মানে হল, কয়েক বছরের মধ্যে, সমর্থন এবং আপডেটের অভাব একটি সমস্যা হয়ে উঠবে। এখন GitHub পরীক্ষা না করেই অনুরূপ নির্ভরতা ইনস্টল করার কল্পনা করুন। এটি পণ্যের মেয়াদ শেষ হওয়ার তারিখ পরীক্ষা করার মতো।



এখানে ঘন ঘন ভাল রিলিজের একটি উদাহরণ:


3. খোলা/বন্ধ সমস্যা

  1. উন্মুক্ত ইস্যু এবং বন্ধের অনুপাত কত? লেখকরা পরিবর্তনগুলি গ্রহণ করতে কতটা ইচ্ছুক? এটা সম্ভব যে আপনাকে কোনো দিন কিছু অবদান রাখতে হবে। উদাহরণস্বরূপ, এই লাইব্রেরিটি বেশ জনপ্রিয় এবং এর 98% শতাংশ বন্ধ সমস্যা রয়েছে। মাত্র 18টি খোলা আছে।


  2. কত দ্রুত জটিল সমস্যা সমাধান করা হয়? একবার, আমি 31k তারা সহ একটি ORM বেছে নিয়েছিলাম, কিন্তু কিছু সময়ে, আমরা একটি সমস্যার সম্মুখীন হয়েছিলাম যা আমাদের অবরুদ্ধ করে। আমাদের সমাধান খুঁজতে হয়েছিল এবং অবশেষে অন্য সমাধানে যেতে হয়েছিল। দুর্ভাগ্যবশত, প্রায় চার বছর পেরিয়ে গেছে, এবং এখনও সমস্যার সমাধান হয়নি।

    এই ধরনের সমস্যা সর্বাধিক মন্তব্য দ্বারা বাছাই দ্বারা চিহ্নিত করা যেতে পারে.


  3. অবদান প্রক্রিয়া নির্মাতাদের দ্বারা সংগঠিত হয়েছে? জায়গায় একটি পরিষ্কার, সংজ্ঞায়িত কর্মপ্রবাহ আছে? উদাহরণস্বরূপ, Next.js-এর নির্মাতারা তাদের অবদানের প্রক্রিয়া সম্পর্কে এমনকি 40-মিনিটের ভিডিও রেকর্ড করেছেন।


4. কোড গুণমান

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


5. টেস্ট কভারেজ

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


6. লাইব্রেরির আকার

মোবাইল অ্যাপ্লিকেশানগুলির প্রায়শই বড় নির্ভরতা আকার থাকে এবং পুরো অ্যাপটি 200MB এরও বেশি হতে পারে, যা সেলুলার নেটওয়ার্ক ডাউনলোডের সময় সমস্যা সৃষ্টি করতে পারে এবং প্রচুর সঞ্চয়স্থান খরচ করতে পারে। এটি বিশেষত ফ্রন্ট-এন্ড CSR অ্যাপগুলির জন্য সমস্যাযুক্ত, যেখানে ধীর ইন্টারনেট গতি নাটকীয়ভাবে লোডিং সময় বাড়াতে পারে।


ওয়েব প্রকল্পগুলির জন্য, প্যাকেজের আকার নির্ধারণের জন্য একটি দুর্দান্ত সরঞ্জাম রয়েছে: https://bundlephobia.com । অবশ্যই, সার্ভার-সাইড রেন্ডারিং এবং গাছের ঝাঁকুনি আকার হ্রাস করতে পারে, তবে এটি সর্বদা যাচাই করা দরকার।


একটি জনপ্রিয় উদাহরণ হল তারিখ ম্যানিপুলেশন লাইব্রেরি। dayjs (2.9KB) দ্বারা প্রদত্ত কার্যকারিতা মোমেন্ট.js (72.1KB) বা date-fns (26.8KB) ইনস্টল করার প্রয়োজনীয়তা দূর করে যথেষ্ট হতে পারে।


7. নির্ভরশীলতার সংখ্যা

উপরে তালিকাভুক্ত সমস্ত পয়েন্টগুলিকে, কিছু পরিমাণে, প্রকল্পের সম্পূর্ণ নির্ভরতা গাছের নির্ভরতার সংখ্যা দ্বারা গুণ করা হয়। সম্পূর্ণ নির্ভরতা গাছ পরীক্ষা করার জন্য একটি দুর্দান্ত সরঞ্জাম: https://npm.anvaka.com


8. লাইসেন্স

আপনি কি কখনও এই সম্পর্কে চিন্তা করেছেন? আমিও ছিল না. উদাহরণস্বরূপ, MIT এবং Apache 2.0 লাইসেন্সগুলি বাণিজ্যিক প্রকল্পগুলিতে লাইব্রেরিগুলির বিনামূল্যে ব্যবহারের অনুমতি দেয়, যখন কিছু GPL v2 লাইসেন্সের নির্দিষ্ট প্রয়োজনীয়তা এবং সীমাবদ্ধতা রয়েছে। আমাদের একটি প্রকল্পে, আমাদের সমস্ত নির্ভরশীল গাছের লাইসেন্স চেক করার জন্য একজন আইনজীবীর দ্বারা প্রস্তুত একটি টেবিল ছিল। তাই আপনি যদি লাইসেন্সে অস্বাভাবিক কিছু দেখতে পান, তাহলে অডিটের সময় সমস্যা এড়াতে একজন আইনজীবীর সাথে পরামর্শ করা ভালো। আমরা বৈধভাবে ইউটিলিটি ব্যবহার করে বিদ্যমান npm নির্ভরতা থেকে সমস্ত লাইসেন্স বের করতে পারি। PS আমি একজন আইনজীবী নই, এবং এটি আইনি পরামর্শ ছিল না। এটি একটি বিরল এবং বিশেষ কেস যে লাইসেন্সের কারণে কিছু উপযুক্ত নাও হতে পারে, তবে এটি এখনও সম্ভব।


শেষ !

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


আপনার হতে পারে কোনো মন্তব্য বা পরামর্শ বিনা দ্বিধায় দয়া করে. মন্তব্যে আপনার অভিজ্ঞতা শেয়ার করতে দ্বিধা করবেন না। আপনার পছন্দ এবং মন্তব্য আমাকে নতুন নিবন্ধ লিখতে অনুপ্রাণিত. শুভ রান্না :)