हिन्दी

वीडियो और उपशीर्षक · डायरेक्ट मीडिया डाउनलोडर

ब्राउज़र मेमोरी में बड़े मीडिया डाउनलोड कितने फिट होते हैं: स्ट्रीम, ब्लॉब्स और सीमाएँ

· यह काम किस प्रकार करता है

डाउनलोड प्रदर्शन ब्राउज़र

मीडिया के टुकड़े मेमोरी गेज के पास एक सीमित ब्राउज़र ब्लॉब में जमा हो रहे हैं
मूल ToolAcre वेक्टर चित्रण

ToolAcre का कहना है कि आकार सीमा अपलोड सीमा के बजाय आपके डिवाइस की मेमोरी है। यह पोस्ट बताती है कि सीधे डाउनलोड के लिए इसका क्या मतलब है: प्रतिक्रिया निकाय कैसे पढ़े जाते हैं, बाइट्स कहां रहते हैं और जब ब्राउज़र टैब में जगह खत्म हो जाती है।

फ़ाइल कई गीगाबाइट की है और डाउनलोड आधा रुक जाता है - ब्राउज़र-साइड डाउनलोड के लिए मेमोरी सीमा के कारण होने वाली समस्या

एक लंबी रिकॉर्डिंग लगातार आगे बढ़ सकती है और फिर बंद हो सकती है क्योंकि ब्राउज़र-साइड सेविंग के लिए प्राप्त हिस्सों और पूर्ण ब्लॉब के लिए जगह की आवश्यकता होती है। रुका हुआ प्रतिशत अकेले कारण का निदान नहीं कर सकता है: नेटवर्क रुक सकता है, होस्ट कनेक्शन बंद कर सकता है, रद्दीकरण सक्रिय हो सकता है, या प्रक्रिया मेमोरी दबाव तक पहुंच सकती है।

ToolAcre एक सीमा को नियतात्मक बनाता है। `downloadMedia` अधिकतम 2 GiB पर डिफ़ॉल्ट होता है और मुख्य भाग को पढ़ने से पहले बड़ी घोषित सामग्री-लंबाई को अस्वीकार कर देता है। यदि होस्ट उस हेडर को छोड़ देता है या कम बताता है, तो खंडों के आने पर वही सीमा फिर से लागू हो जाती है, जिससे एक असंबद्ध संचायक को रोका जा सकता है। सीमा के निकट एक घोषित मूल्य सावधानी बरतने योग्य है क्योंकि ब्लॉब असेंबली, पेज स्थिति और कार्यान्वयन ओवरहेड को केवल प्रतिक्रिया पेलोड द्वारा सुझाए गए संसाधनों की तुलना में अधिक संसाधनों की आवश्यकता हो सकती है।

प्रतिक्रिया निकाय को कैसे पढ़ा जाता है: ReadableStream खंड बनाम एक बड़ा बफर - प्रगति धीमी होने पर ब्राउज़र क्या कर रहा है

जब ब्राउज़र एक ReadableStream प्रदान करता है तो Fetch प्रतिक्रिया निकाय को ReadableStream के रूप में प्रदर्शित करता है। कार्यान्वयन एक रीडर प्राप्त करता है, टुकड़ों का इंतजार करता है, प्रत्येक `Uint8Array` को गिनता है, प्रगति को अद्यतन करता है, और अंतिम ब्लॉब निर्माण के लिए टुकड़ों को संग्रहीत करता है। स्ट्रीमिंग प्रगति और रद्दीकरण को वास्तविक बनाती है; यह भंडारण को स्थिर नहीं बनाता है.

जब सामग्री-लंबाई एक सकारात्मक परिमित मान है, तो इंटरफ़ेस कुल के विरुद्ध प्राप्त बाइट्स दिखा सकता है। इसके बिना, डिस्प्ले प्राप्त बाइट्स की रिपोर्ट करता है लेकिन प्रतिशत का आविष्कार करने से इंकार कर देता है। यदि कोई पठनीय निकाय मौजूद नहीं है, तो कोड `response.blob()` पर वापस आ जाता है और केवल अंतिम आकार की रिपोर्ट करता है। प्रत्येक बरकरार रखा गया हिस्सा बाद में असेंबली को संभव बनाता है, जबकि एक सच्चे डिस्क-स्ट्रीमिंग डिज़ाइन के लिए एक अलग ब्राउज़र API, अनुमति मॉडल और विफलता रणनीति की आवश्यकता होगी जो यहां मौजूद नहीं है।

पूर्ण ब्लॉब कहाँ रहता है और कोई भी ब्राउज़र-भंडारण वादा सुरक्षित क्यों नहीं है

