প্রকাশিত: ২০ জুলাই, ২০১৮
ভূমিকা
NoState Prefetch হল Chrome-এর একটি নতুন প্রক্রিয়া যা অবচিত প্রি-রেন্ডারিং প্রক্রিয়ার বিকল্প, যা <link rel="prerender"> এর মতো বৈশিষ্ট্যগুলিকে শক্তিশালী করতে ব্যবহৃত হয়। প্রি-রেন্ডারিংয়ের মতো, এটি আগে থেকে রিসোর্স আনে; কিন্তু প্রি-রেন্ডারিংয়ের মতো এটি জাভাস্ক্রিপ্ট চালায় না বা পৃষ্ঠার কোনও অংশ আগে থেকে রেন্ডার করে না। NoState Prefetch-এর লক্ষ্য হল প্রি-রেন্ডারিংয়ের তুলনায় কম মেমরি ব্যবহার করা, একই সাথে পৃষ্ঠা লোডের সময় কমানো।
NoState Prefetch কোন API নয় বরং Chrome দ্বারা বিভিন্ন API এবং বৈশিষ্ট্য বাস্তবায়নের জন্য ব্যবহৃত একটি প্রক্রিয়া। Resource Hints API , সেইসাথে Chrome ঠিকানা বার দ্বারা পৃষ্ঠাগুলির প্রিফেচিং, উভয়ই NoState Prefetch ব্যবহার করে বাস্তবায়িত হয়। আপনি যদি Chrome 63 বা তার পরবর্তী সংস্করণ ব্যবহার করেন, তাহলে আপনার ব্রাউজার ইতিমধ্যেই <link rel="prerender"> এর মতো বৈশিষ্ট্যগুলির জন্য NoState Prefetch ব্যবহার করছে।
এই নিবন্ধটি NoStatePrefetch কীভাবে কাজ করে, এটি প্রবর্তনের প্রেরণা এবং Chrome এর হিস্টোগ্রাম ব্যবহার করে এর ব্যবহারের পরিসংখ্যান দেখার নির্দেশাবলী ব্যাখ্যা করে।
প্রেরণা
NoState Prefetch প্রবর্তনের পিছনে দুটি প্রাথমিক প্রেরণা ছিল:
মেমোরির ব্যবহার কমানো
NoState Prefetch শুধুমাত্র ~45MiB মেমোরি ব্যবহার করে। NoState Prefetch-এর জন্য প্রিলোড স্ক্যানার রক্ষণাবেক্ষণ করাই প্রাথমিক মেমোরি খরচ এবং বিভিন্ন ব্যবহারের ক্ষেত্রে এই খরচ তুলনামূলকভাবে স্থির থাকে। ফেচের আকার বা ভলিউম বৃদ্ধি করলে NoState Prefetch কত মেমোরি ব্যবহার করে তার উপর উল্লেখযোগ্য প্রভাব পড়ে না।
বিপরীতে, প্রি-রেন্ডারিং সাধারণত ১০০MiB মেমোরি খরচ করে এবং মেমোরি খরচ ১৫০MiB-তে সীমাবদ্ধ থাকে। এই উচ্চ মেমোরি খরচ এটিকে লো-এন্ড (অর্থাৎ <= ৫১২MB RAM) ডিভাইসের জন্য অনুপযুক্ত করে তোলে। ফলস্বরূপ, Chrome লো-এন্ড ডিভাইসগুলিতে প্রি-রেন্ডারিং করে না এবং পরিবর্তে প্রি-কানেক্ট করবে।
নতুন ওয়েব প্ল্যাটফর্ম বৈশিষ্ট্যগুলির সহায়তা সহজতর করুন
প্রি-রেন্ডারিং এর মাধ্যমে, কোনও ব্যবহারকারী-মুখী (যেমন, সঙ্গীত বা ভিডিও চালানো) বা স্টেটফুল অ্যাকশন (যেমন, মিউটেটিং সেশন বা স্থানীয় স্টোরেজ) হওয়া উচিত নয়। তবে, একটি পৃষ্ঠা রেন্ডার করার সময় এই অ্যাকশনগুলি প্রতিরোধ করা কঠিন এবং জটিল হতে পারে। NoState Prefetch শুধুমাত্র আগে থেকে রিসোর্স আনে: এটি কোড কার্যকর করে না বা পৃষ্ঠা রেন্ডার করে না। এটি ব্যবহারকারী-মুখী এবং স্টেটফুল অ্যাকশনগুলি প্রতিরোধ করা সহজ করে তোলে।
বাস্তবায়ন
নিম্নলিখিত ধাপগুলি ব্যাখ্যা করে যে NoState Prefetch কীভাবে কাজ করে।
NoStatePrefetch ট্রিগার করা হয়েছে।
একটি প্রিরেন্ডার রিসোর্স ইঙ্গিত (অর্থাৎ
<link rel="prerender">) এবং কিছু Chrome বৈশিষ্ট্য NoState Prefetch ট্রিগার করবে যদি নিম্নলিখিত দুটি শর্ত পূরণ করা হয়: a) ব্যবহারকারী একটি লো-এন্ড ডিভাইসে না থাকে, এবং b) ব্যবহারকারী একটি সেলুলার নেটওয়ার্কে না থাকে।NoState Prefetch-এর জন্য একটি নতুন, ডেডিকেটেড রেন্ডারার তৈরি করা হয়েছে।
ক্রোমে, " রেন্ডারার " হল একটি প্রক্রিয়া যা একটি HTML ডকুমেন্ট গ্রহণ, বিশ্লেষণ, রেন্ডার ট্রি তৈরি এবং ফলাফলটি স্ক্রিনে আঁকার জন্য দায়ী। ক্রোমের প্রতিটি ট্যাব, সেইসাথে প্রতিটি NoState Prefetch প্রক্রিয়ার আইসোলেশন প্রদানের জন্য নিজস্ব রেন্ডারার থাকে। এটি কিছু ভুল হওয়ার (যেমন, একটি ট্যাব ক্র্যাশিং) প্রভাব কমাতে সাহায্য করে এবং ক্ষতিকারক কোডকে অন্যান্য ট্যাব বা সিস্টেমের অন্যান্য অংশে অ্যাক্সেস করা থেকে বিরত রাখে।
The resource that is being loaded with NoState Prefetch is fetched. The HTMLPreloadScanner then scans this resource to discover any subresources that need to be fetched. If the main resource or any of its subresources has a registered service worker, these requests will go through the appropriate service worker.
NoState Prefetch শুধুমাত্র GET HTTP পদ্ধতি সমর্থন করে; এটি এমন কোনও সাবরিসোর্স আনবে না যার জন্য অন্যান্য HTTP পদ্ধতি ব্যবহারের প্রয়োজন হয়। এছাড়াও, এটি এমন কোনও রিসোর্স আনবে না যার জন্য ব্যবহারকারীর ক্রিয়াকলাপের প্রয়োজন হয় (যেমন, প্রমাণীকরণ পপআপ, SSL ক্লায়েন্ট সার্টিফিকেট, বা ম্যানুয়াল ওভাররাইড)।
যেসব সাবরিসোর্স আনা হবে সেগুলো "আইডিএল" নেট অগ্রাধিকার সহ আনা হবে।
"আইডিএল" নেট অগ্রাধিকার হল ক্রোমে সর্বনিম্ন সম্ভাব্য নেট অগ্রাধিকার।
NoState Prefetch দ্বারা প্রাপ্ত সমস্ত রিসোর্স তাদের ক্যাশে হেডার অনুসারে ক্যাশে করা হয়।
NoState Prefetch
no-storeক্যাশ-কন্ট্রোল হেডার ছাড়া সকল রিসোর্স ক্যাশ করবে। যদিVaryরেসপন্স হেডার,no-cacheক্যাশ-কন্ট্রোল হেডার থাকে, অথবা রিসোর্সটি ৫ মিনিটের বেশি পুরনো হয়, তাহলে ব্যবহারের আগে রিসোর্সটি পুনরায় যাচাই করা হবে।সমস্ত সাবরিসোর্স লোড হওয়ার পরে রেন্ডারারটি বন্ধ হয়ে যায়।
যদি সাবরিসোর্সের সময় শেষ হয়ে যায়, তাহলে ৩০ সেকেন্ড পরে রেন্ডারারটি বন্ধ হয়ে যাবে।
কুকি স্টোর এবং স্থানীয় DNS ক্যাশে আপডেট করা ছাড়া ব্রাউজারটি কোনও অবস্থা পরিবর্তন করে না। এটি উল্লেখ করা গুরুত্বপূর্ণ কারণ এটি "NoState Prefetch"-এ "NoState"।
"স্বাভাবিক" পৃষ্ঠা লোড প্রক্রিয়ার এই পর্যায়ে, ব্রাউজার সম্ভবত এমন কিছু করবে যা ব্রাউজারের অবস্থা পরিবর্তন করবে: উদাহরণস্বরূপ, জাভাস্ক্রিপ্ট চালানো,
sessionStorageবাlocalStorageপরিবর্তন করা, সঙ্গীত বা ভিডিও চালানো, History API ব্যবহার করা, অথবা ব্যবহারকারীকে প্রম্পট করা। NoState Prefetch-এ যে একমাত্র অবস্থা পরিবর্তন ঘটে তা হল প্রতিক্রিয়া আসার সময় DNS ক্যাশে আপডেট করা এবং যদি কোনও প্রতিক্রিয়ায়Set-Cookieহেডার থাকে তবে কুকি স্টোর আপডেট করা।যখন রিসোর্সটির প্রয়োজন হয়, তখন এটি ব্রাউজার উইন্ডোতে লোড করা হয়।
তবে, একটি প্রি-রেন্ডার করা পৃষ্ঠার বিপরীতে, পৃষ্ঠাটি তাৎক্ষণিকভাবে দৃশ্যমান হবে না - এটি এখনও ব্রাউজার দ্বারা রেন্ডার করা প্রয়োজন। ব্রাউজারটি NoState Prefetch এর জন্য ব্যবহৃত রেন্ডারারটি পুনরায় ব্যবহার করবে না এবং পরিবর্তে একটি নতুন রেন্ডারার ব্যবহার করবে। পৃষ্ঠাটি আগে থেকে রেন্ডার না করলে NoStatePrefetch এর মেমরি খরচ কমবে, তবে এটি পৃষ্ঠা লোড সময়ের উপর এর সম্ভাব্য প্রভাবও কমিয়ে দেবে।
যদি পৃষ্ঠাটিতে কোনও পরিষেবা কর্মী থাকে, তাহলে এই পৃষ্ঠা লোডটি আবার পরিষেবা কর্মীর মাধ্যমে যাবে।
যদি NoState Prefetch পৃষ্ঠাটি প্রয়োজনের সময়ের মধ্যে সাবরিসোর্স আনা শেষ না করে, তাহলে ব্রাউজারটি NoState Prefetch যেখান থেকে বন্ধ করে দিয়েছিল সেখান থেকে পৃষ্ঠা লোড প্রক্রিয়াটি চালিয়ে যাবে। ব্রাউজারটিকে এখনও রিসোর্স আনতে হবে, তবে NoState Prefetch শুরু না করলে যতটা প্রয়োজন হত ততটা নয়।
ওয়েব অ্যানালিটিক্সের উপর প্রভাব
NoState Prefetch ব্যবহার করে লোড করা পৃষ্ঠাগুলি ওয়েব অ্যানালিটিক্স টুল দ্বারা কিছুটা ভিন্ন সময়ে নিবন্ধিত হয়, যা টুলটি ক্লায়েন্ট-সাইড বা সার্ভার-সাইড থেকে ডেটা সংগ্রহ করে কিনা তার উপর নির্ভর করে।
ক্লায়েন্ট-সাইড অ্যানালিটিক্স স্ক্রিপ্টগুলি যখন ব্যবহারকারীকে পৃষ্ঠাটি দেখানো হয় তখন একটি পৃষ্ঠা দর্শন নিবন্ধন করে। এই স্ক্রিপ্টগুলি জাভাস্ক্রিপ্টের সম্পাদনার উপর নির্ভর করে এবং NoState Prefetch কোনও জাভাস্ক্রিপ্ট কার্যকর করে না।
সার্ভার-সাইড অ্যানালিটিক্স টুলগুলি যখন কোনও অনুরোধ পরিচালনা করা হয় তখন মেট্রিক্স নিবন্ধন করে। NoState Prefetch এর মাধ্যমে লোড করা রিসোর্সের ক্ষেত্রে, যখন কোনও অনুরোধ পরিচালনা করা হয় এবং ক্লায়েন্ট দ্বারা প্রতিক্রিয়াটি আসলে ব্যবহৃত হয় (যদি এটি আদৌ ব্যবহৃত হয়) তার মধ্যে একটি উল্লেখযোগ্য সময়ের ব্যবধান থাকতে পারে। Chrome 69 থেকে, NoState Prefetch সমস্ত অনুরোধগুলিকে সাধারণ ব্রাউজিং থেকে আলাদা করার জন্য Purpose: Prefetch প্রিফেচ শিরোনাম যুক্ত করে।
এটা দেখো
NoStatePrefetch ডিসেম্বর ২০১৭ সালে Chrome 63-এ পাঠানো হয়েছিল। বর্তমানে এটি ব্যবহার করা হচ্ছে:
-
prerenderরিসোর্স ইঙ্গিতটি বাস্তবায়ন করুন - গুগল সার্চ ফলাফলে প্রথম ফলাফলটি আনুন
- Chrome অ্যাড্রেস বারে ভবিষ্যদ্বাণী করা পৃষ্ঠাগুলি পরবর্তীতে দেখা হতে পারে এমন পৃষ্ঠাগুলি আনুন
আপনি NoStatePrefetch কীভাবে ব্যবহার করছেন তা দেখতে Chrome Internals ব্যবহার করতে পারেন।
NoState Prefetch দিয়ে লোড করা সাইটের তালিকা দেখতে, chrome://net-internals/#prerender এ যান।
আপনার NoState Prefetch ব্যবহারের পরিসংখ্যান দেখতে, chrome://histograms- এ যান এবং "NoStatePrefetch" অনুসন্ধান করুন। তিনটি ভিন্ন NoState Prefetch হিস্টোগ্রাম রয়েছে - NoState Prefetch-এর প্রতিটি ব্যবহারের ক্ষেত্রে একটি করে:
- “NoStatePrefetch” (প্রিরেন্ডার রিসোর্স ইঙ্গিত দ্বারা ব্যবহারের পরিসংখ্যান)
- “gws_NoStatePrefetch” (গুগল সার্চ ফলাফল পৃষ্ঠার ব্যবহারের পরিসংখ্যান)
- “omnibox_NoStatePrefetch” (Chrome ঠিকানা বার দ্বারা ব্যবহারের পরিসংখ্যান)