এক্সটেনশন বার্তা পোর্ট সহ BFCache আচরণে পরিবর্তন

ব্যাক/ফরওয়ার্ড ক্যাশে (বা BFCache) হল একটি ব্রাউজার অপ্টিমাইজেশান যা তাত্ক্ষণিক ব্যাক এবং ফরোয়ার্ড নেভিগেশন সক্ষম করে। আমরা Chrome BFCache-এ পরিবর্তন করছি যা সম্ভাব্যভাবে বার্তা পোর্ট ব্যবহার করে এক্সটেনশনকে প্রভাবিত করে। আপনি যদি একটি Chrome এক্সটেনশনের মালিক হন যা সামগ্রী স্ক্রিপ্ট এবং আপনার এক্সটেনশনের মধ্যে যোগাযোগ করতে মেসেজিং ব্যবহার করে, তাহলে কীভাবে আপনার এক্সটেনশন পরীক্ষা এবং মানিয়ে নেওয়া যায় সে সম্পর্কে জানতে পড়ুন।

এক্সটেনশন বার্তা পোর্ট

এক্সটেনশনগুলি বার্তা পাঠানোর মাধ্যমে বিষয়বস্তু স্ক্রিপ্ট বা অন্যান্য এক্সটেনশনের সাথে যোগাযোগ করে। runtime.sendMessage() এবং tabs.sendMessage() এ কল করে বা পুনরায় ব্যবহারযোগ্য বার্তা পোর্ট ব্যবহার করে এককালীন অনুরোধ ব্যবহার করে বার্তা পাঠানো যেতে পারে। যতক্ষণ পোর্ট সক্রিয় থাকে, ততক্ষণ কন্টেন্ট স্ক্রিপ্ট এবং এক্সটেনশন ব্যাকগ্রাউন্ড স্ক্রিপ্ট উভয়ই একে অপরের কাছে বার্তা পোস্ট করতে পোর্টটিকে পুনরায় ব্যবহার করতে পারে।

আরও তথ্যের জন্য, বার্তা পাসিং দেখুন।

ব্যাক/ফরওয়ার্ড ক্যাশে

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

পৃষ্ঠাটি BFCache-এ থাকাকালীন, এটি একটি হিমায়িত অবস্থায় রয়েছে যেখানে কোনও জাভাস্ক্রিপ্ট এক্সিকিউশন অনুমোদিত নয়৷ এর মানে হল যে এটি প্রাপ্ত বার্তাগুলি প্রক্রিয়া করতে পারে না।

আরও তথ্যের জন্য, ব্যাক/ফরওয়ার্ড ক্যাশে দেখুন।

BFCache-এ এক্সটেনশন মেসেজ পোর্টের প্রভাব

সংক্ষেপে, BFCache-এ একটি পৃষ্ঠায় বার্তা পাঠানোর এক্সটেনশন ক্যাশে উচ্ছেদের কারণ হতে পারে এবং কর্মক্ষমতা প্রভাবিত করতে পারে।

যখন একটি খোলা এক্সটেনশন বার্তা পোর্ট সহ একটি পৃষ্ঠা BFCache এ সংরক্ষণ করা হয়, তখন পোর্টটি খোলা থাকে। একবার BFCache থেকে পৃষ্ঠাটি পুনরুদ্ধার করা হলে, বার্তা পোর্টের পুরানো রেফারেন্সটি এখনও কন্টেন্ট স্ক্রিপ্টে বার্তা পোস্ট করতে এক্সটেনশন পরিষেবা কর্মীরা ব্যবহার করতে পারেন।

যাইহোক, যদি এক্সটেনশনটি সেই বার্তা পোর্টের মাধ্যমে একটি বার্তা পোস্ট করার চেষ্টা করে যখন পৃষ্ঠাটি এখনও BFCache-এ থাকে, বার্তাটি পাঠানো হয় কিন্তু সম্পূর্ণরূপে বিতরণ করা হয় না কারণ হ্যান্ডলারটি হিমায়িত থাকে৷ এই পরিস্থিতি সম্পর্কে যুক্তি দেওয়া এবং তার সমাধান করা এক্সটেনশনের পক্ষে চ্যালেঞ্জিং, কারণ বার্তাটি সারিবদ্ধ করা এবং ড্রপ করা উভয়েরই নিজস্ব সমস্যা রয়েছে৷