एकत्रित ब्लॉब एक ​​ब्राउज़र ऑब्जेक्ट है जो MIME लेबल के साथ अपरिवर्तनीय बाइट्स का प्रतिनिधित्व करता है। विनिर्देश यह वादा नहीं करता है कि क्या कोई विशेष ब्राउज़र प्रत्येक बैकिंग बाइट को RAM में रखता है, कुछ डेटा फैलाता है, या असेंबली के दौरान बफ़र्स को डुप्लिकेट करता है। इसलिए आलेख मार्गदर्शन को सार्वभौमिक भंडारण-स्थान दावे से बचना चाहिए।

एप्लिकेशन जो साबित करता है वह यह है कि यह स्ट्रीम समाप्त होने तक खंड संदर्भों को बरकरार रखता है, फिर एक ब्लॉब बनाता है और इसे आपके डिवाइस में सेव कार्रवाई के लिए उपलब्ध रखता है। वह कार्यशील सेट पेज और अन्य टैब के साथ प्रतिस्पर्धा करता है, इसलिए डिवाइस और ब्राउज़र की स्थितियाँ स्पष्ट सीमा से नीचे व्यावहारिक बाधाएँ बनी रहती हैं। यही कारण है कि दस्तावेज़ीकरण एक विशिष्ट RAM गुणक, डिस्क-स्पिल थ्रेशोल्ड, या ब्राउज़र-निर्भर आवंटन तकनीक का वादा करने के बजाय संसाधन दबाव का नाम देता है।

कोई अपलोड सीमा क्यों नहीं है, लेकिन एक 2 GiB डाउनलोड गार्ड है

ToolAcre पर कोई फ़ाइल अपलोड नहीं की गई है और कोई रिले मीडिया प्राप्त नहीं करता है। GET विज़िटर के ब्राउज़र से आपूर्ति किए गए होस्ट तक यात्रा करता है। यह सर्वर अपलोड कोटा हटा देता है, लेकिन इसका मतलब "असीमित" नहीं है: स्रोत अधिकतम दो-गीबीबाइट लागू करता है और बड़ी नौकरियों को इसके बजाय मूल सेव लिंक का उपयोग करने के लिए कहता है।

होस्ट सामग्री-लंबाई के माध्यम से अत्यधिक आकार की घोषणा कर सकता है, जिससे शीघ्र इनकार की अनुमति मिल सकती है। यह बिना लंबाई के भी स्ट्रीम हो सकता है, ऐसी स्थिति में ToolAcre वास्तविक टुकड़ों की गिनती करता है और सीमा पार होने के बाद रुक जाता है। इस विफलता के बाद आंशिक बाइट्स को संक्षिप्त डाउनलोड के रूप में पेश नहीं किया जाता है। प्रारंभिक और स्ट्रीमिंग जांच सत्य और अनुपस्थित लंबाई वाले हेडर को कवर करती है, जबकि एक गलत छोटा हेडर तभी पकड़ा जाता है जब मापा गया शरीर उसी छत से गुजरता है।

व्यावहारिक उदाहरण: सीमित RAM वाले लैपटॉप पर एक लंबी व्याख्यान रिकॉर्डिंग - नेटवर्क स्टॉल से क्या अपेक्षा करें और मेमोरी दबाव कैसे बताएं

एक लैपटॉप पर एक व्याख्यान फ़ाइल की कल्पना करें जिसमें पहले से ही एक एडिटर और कई टैब चल रहे हों। सबसे पहले चेक लिंक दबाएं और बताए गए आकार की तुलना गार्ड से करें। डाउनलोड के दौरान, स्थिर बाइट अपडेट का कोई कुल मतलब नहीं है कि होस्ट ने प्रयोग करने योग्य लंबाई छोड़ दी है; इसके बजाय एक रुकी हुई अनुरोध पंक्ति परिवहन विराम दिखा सकती है।

अनुरोध सक्रिय रहने पर भी मेमोरी दबाव टैब को प्रभावित कर सकता है, लेकिन ToolAcre ऑपरेटिंग सिस्टम का निरीक्षण नहीं कर सकता और कारण घोषित नहीं कर सकता। ब्राउज़र कार्य टूल, सिस्टम मेमोरी दृश्य और अनुरोध समयरेखा पूरक साक्ष्य प्रदान करते हैं। आँख मूँद कर पुनः प्रयास करने से वही आवंटन माँग दोहराई जा सकती है। यदि अनुरोध HTTP स्थिति के साथ समाप्त होता है, तो पहले उस प्रतिक्रिया की जांच करें; प्रत्येक बाधित बड़े स्थानांतरण के लिए मेमोरी दबाव एक उपयोगी डिफ़ॉल्ट स्पष्टीकरण नहीं है।

व्यावहारिक आदतें: अन्य टैब बंद करना और एक समय में एक फ़ाइल डाउनलोड करना - टैब को वह स्थान कैसे दें जिसकी उसे आवश्यकता है

