পারফ একটি কারণ। কখনও কখনও আপনার কীগুলি লুপ করতে হবে। এই কাজ করার বিভিন্ন উপায় আছে
for (let key in object) { ... }
for (let key in object) { if (object.hasOwnProperty(key) { ... } }
for (let key of Object.keys(object)) { ... }
আমি সাধারণত for of Object.keys()
এটি ব্যবহার করি কারণ এটি সঠিক কাজ করে এবং তুলনামূলকভাবে নিবিষ্ট, চেক যুক্ত করার দরকার নেই।
তবে, এটি অনেক ধীর ।
কেবল কারণটি Object.keys
ধীর বলে অনুমান করা সুস্পষ্ট, Object.keys()
একটি বরাদ্দ দিতে হবে। আসলে এএফএআইকে এর পর থেকে সমস্ত কীগুলির একটি অনুলিপি বরাদ্দ করতে হয়।
const before = Object.keys(object);
object.newProp = true;
const after = Object.keys(object);
before.join('') !== after.join('')
এটি সম্ভবত জেএস ইঞ্জিনটি এক প্রকার অপরিবর্তনীয় কী কাঠামো ব্যবহার করতে পারে যাতে এমন Object.keys(object)
একটি রেফারেন্স ফিরে আসে যা অপরিবর্তনীয় কীগুলির উপর পুনরুক্তি করে এবং এটি object.newProp
সম্পূর্ণ নতুন অপরিবর্তনীয় কী বস্তু তৈরি করে তবে যাই হোক না কেন, এটি 15x পর্যন্ত স্পষ্টভাবে ধীর
এমনকি চেকিং hasOwnProperty
2x পর্যন্ত ধীর হয়।
এগুলির সমস্ত বিষয় হ'ল যদি আপনার পারফেক্ট সংবেদনশীল কোড থাকে এবং কীগুলির উপর দিয়ে লুপ করতে হয় তবে আপনি for in
কল না করেই ব্যবহার করতে সক্ষম হতে চান hasOwnProperty
। আপনি যদি পরিবর্তন না করেন তবে আপনি এটি করতে পারেনObject.prototype
নোট করুন যে আপনি যদি Object.defineProperty
প্রোটোটাইপটি সংশোধন করতে ব্যবহার করেন তবে যদি আপনি যুক্ত জিনিসগুলি অঙ্কনীয় না হয় তবে তারা উপরের ক্ষেত্রে জাভাস্ক্রিপ্টের আচরণকে প্রভাবিত করবে না। দুর্ভাগ্যক্রমে, কমপক্ষে Chrome 83 এ তারা কার্য সম্পাদনকে প্রভাবিত করে।
আমি যে কোনও পারফেক্ট ইস্যুগুলিকে প্রদর্শিত হতে বাধ্য করার চেষ্টা করার জন্য 3000 অ-গণনাযোগ্য বৈশিষ্ট্য যুক্ত করেছি। শুধুমাত্র 30 টি বৈশিষ্ট্যযুক্ত পরীক্ষাগুলি খুব পারফেক্ট প্রভাব আছে কিনা তা বলার অপেক্ষা রাখে না।
https://jsperf.com/does-adding-non-enumerable-properties-affect-perf
ফায়ারফক্স 77 77 এবং সাফারি ১৩.১ অগমেন্টেড এবং অযৌক্তিক ক্লাসগুলির মধ্যে পারফেক্টের মধ্যে কোনও পার্থক্য দেখায়নি সম্ভবত v8 এই অঞ্চলে স্থির হয়ে উঠবে এবং আপনি পারফেক্ট সমস্যাগুলি উপেক্ষা করতে পারেন।
তবে, আমার গল্পটিও যুক্ত করুনArray.prototype.smoosh
। সংক্ষিপ্ত সংস্করণটি মটুলস, একটি জনপ্রিয় লাইব্রেরি, তাদের নিজস্ব তৈরি করেছে Array.prototype.flatten
। স্ট্যান্ডার্ড কমিটি একটি নেটিভ যুক্ত করার চেষ্টা করলে Array.prototype.flatten
তারা প্রচুর সাইট না ভাঙতে পারত। এই ডিভস যারা বিরতির বিষয়ে জানতে পেরেছিল তারা এস 5 পদ্ধতিটির নাম smoosh
কৌতুক হিসাবে রাখার পরামর্শ দিয়েছিল তবে লোকেরা বুঝতে পারে না যে এটি একটি রসিকতা ছিল। তারা flat
পরিবর্তে স্থিরflatten
গল্পটির নৈতিকতা হ'ল আপনার দেশীয় জিনিসগুলি প্রসারিত করা উচিত নয়। আপনি যদি নিজের জিনিসপত্র ভাঙার একই সমস্যার সমাধান করতে পারেন এবং আপনার নির্দিষ্ট গ্রন্থাগারটি MooTools এর মতো জনপ্রিয় না হয়ে থাকে তবে ব্রাউজার বিক্রেতারা আপনার যে সমস্যাটি করেছেন তার চারপাশে কাজ করার সম্ভাবনা কম। আপনার লাইব্রেরিটি যদি এটি জনপ্রিয় হয়ে ওঠে তবে আপনি যে সমস্যাটি করেছেন তা ঘিরে সবাইকে কাজ করতে বাধ্য করা একরকম অর্থ হবে। সুতরাং, দয়া করে নেটিভ অবজেক্টগুলি প্রসারিত করবেন না