ইভেন্ট-চালিত পটভূমি স্ক্রিপ্টে স্থানান্তর করুন

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

একটি পারসিস্টেন্ট ব্যাকগ্রাউন্ড স্ক্রিপ্টকে ইভেন্ট-ভিত্তিক নন-পারসিস্টেন্ট মডেলে স্থানান্তরিত করে এক্সটেনশনের পারফরম্যান্স উন্নত করুন। ডিফল্টরূপে, "persistent" সেট করা থাকে।

অধ্যবসায়কে মিথ্যা হিসাবে চিহ্নিত করুন

এক্সটেনশন ম্যানিফেস্ট ফাইলে "background" কী-টি খুঁজুন, তারপর "persistent" ফিল্ডটি যোগ করুন অথবা আপডেট করে false করুন।

{
  "name": "My extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

যেসব ব্যাকগ্রাউন্ড স্ক্রিপ্ট এইচটিএমএল ফাইলের ওপর নির্ভর করে, তাদের ক্ষেত্রেও একই কথা প্রযোজ্য।

{
  "name": "My extension",
  ...
  "background": {
    "page": "background.html",
    "persistent": false
  },
  ...
}

পৃষ্ঠতল ইভেন্ট শ্রোতা

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

chrome.storage.local.get('runtimeEvents', function (events) {
  for (let event of events)
    chrome.runtime[event].addListener(listener);
});

এর পরিবর্তে, লিসেনারদেরকে শীর্ষ-স্তরে এবং অ-নেস্টেড রাখুন।

chrome.runtime.onStartup.addListener(function() {
  // run startup function
})

স্টোরেজে অবস্থার পরিবর্তন রেকর্ড করুন

স্টেট ও ভ্যালু সেট করতে এবং ফেরত দিতে স্টোরেজ এপিআই ব্যবহার করুন। লোকাল মেশিনে আপডেট করতে local.set ব্যবহার করুন।

  chrome.storage.local.set({ variable: variableInformation });

ওই ভেরিয়েবলের মানটি পেতে local.get ব্যবহার করুন।

chrome.storage.local.get(['variable'], function(result) {
  let awesomeVariable = result.variable;
  // Do something with awesomeVariable
});

টাইমারকে অ্যালার্মে রূপান্তর করুন

DOM-ভিত্তিক টাইমার, যেমন window.setTimeout() বা window.setInterval() , নন-পার্সিস্টেন্ট ব্যাকগ্রাউন্ড স্ক্রিপ্টে কার্যকর হয় না, যদি ইভেন্ট পেজটি নিষ্ক্রিয় থাকা অবস্থায় সেগুলো ট্রিগার হয়।

let timeout = 1000 * 60 * 3;  // 3 minutes in milliseconds
window.setTimeout(function() {
  alert('Hello, world!');
}, timeout);

এর পরিবর্তে, অ্যালার্ম এপিআই (API) ব্যবহার করুন।

chrome.alarms.create({delayInMinutes: 3.0})

এরপর একটি লিসেনার যোগ করুন।

chrome.alarms.onAlarm.addListener(function() {
  alert("Hello, world!")
});

ব্যাকগ্রাউন্ড স্ক্রিপ্ট ফাংশনগুলির জন্য কল আপডেট করুন

ব্যাকগ্রাউন্ড পেজ থেকে কোনো ফাংশন কল করার জন্য যদি extension.getBackgroundPage ব্যবহার করেন, তাহলে এটিকে runtime.getBackgroundPage এ আপডেট করুন। নতুন পদ্ধতিটি নন-পার্সিস্টেন্ট স্ক্রিপ্টটি রিটার্ন করার আগে সেটিকে সক্রিয় করে।

function backgroundFunction() {
  alert('Background, reporting for duty!')
}
document.getElementById('target').addEventListener('click', function(){
  chrome.extension.getBackgroundPage().backgroundFunction();
});

এই পদ্ধতিটি কাজ করবে না যদি ব্যাকগ্রাউন্ড স্ক্রিপ্টটি নিষ্ক্রিয় থাকে, যা একটি নন-পার্সিস্টেন্ট স্ক্রিপ্টের ডিফল্ট অবস্থা। নতুন পদ্ধতিটিতে একটি কলব্যাক ফাংশন অন্তর্ভুক্ত রয়েছে যা ব্যাকগ্রাউন্ড স্ক্রিপ্টটি লোড হয়েছে কিনা তা নিশ্চিত করে।

document.getElementById('target').addEventListener('click', function() {
  chrome.runtime.getBackgroundPage(function(backgroundPage){
    backgroundPage.backgroundFunction()
  })
});