निकट-सीमा स्थानांतरण शुरू करने से पहले असंबद्ध भारी टैब बंद करें, एक समय में एक बड़े कार्य को सक्रिय रखें और जब तक सेव कार्रवाई शुरू न हो जाए तब तक परिणाम साफ़ करने से बचें। ये आदतें प्रतिस्पर्धा को कम करती हैं लेकिन कोडित अधिकतम को नहीं बढ़ाती हैं या किसी प्रतिबंधित डिवाइस पर सफलता की गारंटी नहीं देती हैं।

जब होस्ट सामग्री-लंबाई प्रदान करता है तो पहले जाँच करना उपयोगी होता है, फिर भी गायब मान का अर्थ "अज्ञात" है, "छोटा" नहीं। रॉ बाइट काउंटर देखें और यदि स्थानांतरण अपेक्षित संपत्ति नहीं है तो रद्द करें। रद्दीकरण आंशिक फ़ाइल को हटा देता है और अपूर्ण बाइट्स को सफलता के रूप में प्रस्तुत करने के बजाय रीडर लॉक जारी करता है। तुरंत सहेजने से यह भी कम हो जाता है कि तैयार ब्लॉब पेज स्थिति में कितने समय तक पहुंच योग्य रहता है, हालांकि JavaScript ब्राउज़र द्वारा बैकिंग स्टोरेज को पुनः प्राप्त करने के सटीक क्षण का वादा नहीं कर सकता है।

इसमें क्या शामिल नहीं है - टूटे हुए डाउनलोड को फिर से शुरू करना, फ़ाइल को भागों में विभाजित करना, या डिवाइस की क्षमता से अधिक डाउनलोड करना

यह पथ रेंज अनुरोध जारी नहीं करता है, बाधित स्थानांतरण को फिर से शुरू नहीं करता है, आउटपुट को भागों में विभाजित नहीं करता है, उपयोगकर्ता द्वारा चयनित फ़ाइल हैंडल पर सीधे स्ट्रीम नहीं करता है, या कतार शेड्यूल नहीं करता है। हालाँकि HEAD प्रतिक्रिया रिपोर्ट करती है कि क्या बाइट कैटेगरी समर्थित प्रतीत होती हैं, डाउनलोडर उस सलाहकार परिणाम को फिर से शुरू व्यवहार में नहीं बदलता है।

गार्ड से परे फ़ाइलें एक मूल ब्राउज़र डाउनलोड, एक अनुमत कमांड-लाइन क्लाइंट, या किसी अन्य अधिकृत वर्कफ़्लो में होती हैं जो ब्लॉब सेविंग के लिए पूरे परिणाम को बनाए रखे बिना उत्तरोत्तर लिखती है। यह विकल्प मेमोरी आर्किटेक्चर के बारे में है, न कि लॉगिन, CORS, DRM, या अधिकार प्रतिबंधों के समाधान के बारे में। एक पुन: प्रारंभ करने योग्य क्लाइंट अविश्वसनीय कनेक्शन के लिए अधिक उपयुक्त हो सकता है, लेकिन केवल तभी जब फ़ाइल स्रोत और प्राधिकरण उस क्लाइंट को उसी संसाधन तक पहुंचने की अनुमति देता है।

टेकअवे: स्पष्ट गार्ड और उपलब्ध डिवाइस मेमोरी दोनों मायने रखते हैं

सटीक सीमा विवरण में दो परतें होती हैं: ToolAcre डिफ़ॉल्ट रूप से 2 GiB से अधिक को अस्वीकार कर देता है, और छोटे स्थानांतरण अभी भी ब्राउज़र के उपलब्ध संसाधनों द्वारा बाधित हो सकते हैं। "कोई अपलोड कैप नहीं" अनुपस्थित रिले का वर्णन करता है; यह अनंत डाउनलोड करने योग्य आकार का पर्याय नहीं है।

उपयुक्त फ़ाइलों के लिए, चंक रीडर सच्ची प्रगति प्रदान करता है, एक एबॉर्टकंट्रोलर रद्दीकरण प्रदान करता है, और ब्लॉब निर्माण एक सहेजने योग्य परिणाम प्रदान करता है। डायरेक्ट मीडिया डाउनलोडर यह स्वीकार करते हुए कि ब्राउज़र टैब एक सीमित कार्यक्षेत्र है, डायरेक्ट होस्ट-टू-ब्राउज़र रूट पर बाइट्स रखता है। स्थानांतरण शुरू होने से पहले दोनों सीमाओं की एक साथ योजना बनाई जानी चाहिए, विशेष रूप से प्रबंधित लैपटॉप या मोबाइल टूलों पर जहां उपलब्ध संसाधन तेजी से बदल सकते हैं।