হারিয়ে যাওয়া বার্তাগুলির সাথে সম্পর্কিত সমস্যাগুলি এড়াতে, Chrome এর বর্তমান বাস্তবায়নে, এটি হোস্ট পৃষ্ঠাটিকে BFCache থেকে উচ্ছেদ করে এবং বার্তাটি বাতিল করে। ব্যবহারকারী যদি পৃষ্ঠায় ফিরে যান, তাহলে এটি নতুনভাবে লোড হবে, এক্সটেনশনটিকে একটি নতুন সংযোগ সেট আপ করার অনুমতি দেবে৷

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

সামগ্রিক কর্মক্ষমতা উন্নত করতে, আমরা একটি নতুন বার্তা পোর্ট আচরণ চালু করার পরিকল্পনা করছি।

নতুন আচরণ: পৃষ্ঠাটি BFCache এ সংরক্ষণ করা হলে বার্তা চ্যানেল বন্ধ করা

Chrome 123 থেকে শুরু করে, যখন একটি খোলা এক্সটেনশন বার্তা পোর্ট সহ একটি পৃষ্ঠা BFCache-এ সংরক্ষণ করা হয়, তখন অন্তর্নিহিত বার্তা চ্যানেলটি কন্টেন্ট স্ক্রিপ্টের দিক থেকে সক্রিয়ভাবে বন্ধ হয়ে যায়। ফলস্বরূপ, সমস্ত বার্তা পোর্ট বন্ধ হয়ে যাবে, এবং এক্সটেনশনটি একটি onDisconnect ইভেন্ট পাবে।

চ্যানেলটি বন্ধ থাকায়, BFCache-এ থাকা অবস্থায় পেজে কোনো বার্তা পাঠানো হবে না। তাই, এক্সটেনশনের কারণে পৃষ্ঠাটি উচ্ছেদ করা হবে না।

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

// content script

let port;

window.addEventListener('pageshow', (event) => {
  if (event.persisted) {
    // The page is restored from BFCache, set up a new connection.
    port = chrome.runtime.connect();
  }
});

বিভিন্ন ব্রাউজারের প্রতিনিধিদের থেকে WECG কথোপকথন সম্পর্কে আরও পড়ুন (ইস্যু 474 এর অধীনে)।

আমি কি প্রভাবিত?

