জাভাস্ক্রিপ্টে মেমরি ব্যবহার অপ্টিমাইজেশন
সমস্ত তৈরি করা ভেরিয়েবল কম্পিউটারের র্যাম মেমরিতে সংরক্ষিত থাকে। কখনও কখনও অবিবেচনাপূর্ণ কোড লেখা মেমরি ব্যবহার হঠাৎ করেই বাড়িয়ে দিতে পারে।
আসুন একটি উদাহরণ দেখি।
ধরুন আমাদের কাছে 1 থেকে
100000000 পর্যন্ত পূর্ণসংখ্যার যোগফল
বের করার কাজ আছে।
ধরুন আমাদের কাছে একটি ফাংশন আছে
যা একটি অ্যারে প্রদত্ত পরিসীমা থেকে
পূর্ণসংখ্যা দিয়ে পূরণ করে:
javascriptfunction fillArr(a, b) {
let res = [];
for (let i = a; i <= b; i++) {
res.push(i);
}
return res;
}
ধরুন আমাদের কাছে আরও একটি ফাংশন আছে যা অ্যারের উপাদানগুলির যোগফল বের করে:
javascriptfunction getSum(arr) {
let sum = 0;
for (let elem of arr) {
sum += elem
}
return sum;
}
এই ফাংশনগুলির সংমিশ্রণ ব্যবহার করে প্রদত্ত কাজটি সহজেই সমাধান করা যেতে পারে:
javascriptlet sum = getSum(fillArr(1, 100000000));
একটি মার্জিত সমাধান হয়েছে। তবে, এতে একটি সমস্যা আছে: এটি বিপুল পরিমাণ র্যাম মেমরি ব্যবহার করে।
আসুন গণনা করি। fillArr ফাংশনটি
100000000 সংখ্যা সহ একটি অ্যারে তৈরি করে।
ধরুন জাভাস্ক্রিপ্ট প্রতি সংখ্যার জন্য 2 বাইট
বরাদ্দ করে - তাহলে আমাদের অ্যারে সংরক্ষণ করতে
200000000 বাইটের প্রয়োজন হবে, অর্থাৎ প্রায়
200 মেগাবাইট র্যাম মেমরি।
কিন্তু আসলে র্যাম মেমরির প্রয়োজন হবে এর চেয়ে অনেক বেশি কারণ জাভাস্ক্রিপ্টে অ্যারে সংরক্ষণ করার সময় প্রচুর ওভারহেড থাকে।
সমস্যাটি বোঝার পরে, এমন একটি ফাংশন তৈরি করা সহজ যা কাজটি সমাধান করে এবং কার্যত র্যাম মেমরি ব্যবহার করে না:
javascriptfunction getNumsSum(max) {
let sum = 0;
for (let i = 1; i <= max; i++) {
sum += i;
}
return sum;
}
আসুন আমাদের ফাংশন দিয়ে কাজটি সমাধান করি:
javascriptlet sum = getNumsSum(100000000);
একজন প্রোগ্রামারের কাছে 7 দ্বারা নিঃশেষে বিভাজ্য
সংখ্যার সংখ্যা, একটি নির্দিষ্ট পরিসরে অবস্থিত,
বের করার কাজ ছিল। তিনি এটি নিম্নলিখিতভাবে সমাধান করেছেন:
javascriptlet arr = [];
for (let i = 0; i <= 1000; i++) {
if (i % 7 == 0) {
arr.push(i);
}
}
console.log(arr.length);
ব্যাখ্যা করুন, এই কোডটির কী সমস্যা। কোডটিকে আরও অনুকূল করে পুনরায় লিখুন।
একজন প্রোগ্রামারের কাছে একটি সংখ্যার ভাজকের যোগফল বের করার কাজ ছিল। তিনি এটি নিম্নলিখিতভাবে সমাধান করেছেন:
javascriptfunction getDivisors(num) {
let res = [];
for (let i = 1; i <= num; i++) {
if (num % i === 0) {
res.push(i);
}
}
return res;
}
function getSum(arr) {
let sum = 0;
for (let elem of arr) {
sum += elem
}
return sum;
}
let sum = getSum(getDivisors(320));
console.log(sum);
ব্যাখ্যা করুন, এই কোডটির কী সমস্যা। কোডটিকে আরও অনুকূল করে পুনরায় লিখুন।