Lazy Loading একটি কৌশল যা মূলত একটি নির্দিষ্ট রিসোর্স বা তথ্য তখনই লোড করে যখন সেটি প্রয়োজন হয়, এর ফলে অ্যাপ্লিকেশনটি শুরুতে অপ্রয়োজনীয় রিসোর্স লোড করতে ব্যস্ত হয় না এবং কাজের গতিতে সহায়তা করে। ResourceBundle এর Lazy Loading এর মাধ্যমে আপনি প্রয়োজন না হওয়া পর্যন্ত রিসোর্স লোড করবেন না, যাতে অ্যাপ্লিকেশনটি আরও দ্রুত লোড হয়।
Java ResourceBundle ক্লাস সাধারণত নির্দিষ্ট .properties ফাইল বা XML ফাইল থেকে স্থানিকভাবে নির্দিষ্ট তথ্য লোড করে। আপনি যখন Java অ্যাপ্লিকেশনে বিভিন্ন ভাষার জন্য ResourceBundle ব্যবহার করেন, তখন আপনি Lazy Loading কৌশলটি ব্যবহার করতে পারেন, যা অ্যাপ্লিকেশনকে দ্রুততর এবং আরও স্মার্ট হতে সাহায্য করবে।
Lazy Loading এর ব্যবহার:
Java এ ResourceBundle ক্লাস স্বাভাবিকভাবেই একটি লোডিং কৌশল ব্যবহার করে যেখানে আপনি একবার রিসোর্স লোড করার পরে তা ক্যাশে থাকে এবং পরবর্তীতে আর লোড করতে হয় না। কিন্তু যদি আপনি সঠিকভাবে Lazy Loading প্রয়োগ করতে চান, তাহলে আপনাকে কাস্টম ক্লাস তৈরি করতে হবে, যা ResourceBundle লোডের প্রক্রিয়াকে বিলম্বিত করবে।
Lazy Loading এর জন্য কাস্টম ResourceBundle তৈরি করা
Java তে Lazy Loading প্রয়োগ করতে, আপনি ResourceBundle.Control ক্লাসটি ব্যবহার করতে পারেন। এই ক্লাসের মাধ্যমে আপনি রিসোর্স ফাইল লোড করার প্রক্রিয়া কাস্টমাইজ করতে পারবেন।
এখানে Lazy Loading প্রক্রিয়া দেখানো হলো:
১. Custom Control Class তৈরি করা
Java তে Lazy Loading প্রয়োগের জন্য, প্রথমে আপনাকে একটি কাস্টম ResourceBundle.Control তৈরি করতে হবে যা রিসোর্স লোডিংয়ের প্রক্রিয়াটি কাস্টমাইজ করবে। এই ক্লাসটি আপনাকে resource bundle লোড করার সময় নিয়ন্ত্রণ করতে সহায়তা করবে।
import java.util.ResourceBundle;
import java.util.Locale;
import java.util.List;
public class LazyLoadingControl extends ResourceBundle.Control {
@Override
public List<String> getFormats(String baseName) {
// শুধু প্রপার্টি ফাইল ফরম্যাট ব্যবহার হবে
return List.of("properties");
}
@Override
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload) {
// ResourceBundle লোড করার জন্য Lazy Loading কৌশল প্রয়োগ
try {
// শুধু তখনই রিসোর্স লোড হবে যখন প্রয়োজন হবে
if (reload) {
return super.newBundle(baseName, locale, format, loader, reload);
}
} catch (Exception e) {
e.printStackTrace();
}
return null; // কোন Bundle লোড না করার জন্য
}
}
এখানে newBundle মেথডের মাধ্যমে Lazy Loading কৌশল প্রয়োগ করা হয়েছে। আপনি যখন রিসোর্স লোড করতে চাইবেন তখন কেবলমাত্র সেটি লোড হবে।
২. ResourceBundle ব্যবহার করে Lazy Loading প্রয়োগ করা
এখন, আপনাকে ResourceBundle ক্লাসটি ব্যবহার করে Lazy Loading প্রয়োগ করতে হবে। এটি আপনার অ্যাপ্লিকেশনকে শুধুমাত্র সেই রিসোর্সগুলোর জন্য লোড করবে যেগুলোর প্রয়োজন আছে।
import java.util.Locale;
import java.util.ResourceBundle;
public class LazyLoadingExample {
public static void main(String[] args) {
// কাস্টম ResourceBundle Control ব্যবহার করা
ResourceBundle.Control control = new LazyLoadingControl();
// Locale নির্ধারণ
Locale locale = new Locale("en", "US"); // ইংরেজি (মার্কিন যুক্তরাষ্ট্র)
// ResourceBundle লোড করা
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, control);
// ResourceBundle থেকে মান বের করা
String greeting = bundle.getString("greeting");
System.out.println("Greeting: " + greeting);
}
}
এখানে ResourceBundle.getBundle() মেথডটি ব্যবহার করে কাস্টম Control ক্লাস দেয়া হয়েছে, যা Lazy Loading চালাবে। আপনি যখন একটি স্ট্রিং পেতে চান, তখন ResourceBundle তাতে প্রয়োজনীয় রিসোর্স লোড করবে।
৩. messages.properties ফাইল তৈরি করা
messages.properties ফাইল তৈরি করুন, যেখানে স্থানিকভাবে নির্দিষ্ট বার্তা থাকবে।
messages_en.properties (ইংরেজি ভাষার জন্য):
greeting=Welcome
farewell=Goodbye
messages_bn.properties (বাংলা ভাষার জন্য):
greeting=স্বাগতম
farewell=বিদায়
৪. Lazy Loading কৌশলের সুবিধা:
- প্রাথমিক লোডিং গতি: Lazy Loading ব্যবহার করলে প্রাথমিক লোডিংয়ের গতি বৃদ্ধি পায়, কারণ শুধুমাত্র প্রয়োজনীয় রিসোর্সগুলোই লোড হয়।
- মেমরি ব্যবস্থাপনা: এটি মেমরি ব্যবস্থাপনা উন্নত করে, কারণ অপ্রয়োজনীয় রিসোর্সগুলো লোড হবে না, যা অ্যাপ্লিকেশনের মেমরি খরচ কমায়।
- প্রযুক্তিগত সুবিধা: বড় অ্যাপ্লিকেশন এবং মাল্টি-ল্যাংগুয়েজ সাপোর্ট সিস্টেমে Lazy Loading কার্যকরী, বিশেষত যখন বিভিন্ন ভাষার অনেক রিসোর্স থাকে।
Java তে ResourceBundle এর মাধ্যমে Lazy Loading প্রয়োগ করলে আপনার অ্যাপ্লিকেশন আরও দ্রুত এবং কার্যকরী হয়ে উঠবে। এটি প্রাথমিক লোডিংয়ের সময় কমিয়ে আনে এবং অ্যাপ্লিকেশনকে সঠিকভাবে ম্যানেজ করতে সহায়তা করে, বিশেষত যখন আপনার অ্যাপ্লিকেশন অনেক ভাষা এবং স্থানিক নির্দিষ্ট ডেটা সমর্থন করে।
Read more