ব্যাকগ্রাউন্ড সিঙ্ক্রোনাইজেশন হল একটি নতুন ওয়েব API যা ব্যবহারকারীর স্থিতিশীল সংযোগ না পাওয়া পর্যন্ত আপনাকে ক্রিয়াকলাপ স্থগিত করতে দেয়। এটি নিশ্চিত করে যে ব্যবহারকারী যা পাঠাতে চায় তা আসলে পাঠানো হয়েছে।
সমস্যা
ইন্টারনেট সময় নষ্ট করার জন্য একটি দুর্দান্ত জায়গা। ইন্টারনেটে সময় নষ্ট না করে, আমরা জানতাম না বিড়ালরা ফুল অপছন্দ করে , গিরগিটিরা বুদবুদ পছন্দ করে , অথবা আমাদের নিজস্ব এরিক বিডেলম্যান 90 এর দশকের শেষের দিকের একজন পুট পুট গল্ফিং হিরো ।
কিন্তু মাঝে মাঝে, শুধু মাঝে মাঝে, আমরা সময় নষ্ট করতে চাই না। পছন্দসই ব্যবহারকারীর অভিজ্ঞতা আরও ভালো:
- পকেট থেকে ফোন বেরিয়েছে।
- ছোট লক্ষ্য অর্জন করুন।
- ফোন পকেটে ফেরত।
- জীবন পুনরায় শুরু করুন।
দুর্ভাগ্যবশত এই অভিজ্ঞতা প্রায়ই দুর্বল সংযোগ দ্বারা ভাঙ্গা হয়. আমরা সব সেখানে হয়েছে. আপনি একটি সাদা পর্দা বা একটি স্পিনারের দিকে তাকাচ্ছেন, এবং আপনি জানেন যে আপনার কেবল হাল ছেড়ে দেওয়া উচিত এবং আপনার জীবন নিয়ে এগিয়ে যাওয়া উচিত, তবে আপনি এটির জন্য আরও 10 সেকেন্ড সময় দেবেন। তার পর ১০ সেকেন্ড? কিছুই না।
কিন্তু এখন হাল ছেড়ে দিব কেন? আপনি ইতিমধ্যেই সময় বিনিয়োগ করেছেন, তাই কিছু না করে দূরে হাঁটা একটি অপচয় হবে না, তাই আপনি অপেক্ষা চালিয়ে যান। এই মুহুর্তে আপনি হাল ছেড়ে দিতে চান , কিন্তু আপনি জানেন যে আপনি দ্বিতীয়টি করবেন, এটি দ্বিতীয়টি যা সবকিছু লোড হওয়ার আগে যদি আপনি অপেক্ষা করতেন।
পরিষেবা কর্মীরা আপনাকে একটি ক্যাশে থেকে সামগ্রী পরিবেশন করতে দিয়ে পৃষ্ঠা লোডিং অংশটি সমাধান করে৷ কিন্তু যখন পৃষ্ঠাটি সার্ভারে কিছু পাঠাতে হবে তখন কী হবে?
এই মুহুর্তে, ব্যবহারকারী যদি কোনও বার্তায় "পাঠান" হিট করে তবে এটি সম্পূর্ণ না হওয়া পর্যন্ত তাদের স্পিনারের দিকে তাকাতে হবে। যদি তারা দূরে নেভিগেট করার চেষ্টা করে বা ট্যাব বন্ধ করে, আমরা একটি বার্তা প্রদর্শন করার জন্য onbeforeunload
ব্যবহার করি, "না, আমি আপনাকে এই স্পিনারের দিকে আরও কিছুক্ষণ তাকাতে চাই। দুঃখিত"। ব্যবহারকারীর কোনো সংযোগ না থাকলে, আমরা ব্যবহারকারীকে বলি "দুঃখিত, আপনাকে অবশ্যই পরে ফিরে আসতে হবে এবং আবার চেষ্টা করতে হবে"।
এই আবর্জনা. পটভূমি সিঙ্ক আপনাকে আরও ভাল করতে দেয়৷
সমাধান
নিম্নলিখিত ভিডিওটি ইমোজয় দেখায়, একটি ইমোজি-শুধু চ্যাট ডেমো৷ এটি একটি প্রগতিশীল ওয়েব অ্যাপ , এবং এটি প্রথমে অফলাইনে কাজ করে৷ অ্যাপটি পুশ বার্তা এবং বিজ্ঞপ্তি ব্যবহার করে এবং এটি ব্যাকগ্রাউন্ড সিঙ্ক ব্যবহার করে।
ব্যবহারকারী যদি কোনো বার্তা পাঠানোর চেষ্টা করেন যখন তাদের সংযোগ শূন্য থাকে, তাহলে, ধন্যবাদ, তারা সংযোগ পাওয়ার পর বার্তাটি পটভূমিতে পাঠানো হয়।
মার্চ 2016 থেকে, 49 এবং তার উপরে সংস্করণ থেকে পটভূমি সিঙ্ক Chrome এ উপলব্ধ। আপনি নীচের পদক্ষেপগুলি অনুসরণ করে এটি কর্ম দেখতে পারেন:
- ইমোজয় খুলুন ।
- অফলাইনে যান (হয় বিমান-মোড ব্যবহার করে বা আপনার স্থানীয় ফ্যারাডে খাঁচায় যান)।
- একটি বার্তা টাইপ করুন.
- আপনার হোম স্ক্রিনে ফিরে যান (ঐচ্ছিকভাবে ট্যাব বা ব্রাউজার বন্ধ করুন)।
- অনলাইনে যান।
- ব্যাকগ্রাউন্ডে মেসেজ পাঠায়!
এই মত ব্যাকগ্রাউন্ডে পাঠাতে সক্ষম হওয়ার ফলে একটি অনুভূত কর্মক্ষমতা উন্নতিও পাওয়া যায়। অ্যাপটিকে বার্তা পাঠানোর বিষয়ে এত বড় চুক্তি করার দরকার নেই, তাই এটি সরাসরি আউটপুটে বার্তা যোগ করতে পারে।
একটি পটভূমি সিঙ্ক অনুরোধ কিভাবে
সত্যিকারের এক্সটেনসিবল ওয়েব স্টাইলে, এটি একটি নিম্ন-স্তরের বৈশিষ্ট্য যা আপনাকে আপনার যা প্রয়োজন তা করার স্বাধীনতা দেয়। ব্যবহারকারীর কানেক্টিভিটি থাকলে আপনি একটি ইভেন্ট বরখাস্ত করার জন্য বলবেন, যা অবিলম্বে যদি ব্যবহারকারীর ইতিমধ্যেই সংযোগ থাকে। তারপর, আপনি সেই ইভেন্টের জন্য শুনুন এবং আপনার যা করা দরকার তা করুন।
পুশ মেসেজিংয়ের মতো, এটি একটি পরিষেবা কর্মীকে ইভেন্ট লক্ষ্য হিসাবে ব্যবহার করে, যা পৃষ্ঠাটি খোলা না থাকলে এটি কাজ করতে সক্ষম করে। শুরু করতে, একটি পৃষ্ঠা থেকে একটি সিঙ্কের জন্য নিবন্ধন করুন:
// Register your service worker:
navigator.serviceWorker.register('/sw.js');
// Then later, request a one-off sync:
navigator.serviceWorker.ready.then(function(swRegistration) {
return swRegistration.sync.register('myFirstSync');
});
```
Then listen for the event in `/sw.js`:
```js
self.addEventListener('sync', function(event) {
if (event.tag == 'myFirstSync') {
event.waitUntil(doSomeStuff());
}
});
আর এটাই! উপরে, doSomeStuff()
একটি প্রতিশ্রুতি ফেরত দেওয়া উচিত যা কিছু করার চেষ্টা করছে তার সাফল্য/ব্যর্থতা নির্দেশ করে। যদি এটি পূরণ করে, সিঙ্ক সম্পূর্ণ হয়। যদি এটি ব্যর্থ হয়, অন্য সিঙ্ক পুনরায় চেষ্টা করার জন্য নির্ধারিত হবে৷ পুনরায় চেষ্টা করুন সিঙ্ক এছাড়াও সংযোগের জন্য অপেক্ষা করুন, এবং একটি সূচকীয় ব্যাক-অফ নিয়োগ করুন।
সিঙ্কের ট্যাগ নাম (উপরের উদাহরণে 'myFirstSync') প্রদত্ত সিঙ্কের জন্য অনন্য হওয়া উচিত। আপনি যদি একটি সিঙ্কের জন্য একটি মুলতুবি সিঙ্ক হিসাবে একই ট্যাগ ব্যবহার করে নিবন্ধন করেন তবে এটি বিদ্যমান সিঙ্কের সাথে একত্রিত হয়৷ এর মানে হল যে ব্যবহারকারী যখনই একটি বার্তা পাঠায় আপনি একটি "ক্লিয়ার-আউটবক্স" সিঙ্কের জন্য নিবন্ধন করতে পারেন, কিন্তু যদি তারা অফলাইনে থাকা অবস্থায় 5টি বার্তা পাঠায়, আপনি শুধুমাত্র একটি সিঙ্ক পাবেন যখন তারা অনলাইন হবে৷ আপনি যদি 5টি পৃথক সিঙ্ক ইভেন্ট চান, শুধুমাত্র অনন্য ট্যাগ ব্যবহার করুন!
এখানে একটি সাধারণ ডেমো যা সর্বনিম্ন করে; এটি একটি বিজ্ঞপ্তি দেখানোর জন্য সিঙ্ক ইভেন্ট ব্যবহার করে।
আমি কি জন্য ব্যাকগ্রাউন্ড সিঙ্ক ব্যবহার করতে পারি?
আদর্শভাবে, আপনি পৃষ্ঠার জীবনের বাইরে আপনার যত্নশীল যেকোন ডেটা পাঠানোর সময় নির্ধারণ করতে এটি ব্যবহার করবেন। চ্যাট মেসেজ, ইমেল, ডকুমেন্ট আপডেট, সেটিংস পরিবর্তন, ফটো আপলোড... যেকোন কিছু যা আপনি সার্ভারে পৌঁছাতে চান এমনকি ব্যবহারকারী যদি ট্যাবটি বন্ধ করে দেয় বা বন্ধ করে দেয়। পৃষ্ঠাটি এগুলিকে ইনডেক্সডডিবি-তে একটি "আউটবক্স" স্টোরে সংরক্ষণ করতে পারে এবং পরিষেবা কর্মী সেগুলি পুনরুদ্ধার করবে এবং সেগুলি পাঠাবে।
যদিও, আপনি ডেটার ছোট বিট আনতে এটি ব্যবহার করতে পারেন...
আরেকটি ডেমো!
এটি হল অফলাইন উইকিপিডিয়া ডেমো যা আমি সুপারচার্জিং পেজ লোডের জন্য তৈরি করেছি। আমি তখন থেকে এটিতে কিছু ব্যাকগ্রাউন্ড সিঙ্ক ম্যাজিক যোগ করেছি।
এটি নিজে চেষ্টা করে দেখুন। নিশ্চিত করুন যে আপনি Chrome 49 এবং তার উপরে ব্যবহার করছেন এবং তারপর:
- যেকোনো নিবন্ধে যান, সম্ভবত Chrome ।
- অফলাইনে যান (হয় বিমান-মোড ব্যবহার করে বা আমার মতো ভয়ানক মোবাইল সরবরাহকারীতে যোগ দিন)।
- অন্য নিবন্ধের একটি লিঙ্কে ক্লিক করুন.
- আপনাকে বলা উচিত পৃষ্ঠাটি লোড হতে ব্যর্থ হয়েছে (পৃষ্ঠাটি লোড হতে একটু সময় নিলে এটিও প্রদর্শিত হবে)।
- বিজ্ঞপ্তিতে সম্মত হন।
- ব্রাউজার বন্ধ করুন।
- অনলাইনে যান
- নিবন্ধটি ডাউনলোড, ক্যাশে এবং দেখার জন্য প্রস্তুত হলে আপনি বিজ্ঞপ্তি পাবেন!
এই প্যাটার্নটি ব্যবহার করে, ব্যবহারকারী তাদের ফোনটি তাদের পকেটে রাখতে পারে এবং তাদের জীবন চালিয়ে যেতে পারে, এটি জেনে ফোনটি তাদের সতর্ক করে দেবে যখন এটি তাদের ইচ্ছামত আনা হবে।
অনুমতি
আমি যে ডেমোগুলি দেখিয়েছি সেগুলি ওয়েব বিজ্ঞপ্তি ব্যবহার করে, যার জন্য অনুমতির প্রয়োজন হয়, কিন্তু ব্যাকগ্রাউন্ড সিঙ্ক নিজেই করে না৷
ব্যবহারকারীর সাইটে একটি পৃষ্ঠা খোলা থাকার সময় সিঙ্ক ইভেন্টগুলি প্রায়শই সম্পূর্ণ হবে, তাই ব্যবহারকারীর অনুমতির প্রয়োজন একটি খারাপ অভিজ্ঞতা হবে৷ পরিবর্তে, অপব্যবহার রোধ করতে কখন সিঙ্ক নিবন্ধিত এবং ট্রিগার করা যেতে পারে তা আমরা সীমাবদ্ধ করছি। যেমন:
- আপনি শুধুমাত্র একটি সিঙ্ক ইভেন্টের জন্য নিবন্ধন করতে পারেন যখন ব্যবহারকারীর সাইটে একটি উইন্ডো খোলা থাকে৷
- ইভেন্ট এক্সিকিউশনের সময় সীমাবদ্ধ, তাই আপনি প্রতি x সেকেন্ডে একটি সার্ভার পিং করতে এগুলি ব্যবহার করতে পারবেন না, মাইন বিটকয়েন বা যাই হোক না কেন।
অবশ্যই, বাস্তব-বিশ্ব ব্যবহারের উপর ভিত্তি করে এই নিষেধাজ্ঞাগুলি শিথিল বা শক্ত হতে পারে।
প্রগতিশীল বর্ধন
সমস্ত ব্রাউজার ব্যাকগ্রাউন্ড সিঙ্ক সমর্থন করার আগে কিছুক্ষণ লাগবে, বিশেষ করে সাফারি এবং এজ এখনও পরিষেবা কর্মীদের সমর্থন করে না। কিন্তু প্রগতিশীল বর্ধন এখানে সাহায্য করে:
if ('serviceWorker' in navigator && 'SyncManager' in window) {
navigator.serviceWorker.ready.then(function(reg) {
return reg.sync.register('tag-name');
}).catch(function() {
// system was unable to register for a sync,
// this could be an OS-level restriction
postDataFromThePage();
});
} else {
// serviceworker/sync not supported
postDataFromThePage();
}
যদি পরিষেবা কর্মী বা ব্যাকগ্রাউন্ড সিঙ্ক উপলভ্য না থাকে, তাহলে পৃষ্ঠা থেকে বিষয়বস্তু পোস্ট করুন যেমন আপনি আজ করতে চান।
এটি ব্যাকগ্রাউন্ড সিঙ্ক ব্যবহার করা মূল্যবান, এমনকি যদি ব্যবহারকারীর ভাল সংযোগ আছে বলে মনে হয়, কারণ এটি আপনাকে ডেটা পাঠানোর সময় নেভিগেশন এবং ট্যাব বন্ধ হওয়া থেকে রক্ষা করে।
ভবিষ্যৎ
আমরা 2016 সালের প্রথমার্ধে Chrome এর একটি স্থিতিশীল সংস্করণে পটভূমি সিঙ্ক পাঠানোর লক্ষ্য রাখি, একটি বৈকল্পিক, "পর্যায়ক্রমিক ব্যাকগ্রাউন্ড সিঙ্ক" এ কাজ করার সময়৷ পর্যায়ক্রমিক ব্যাকগ্রাউন্ড সিঙ্ক সহ, আপনি সময়ের ব্যবধান, ব্যাটারি অবস্থা এবং নেটওয়ার্ক অবস্থা দ্বারা সীমাবদ্ধ একটি ইভেন্টের অনুরোধ করতে পারেন। এর জন্য অবশ্যই ব্যবহারকারীর অনুমতির প্রয়োজন হবে এবং কখন এবং কত ঘন ঘন এই ইভেন্টগুলি ফায়ার হবে তা ব্রাউজারের উপর নির্ভর করবে। অন্য কথায়, একটি নিউজ সাইট প্রতি ঘন্টায় সিঙ্ক করার জন্য অনুরোধ করতে পারে, কিন্তু ব্রাউজার হয়তো জানতে পারে আপনি সেই সাইটটি শুধুমাত্র 07:00 এ পড়েছেন, তাই সিঙ্কটি প্রতিদিন 06:50 এ ফায়ার হবে। এই ধারণাটি এক-অফ সিঙ্কিংয়ের চেয়ে কিছুটা দূরে, তবে এটি আসছে।
একটু একটু করে আমরা ওয়েবে অ্যান্ড্রয়েড এবং iOS থেকে সফল নিদর্শনগুলি নিয়ে আসছি, যা এখনও ওয়েবকে দুর্দান্ত করে তোলে তা ধরে রাখছি!