पुश मैसेजिंग एपीआई की मदद से, हम किसी उपयोगकर्ता को सूचनाएं तब भी भेज सकते हैं, जब ब्राउज़र बंद हो. कई डेवलपर, ब्राउज़र खोले बिना कॉन्टेंट को अपडेट और सिंक करने के लिए, इस मैसेजिंग सेवा का इस्तेमाल करना चाहते हैं. हालांकि, एपीआई पर एक अहम पाबंदी है: आपको मिलने वाले हर पुश मैसेज के लिए, हमेशा सूचना दिखानी होगी.
उपयोगकर्ता के डिवाइस पर डेटा सिंक करने या पहले दिखाई गई सूचना को छिपाने के लिए, पुश मैसेज भेजने की सुविधा, उपयोगकर्ताओं और डेवलपर के लिए काफ़ी काम की हो सकती है. हालांकि, उपयोगकर्ता की जानकारी के बिना वेब ऐप्लिकेशन को बैकग्राउंड में काम करने की अनुमति देने से, इसका गलत इस्तेमाल किया जा सकता है.
बजट एपीआई एक नया एपीआई है. इसे इस तरह से डिज़ाइन किया गया है कि डेवलपर, उपयोगकर्ता को सूचना दिए बिना बैकग्राउंड में सीमित काम कर सकें. जैसे, साइलेंट पुश या बैकग्राउंड फ़ेच करना. Chrome 60 और उसके बाद के वर्शन में, इस एपीआई का इस्तेमाल किया जा सकता है. साथ ही, Chrome की टीम को डेवलपर से सुझाव, शिकायत या राय मिलना है.
डेवलपर, बैकग्राउंड में उपयोगकर्ता के संसाधनों का इस्तेमाल कर सकें, इसके लिए वेब प्लैटफ़ॉर्म पर नए Budget API का इस्तेमाल करके बजट का कॉन्सेप्ट पेश किया जा रहा है. हर साइट को उपयोगकर्ता के जुड़ाव के आधार पर संसाधन मिलेंगे. इन संसाधनों का इस्तेमाल, बैकग्राउंड ऐक्शन के लिए किया जा सकता है. जैसे, साइलेंट पुश, जहां हर कार्रवाई से बजट कम होगा. बजट खर्च होने के बाद, बैकग्राउंड में होने वाली कार्रवाइयां, उपयोगकर्ता के ऐप्लिकेशन पर मौजूद होने के बिना नहीं की जा सकतीं. उपयोगकर्ता एजेंट यह तय करेगा कि किसी वेब ऐप्लिकेशन को, उसके हेयुरिस्टिक्स के आधार पर कितना बजट दिया जाए. उदाहरण के लिए, बजट की अनुमति को उपयोगकर्ता ऐक्टिविटी से जोड़ा जा सकता है. हर ब्राउज़र, अपने हिसाब से हेयुरिस्टिक तय कर सकता है.
खास जानकारी Budget API की मदद से, बजट रिज़र्व किया जा सकता है, बजट का इस्तेमाल किया जा सकता है, बचे हुए बजट की सूची देखी जा सकती है, और बैकग्राउंड में चल रही प्रोसेस की लागत को समझा जा सकता है
बजट रिज़र्व करना
Chrome 60 और इसके बाद के वर्शन में, navigator.budget.reserve()
तरीका बिना किसी फ़्लैग के उपलब्ध होगा.
reserve()
तरीके की मदद से, किसी खास ऑपरेशन के लिए बजट का अनुरोध किया जा सकता है. साथ ही, यह एक बूलियन वैल्यू दिखाएगा, ताकि यह पता चल सके कि बजट रिज़र्व किया जा सकता है या नहीं. अगर बजट रिज़र्व किया गया था, तो उपयोगकर्ता को बैकग्राउंड में किए जा रहे काम के बारे में बताने की ज़रूरत नहीं है.
पुश नोटिफ़िकेशन के उदाहरण में, "साइलेंट-पुश" ऑपरेशन के लिए बजट रिज़र्व करने की कोशिश की जा सकती है. अगर reserve()
सही के तौर पर रिज़ॉल्व होता है, तो ऑपरेशन की अनुमति दी जाती है. ऐसा न करने पर, यह फ़ंक्शन गलत के तौर पर दिखेगा और आपको सूचना दिखानी होगी
self.addEventListener('push', event => {
const promiseChain = navigator.budget.reserve('silent-push')
.then((reserved) => {
if (reserved) {
// No need to show a notification.
return;
}
// Not enough budget is available, must show a notification.
return registration.showNotification(...);
});
event.waitUntil(promiseChain);
});
Chrome 60 में, सिर्फ़ 'साइलेंट-पुश' कार्रवाई ही उपलब्ध है, लेकिन उस खास कार्रवाई के टाइप की पूरी सूची आपको मिल सकती है. एक बार इस्तेमाल करने के बाद, जांच करने या डीबग करने के मकसद से अपना बजट बढ़ाने का कोई आसान तरीका नहीं है. हालांकि, Chrome में कुछ समय के लिए नई प्रोफ़ाइल बनाई जा सकती है. माफ़ करें, इसके लिए गुप्त मोड का इस्तेमाल नहीं किया जा सकता. ऐसा इसलिए है, क्योंकि Budget API, गुप्त मोड में शून्य बजट दिखाएगा. हालांकि, मेरी जांच के दौरान एक बग मिला है, जिसकी वजह से गड़बड़ी हुई है.
आपको reserve()
को सिर्फ़ तब कॉल करना चाहिए, जब आपको आने वाले समय में वह कार्रवाई करनी हो जिसके लिए आपने रिज़र्वेशन किया है. ध्यान दें कि अगर आपने ऊपर दिए गए उदाहरण में रिज़र्व विकल्प को कॉल किया है, लेकिन
फिर भी आपको एक सूचना दिखती है, तो बजट का इस्तेमाल किया जाएगा.
इस्तेमाल का एक आम उदाहरण, जिसे सिर्फ़ reserve()
चालू नहीं करता है वह है बैकएंड से साइलेंट पुश शेड्यूल करने की सुविधा. Budget API में, इस इस्तेमाल के उदाहरण को चालू करने के लिए एपीआई मौजूद हैं. हालांकि, Chrome में अब भी इन पर काम किया जा रहा है. फ़िलहाल, ये सिर्फ़ फ़्लैग और / या ऑरिजिन ट्रायल के पीछे उपलब्ध हैं.
बजट एपीआई और ऑरिजिन ट्रायल
वेब ऐप्लिकेशन के पास, अपने बजट के इस्तेमाल की योजना बनाने के लिए, getBudget()
और getCost()
, दो तरीकों का इस्तेमाल करने का विकल्प होता है.
Chrome 60 में, ऑरिजिन ट्रायल के लिए साइन अप करने पर, ये दोनों तरीके उपलब्ध होते हैं. हालांकि, टेस्टिंग के लिए, एक्सपेरिमेंटल वेब प्लैटफ़ॉर्म की सुविधाओं वाले फ़्लैग को चालू करके, इनका इस्तेमाल स्थानीय तौर पर किया जा सकता है. इसके लिए, Chrome में chrome://flags/#enable-experimental-web-platform-features खोलें.
आइए, इन एपीआई का इस्तेमाल करने का तरीका जानते हैं.
अपना बजट पाना
getBudget()
तरीके से, अपना उपलब्ध बजट देखा जा सकता है. कुछ ब्राउज़र (जैसे, Chrome) में समय के साथ बजट 'कम' हो जाता है. इसलिए, आपको पूरी जानकारी देने के लिए, यह BudgetStates
की एक कड़ी दिखाता है. इससे पता चलता है कि आने वाले समय में अलग-अलग समय पर आपका बजट क्या होगा.
हमारे ज़रिए चलाए जा सकने वाले बजट की एंट्री की सूची बनाने के लिए:
navigator.budget.getBudget()
.then((budgets) => {
budgets.forEach((element) => {
console.log(\`At '${new Date(element.time).toString()}' \` +
\`your budget will be '${element.budgetAt}'.\`);
});
});
पहली एंट्री आपका मौजूदा बजट होगा और अन्य वैल्यू से पता चलेगा कि आने वाले समय में अलग-अलग समय पर आपका बजट क्या होगा.
At 'Mon Jun 05 2017 12:47:20' you will have a budget of '3'.
At 'Fri Jun 09 2017 10:42:57' you will have a budget of '2'.
At 'Fri Jun 09 2017 12:31:09' you will have a budget of '1'.
आने वाले समय में, बजट की अनुमतियों को शामिल करने का एक फ़ायदा यह भी है कि डेवलपर इस जानकारी को बैकएंड के साथ शेयर कर सकते हैं, ताकि वे सर्वर साइड के व्यवहार के मुताबिक हो सकें. इसका मतलब है कि अपडेट ट्रिगर करने के लिए पुश मैसेज सिर्फ़ तब भेजें, जब क्लाइंट के पास साइलेंट पुश के लिए बजट हो.
किसी कार्रवाई की लागत देखना
किसी ऑपरेशन की लागत जानने के लिए, getCost()
को कॉल करने पर एक संख्या दिखेगी. इससे पता चलेगा कि उस ऑपरेशन के लिए reserve()
को कॉल करने पर, ज़्यादा से ज़्यादा कितना बजट खर्च होगा.
उदाहरण के लिए, हम इस कोड की मदद से यह पता लगा सकते हैं कि आपको पुश मैसेज मिलने पर सूचना न दिखाने की लागत क्या है (यानी साइलेंट पुश की लागत):
navigator.budget.getCost('silent-push')
.then((cost) => {
console.log('Cost of silent push is:', cost);
})
.catch((err) => {
console.error('Unable to get cost:', err);
});
इस लेख को लिखने के समय, Chrome 60 इन चीज़ों को प्रिंट करेगा:
Cost of silent push is: 2
reserve()
और getCost()
के तरीकों के बारे में एक बात यह है कि किसी ऑपरेशन की असल लागत, getCost()
से मिली लागत से कम हो सकती है.
अगर आपका मौजूदा बजट, बताई गई कीमत से कम है, तो भी आपके पास ऑपरेशन बुक करने का विकल्प है. स्पेसिफ़िकेशन की खास जानकारी यहां दी गई है:
यह Chrome का मौजूदा एपीआई है. वेब पर ऐसे नए एपीआई काम करते रहेंगे जिनके लिए बैकग्राउंड में काम करने की ज़रूरत होती है. जैसे, बैकग्राउंड फ़ेच. Budget API का इस्तेमाल करके, उन ऑपरेशन की संख्या को मैनेज किया जा सकता है जिन्हें उपयोगकर्ता को सूचना दिए बिना किया जा सकता है.
एपीआई का इस्तेमाल करते समय, कृपया GitHub Repo पर सुझाव दें या crbug.com पर जाकर, Chrome की गड़बड़ियों की शिकायत करें.