- कभी-कभी ऐसा होता है कि जब उपयोगकर्ता किसी दूसरे पेज पर जा रहा हो, या form submit कर रहा हो, तब आप log छोड़ना चाहते हैं
- click event में
fetch डाल देने से यह गारंटी नहीं मिलती कि वह ज़रूर भेजा जाएगा
- इसलिए
fetch करने के बाद window.location में डालकर navigate कराने की कोशिश की जा सकती है, लेकिन इसकी भी गारंटी नहीं है
- क्योंकि XHR asynchronous और non-blocking होता है
fetch को Promise के साथ await करके संभाला जा सकता है, लेकिन इसके भी नुकसान हैं
- processing धीमी हो जाती है, जिससे user experience खराब हो सकता है
- यह उम्मीद के मुताबिक इतना भरोसेमंद भी नहीं है। जैसे browser tab बंद कर देना, ऐसे मामलों को संभालना संभव नहीं
- browser को HTTP request बनाए रखने के लिए कई विकल्प मिलते हैं
- Fetch में keepalive flag का उपयोग करने पर, पेज रुक जाने पर भी वह request जारी रह सकती है
- Navigator.sendBeacon() जैसी और भी सरल function
- browser a tag के
ping attribute को भी support करते हैं (कमज़ोरी यह है कि इसे सिर्फ link पर ही इस्तेमाल किया जा सकता है, और FF इसे डिफ़ॉल्ट रूप से support नहीं करता)
- तो फिर क्या इस्तेमाल करना चाहिए?
- अगर संभव हो तो
fetch() + keepalive
- 80% browsers इसका support करते हैं
- custom header भेजे जा सकते हैं
- GET request के साथ भी संभव है
- पुराने browsers का support
sendBeacon() इन मामलों में अच्छा है
- 96% browsers इसका support करते हैं
- जब बहुत ज़्यादा customization की ज़रूरत न हो
- जब आप साफ़-सुथरी और elegant API पसंद करते हों
- जब आप browser की दूसरी priority requests के साथ प्रतिस्पर्धा नहीं करना चाहते हों
अभी कोई टिप्पणी नहीं है.