নতুন আচরণ Chrome 123-এ একটি পতাকার পিছনে উপলব্ধ হবে যাতে আপনি আপনার কোড পরীক্ষা করতে পারেন। আরও তথ্যের জন্য টাইমলাইন দেখুন। আপনার এক্সটেনশন পরীক্ষা করতে অনুসরণ করা পদক্ষেপগুলি ব্যবহার করুন৷ মনে রাখবেন যে এটি শুধুমাত্র একটি সাধারণ পরীক্ষা প্রদান করে এবং আমরা আপনাকে নির্দিষ্ট সময়ের জন্য সক্রিয় বৈশিষ্ট্য সহ Chrome চালানোর জন্য উত্সাহিত করি কারণ এক্সটেনশনের কোন বৈশিষ্ট্যগুলি সমস্যার কারণ হতে পারে তা অনুমান করা কঠিন।

  1. নিশ্চিত করুন যে Chrome সংস্করণটি কমপক্ষে 123। আদর্শভাবে, ক্রোম ক্যানারি ব্যবহার করুন, যাতে পরীক্ষা করা সহজ করতে একটি অতিরিক্ত সতর্কতা রয়েছে।
  2. নিম্নলিখিত পতাকা সহ Chrome চালু করুন:

    --disable-features=DisconnectExtensionMessagePortWhenPageEntersBFCache
    
  3. এক্সটেনশন চলমান ছাড়াই BFCache-এর জন্য যোগ্য এমন একটি পৃষ্ঠায় যান (উদাহরণস্বরূপ, কিছু সাধারণ সাইট যেমন https://example.com/ )। এটি BFCache থেকে পুনরুদ্ধার করা হয়েছে তা নিশ্চিত করতে BFCache টিউটোরিয়াল অনুসরণ করুন।

  4. এক্সটেনশনটি ইনস্টল এবং সক্ষম করুন এবং আবার BFCache যোগ্যতা পরীক্ষা করুন। আপনি ম্যানুয়ালি দূরে নেভিগেট করতে পারেন, কিছু সময়ের জন্য অপেক্ষা করুন যা আপনার এক্সটেনশনের জন্য BFCached পৃষ্ঠায় একটি বার্তা পোস্ট করার জন্য যথেষ্ট, এবং ফিরে নেভিগেট করুন।

  5. যদি একটি উচ্ছেদের কারণে পৃষ্ঠাটি BFCache থেকে তাজা লোড করতে হয় এবং পুনরুদ্ধার প্রতিরোধের সমস্যাটি "ExtensionSentMessageToCachedFrame" হয়, তাহলে এক্সটেনশনটি এই পরিবর্তনের দ্বারা প্রভাবিত হতে পারে৷

    Chrome Canary 124.0.6315.0 এবং নতুনটিতে, আপনি পৃষ্ঠায় নিম্নলিখিত সতর্কতাও দেখতে পাবেন:

    BFCache থেকে একটি পৃষ্ঠা পুনরুদ্ধার না হলে সতর্কতা দেখানো হয়।
    BFCache থেকে একটি পৃষ্ঠা পুনরুদ্ধার না হলে সতর্কতা দেখানো হয়।

একবার এটি নিশ্চিত হয়ে গেলে যে এক্সটেনশনটি BFCache পৃষ্ঠায় বার্তা পোস্ট করছে, আপনি পরীক্ষাটি সক্রিয় করার জন্য এই পদক্ষেপগুলি অনুসরণ করতে পারেন এবং কোন যুক্তি ভঙ্গ হলে তা পর্যবেক্ষণ করতে পারেন৷

  1. নিম্নলিখিত পতাকা সহ Chrome চালু করুন:

    --enable-features=DisconnectExtensionMessagePortWhenPageEntersBFCache
    
  2. "ExtensionSentMessageToCachedFrame" এর কারণে BFCache থেকে পুনরুদ্ধার করা হয়নি এমন পৃষ্ঠায় যান।

  3. দূরে এবং পিছনে নেভিগেট করুন. পৃষ্ঠাটি এখন পুনরুদ্ধার করা উচিত, তবে বিষয়বস্তু স্ক্রিপ্ট এবং পরিষেবা কর্মীর মধ্যে বার্তা চ্যানেলটি সংযোগ বিচ্ছিন্ন করা উচিত।

  4. এক্সটেনশনটি এখনও স্বাভাবিক হিসাবে কাজ করে কিনা তা পরীক্ষা করুন, যদি না হয়, তাহলে পূর্ববর্তী বিভাগে প্রদর্শিত হিসাবে আপনাকে ম্যানুয়ালি পুনরায় সংযোগ করতে হবে।

রিলিজ টাইমলাইন

আমরা Chrome 123 থেকে শুরু করে ধীরে ধীরে নতুন আচরণের র‌্যাম্প করার পরিকল্পনা করছি। এখানে বিস্তারিত পরিকল্পনা রয়েছে:

তারিখ পরিকল্পিত মাইলফলক
15 ফেব্রুয়ারি Chrome Canary এবং Dev-এ নতুন আচরণের জন্য পরীক্ষা শুরু করুন।
1 মার্চ Chrome বিটাতে নতুন আচরণের জন্য পরীক্ষা শুরু করুন।
18 মার্চ Chrome Stable-এর 4 শতাংশ ব্যবহারকারীর কাছে নতুন আচরণ প্রকাশ করুন।
25 মার্চ Chrome Stable-এর 50 শতাংশ ব্যবহারকারীর কাছে নতুন আচরণ প্রকাশ করুন।
এপ্রিল ২ পরীক্ষা শেষ হয়, নতুন আচরণকে ডিফল্ট হিসাবে তৈরি করে।