परिचय
वेब डेवलपर के तौर पर, हमें नई टेक्नोलॉजी से बहुत खुशी होती है. इनकी मदद से, हम ज़्यादा दिलचस्प और इंटरैक्टिव वेब पेज बना पाते हैं. क्या WebGL की मदद से 3D ग्राफ़िक्स इस्तेमाल किए जा सकते हैं? बिल्कुल. क्या WebAudio की मदद से, ऑडियो की बेहतर सुविधाएं मिल सकती हैं? पक्का। वेब कैमरे और माइक्रोफ़ोन का इस्तेमाल करके, रीयल-टाइम में साथ मिलकर काम करने की सुविधा देने वाले ऐप्लिकेशन? मुझे साइन अप करें!
हालांकि, कुछ ऐसी टेक्नोलॉजी भी हैं जो उतनी दिलचस्प नहीं हैं, लेकिन उतनी ही अहम हैं. इनकी मदद से, हम ऐसे ऐप्लिकेशन बना पाते हैं जो ज़्यादा बेहतर तरीके से काम करते हैं और उपयोगकर्ताओं को बेहतर अनुभव देते हैं. ऐसे में, PageVisibility जैसे एपीआई का इस्तेमाल किया जा सकता है.
पेज विज़िबिलिटी एपीआई एक आसान, लेकिन ज़रूरी फ़ंक्शन करता है – यह आपके ऐप्लिकेशन को यह बताता है कि कोई पेज उपयोगकर्ता को कब दिखता है. इस बुनियादी जानकारी की मदद से, ऐसे वेब पेज बनाए जा सकते हैं जो देखे न जाने पर अलग तरह से काम करते हैं. कुछ उदाहरणों पर गौर करें:
- किसी सर्वर से जानकारी हासिल करने वाला वेब पेज, जब सक्रिय रूप से नहीं देखा जा रहा होता है, तो उसके अपडेट होने में लगने वाला समय बढ़ सकता है
- ऐसा पेज जो घूमने वाली इमेज कैरसेल या वीडियो/ऑडियो कॉन्टेंट दिखाता है, वह तब तक रोका जा सकता है, जब तक उपयोगकर्ता उस पेज को फिर से न दिखाए
- कोई ऐप्लिकेशन, उपयोगकर्ता को सूचनाएं सिर्फ़ तब दिखा सकता है, जब वह ऐप्लिकेशन के होम स्क्रीन से छिपा हो
पहली नज़र में, यह एपीआई उपयोगकर्ताओं के लिए सुविधाजनक होने के अलावा, बहुत काम का नहीं लग सकता. हालांकि, मोबाइल वेब ब्राउज़िंग में हुई भारी बढ़ोतरी को देखते हुए, डिवाइस की बैटरी पावर को बचाने में मदद करने वाली कोई भी चीज़ बहुत ज़रूरी हो जाती है. PageVisibility API का इस्तेमाल करके, आपकी साइट से उपयोगकर्ता के डिवाइस की बैटरी कम खर्च होती है और डिवाइस ज़्यादा समय तक चलता है.
एपीआई स्पेसिफ़िकेशन, दस्तावेज़ की दिखने की स्थिति का पता लगाने के लिए, दोनों प्रॉपर्टी के साथ-साथ दिखने की स्थिति में हुए बदलावों का जवाब देने के लिए एक इवेंट भी उपलब्ध कराता है. फ़िलहाल, यह स्पेसिफ़िकेशन, 'सुझाव के लिए उम्मीदवार' के तौर पर है.
इस ट्यूटोरियल में, हम एपीआई के बुनियादी बातों के बारे में बताएंगे. साथ ही, कुछ व्यावहारिक उदाहरणों के साथ, इसे लागू करने का तरीका भी बताएंगे. अगर आपको इंतज़ार नहीं करना है, तो सीधे उदाहरणों पर जाएं.
दस्तावेज़ की दृश्यता से जुड़ी प्रॉपर्टी
PageVisibilityAPI स्पेसिफ़िकेशन के मौजूदा वर्शन में, दस्तावेज़ की दो प्रॉपर्टी तय की गई हैं: बूलियन hidden
और एनिमरेशन visibilityState
. फ़िलहाल, visibilityState प्रॉपर्टी की चार वैल्यू हो सकती हैं: hidden
, visible
, prerender
, और unloaded
.
जैसा कि आपको उम्मीद होगी, जब दस्तावेज़ बिलकुल भी नहीं दिखता है, तो 'छिपा हुआ' एट्रिब्यूट True दिखाता है. आम तौर पर, इसका मतलब है कि दस्तावेज़ को छोटा किया गया है, बैकग्राउंड टैब पर रखा गया है, ओएस की लॉक स्क्रीन चालू है वगैरह. अगर दस्तावेज़ का कोई हिस्सा कम से कम एक डिसप्ले पर दिखता है, तो एट्रिब्यूट को 'गलत' पर सेट किया जाता है. इसके अलावा, सुलभता टूल के साथ काम करने के लिए, 'छिपा हुआ' एट्रिब्यूट को 'गलत' पर सेट किया जा सकता है. ऐसा तब किया जाता है, जब स्क्रीन ज़ूम करने वाला टूल, दस्तावेज़ को पूरी तरह से छिपा देता है, लेकिन उसका व्यू दिखाता है.
वेंडर प्रीफ़िक्स से जुड़ी समस्याओं को हल करना
वेंडर के हिसाब से प्रीफ़िक्स करने के बजाय, कोड पर फ़ोकस बनाए रखने के लिए, मैं ब्राउज़र के हिसाब से अलग-अलग फ़ंक्शन का इस्तेमाल करूंगा. Android 4.4 ब्राउज़र के लिए सहायता बंद करने के बाद, इस हिस्से को हटाया जा सकता है और स्टैंडर्ड नामों का इस्तेमाल किया जा सकता है.
function getHiddenProp(){
var prefixes = ['webkit','moz','ms','o'];
// if 'hidden' is natively supported just return it
if ('hidden' in document) return 'hidden';
// otherwise loop over all the known prefixes until we find one
for (var i = 0; i < prefixes.length; i++){
if ((prefixes[i] + 'Hidden') in document)
return prefixes[i] + 'Hidden';
}
// otherwise it's not supported
return null;
}
दस्तावेज़ की प्रॉपर्टी का उदाहरण
अब हम क्रॉस-ब्राउज़र फ़ंक्शन, isHidden()
लिखकर यह देख सकते हैं कि दस्तावेज़ दिख रहा है या नहीं.
function isHidden() {
var prop = getHiddenProp();
if (!prop) return false;
return document[prop];
}
दस्तावेज़ के दिखने की जानकारी के बारे में ज़्यादा जानने के लिए, visibilityState प्रॉपर्टी का इस्तेमाल किया जा सकता है. यह प्रॉपर्टी इनमें से कोई एक वैल्यू दिखाती है:
hidden
: दस्तावेज़ पूरी तरह से छिपा हुआ हैvisible
: दस्तावेज़, कम से कम एक डिसप्ले डिवाइस पर कम से कम कुछ हिस्सा दिख रहा होprerender
: दस्तावेज़, स्क्रीन पर लोड नहीं होता और न ही दिखता है (यह वैल्यू ज़रूरी नहीं है; यह ज़रूरी नहीं है कि सभी ब्राउज़र पर यह काम करे)unloaded
: अगर दस्तावेज़ को अनलोड करना है, तो यह वैल्यू दिखेगी. यह वैल्यू देना ज़रूरी नहीं है. यह ज़रूरी नहीं है कि सभी ब्राउज़र में यह काम करे
VisibilityChange इवेंट
दिखने की प्रॉपर्टी के अलावा, एक visibilitychange इवेंट भी होता है. यह तब ट्रिगर होता है, जब दस्तावेज़ के दिखने की स्थिति बदलती है. इस इवेंट के लिए, सीधे दस्तावेज़ ऑब्जेक्ट पर इवेंट लिसनर को रजिस्टर किया जा सकता है:
इवेंट का उदाहरण
// use the property name to generate the prefixed event name
var visProp = getHiddenProp();
if (visProp) {
var evtname = visProp.replace(/[H|h]idden/,'') + 'visibilitychange';
document.addEventListener(evtname, visChange);
}
function visChange() {
var txtFld = document.getElementById('visChangeText');
if (txtFld) {
if (isHidden())
txtFld.value += "Tab Hidden!\n";
else
txtFld.value += "Tab Visible!\n";
}
}
खास जानकारी
बेहतरीन वेब ऐप्लिकेशन बनाने के लिए, सिर्फ़ शानदार और दिलचस्प सुविधाओं का इस्तेमाल करना काफ़ी नहीं है. कोई भी बेहतर ऐप्लिकेशन, उपयोगकर्ता के संसाधनों और ध्यान का ध्यान रखता है. Page Visibility API, इस पहेली का एक अहम हिस्सा है. संसाधनों का ध्यान रखते हुए वेब ऐप्लिकेशन बनाने के बारे में ज़्यादा जानने के लिए, परफ़ॉर्मेंस से जुड़े अन्य लेख पढ़ें.