এই প্রতিক্রিয়া হুক পারফরম্যান্স সমস্যাটি কীভাবে এড়ানো যায় তা এখানে

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

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

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

প্রতিক্রিয়া হুকসের আগে বিকল্পগুলি

মনে করুন আপনার কাছে কিছু ব্যয়বহুল গণনা রয়েছে যা আপনার উপাদানটি সেট আপ করার সময় একবারে করা দরকার, এবং মনে করুন যে সেই গণনাগুলি কিছু প্রপসের উপর নির্ভর করে। একটি সাধারণ ক্রিয়ামূলক উপাদান এখানে খুব খারাপ কাজ করে:

ব্যয়বহুল গণনা প্রতিবার যখন প্রতিবার করা হয় তখন এটি খুব খারাপ পারফরম্যান্সের ফলস্বরূপ।

শ্রেণি উপাদানগুলি কেবলমাত্র একবার প্রদত্ত ক্রিয়াকলাপ সম্পাদনের অনুমতি দিয়ে এটি উন্নত করে, উদাহরণস্বরূপ কনস্ট্রাক্টারে:

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

যাইহোক, শ্রেণিক উপাদানগুলির নিজস্ব ত্রুটি রয়েছে, যেমন অফিসিয়াল রিঅ্যাক্ট হুক্স নথিতে উল্লিখিত হয়েছে। এজন্য হুকস চালু হয়েছিল।

ইউজস্টেট সহ একটি নির্লজ্জ বাস্তবায়ন

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

যেহেতু এটি এমন একটি রাজ্য যা পরবর্তী রেন্ডারদের মধ্যে ভাগ করা হয়, তাই ব্যয়বহুল গণনাটি কেবল শ্রেণীর উপাদানগুলির মতোই প্রথমবার রেন্ডার করা হয়। আপনি ভুল.

কেন তা দেখতে, মনে রাখবেন যে নাইভহুকস কম্পোনেন্টটি কেবল একটি ফাংশন, এমন একটি ফাংশন যা প্রতিবারই এটি রেন্ডার করা হয়। এর অর্থ হ'ল ইউজস্টেটটি প্রতিবার রেন্ডার করা হয়। UseState কীভাবে কাজ করে তা একটি জটিল গল্প যা আমাদের উদ্বেগের দরকার নেই। যেটি গুরুত্বপূর্ণ তা ইউটিস্টেটকে বলা হয়: এটি রিটার্ন মান ব্যয়বহুল ক্যালকুলেশন সহ বলা হয়। যাইহোক, আমরা কেবল জানি আমরা এই রিটার্নটির মানটি কী তা যদি আমরা আসলে ব্যয়বহুল ক্যালকুলেশন কল করি। ফলস্বরূপ, আমাদের নাইভহুকস কম্পোনেন্টটি প্রতিটি রেন্ডারিংয়ের জন্য ব্যয়বহুল গণনা করার জন্য ডুমড হয়, ঠিক যেমনটি আমাদের আগের ফাংশনাল কম্পোনেন্ট যা স্টেট ব্যবহার করে নি।

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

ব্যয়বহুল গণনা মুখস্ত করার জন্য তিনটি উপায়

ভাগ্যক্রমে, প্রতিক্রিয়া হুকগুলি রাজ্য পরিচালনা করার জন্য তিনটি বিকল্প প্রস্তাব করে যা শ্রেণীর উপাদানগুলির মতো শক্তিশালী।

1. ব্যবহারমেমো

প্রথম বিকল্পটি হ'ল মেমো হুক ব্যবহার করুন:

থাম্বের নিয়ম হিসাবে, ব্যবহারের মেমো কেবল ব্যয়বহুল গণনা সম্পাদন করবে যদি আরগের মান পরিবর্তন হয়। তবে এটি কেবলমাত্র থাম্বের নিয়ম কারণ ভবিষ্যতের প্রতিক্রিয়াগুলি মাঝে মাঝে সঞ্চিত মানটিকে পুনরায় গণনা করতে পারে।

পরবর্তী দুটি বিকল্প আরও নির্ভরযোগ্য।

স্টেটের ব্যবহারের জন্য পাস করুন Pass

দ্বিতীয় বিকল্পটি স্টেট ব্যবহারের জন্য কোনও ফাংশনটি পাস করা হয়:

এই কার্যটি কেবল প্রথম রেন্ডারিংয়ের সময় ডাকা হয়। এটি অত্যন্ত দরকারী। (আপনি যদি রাজ্যে কোনও বর্তমান ফাংশন সংরক্ষণ করতে চান তবে আপনাকে এটি অন্য ফাংশনে অন্তর্ভুক্ত করতে হবে Otherwise

৩. ইউজারফ

তৃতীয় বিকল্পটি হ'ল ব্যবহারের রেফ হুক ব্যবহার করুন:

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

তুলনা

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

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