ऑरिजिन प्राइवेट फ़ाइल सिस्टम, एक खास तरह की फ़ाइल का ऐक्सेस देता है, जो परफ़ॉर्मेंस के लिए बेहतर तरीके से ऑप्टिमाइज़ किया जाता है. उदाहरण के लिए, फ़ाइल के कॉन्टेंट को फ़ाइल के हिसाब से ऐक्सेस करने और लिखने का खास ऐक्सेस देकर. डेवलपर
createSyncAccessHandle()
को कॉल करके ऐसी फ़ाइलों का ऐक्सेस पा सकते हैं.
यह तरीका FileSystemFileHandle
ऑब्जेक्ट पर दिखाया जाता है. इस कॉल के नतीजे के तौर पर, FileSystemSyncAccessHandle
मिलेगा.
FileSystemSyncAccessHandle
एक ऐसी फ़ाइल है जो लोकल फ़ाइलों को बेहतर तरीके से ऐक्सेस करने की सुविधा देती है. इसके मुख्य इस्तेमाल में से एक है, C/C++ कोड को Wasm पर पोर्ट करना. हालांकि, Wasm के साथ एसिंक्रोनस कॉल
अभी पूरी तरह से काम नहीं करते. विकल्प के तौर पर Asyncify लाइब्रेरी का इस्तेमाल
करने से परफ़ॉर्मेंस में काफ़ी गिरावट आई है. FileSystemSyncAccessHandle
सिंक्रोनस के सभी तरीकों को सिंक करने वाले, POSIX जैसे फ़ाइल एपीआई Wasm-आधारित ऐप्लिकेशन से मैच करता है; यह एपीआई को ज़्यादा एर्गोनॉमिक बनाता है, जिससे परफ़ॉर्मेंस बेहतर होती है.
नया क्या है?
FileSystemSyncAccessHandle
नीचे दिए गए ऐसे तरीके दिखाता है जो एसिंक्रोनस होते थे, लेकिन वे Chromium 108 के हिसाब से सिंक होते हैं.
truncate(newSize)
: ऐक्सेस हैंडल से जुड़ी फ़ाइल का साइज़ बदलकरnewSize
बाइट रखें. अगरnewSize
का साइज़ मौजूदा फ़ाइल साइज़ से ज़्यादा है, तो यह फ़ाइल को शून्य बाइट से पैड करता है. ऐसा न करने पर यह फ़ाइल को छोटा कर देता है.getSize()
: ऐक्सेस हैंडल से जुड़ी फ़ाइल का साइज़ बाइट में दिखाता है.flush()
: यह पक्का करता है कि ऐक्सेस हैंडल से जुड़ी फ़ाइल के कॉन्टेंट में,write()
के ज़रिए किए गए सभी बदलाव शामिल हों.close()
: ऐक्सेस हैंडल को फ़्लश करता है और फिर बंद करता है. ऐक्सेस हैंडल को बंद करने से, उस पर कोई और कार्रवाई नहीं की जा सकती. साथ ही, ऐक्सेस हैंडल से जुड़ी एंट्री पर लगा लॉक रिलीज़ हो जाता है.
// In a `Worker`:
const root = await navigator.storage.getDirectory();
const fileHandle = await root.getFileHandle('test', { create: true });
// `createSyncAccessHandle()` is still async.
const accessHandle = await fileHandle.createSyncAccessHandle();
// Both `read()` and `write()` were sync before.
accessHandle.read(/* ... */);
accessHandle.write(/* ... */);
// New: synchronous as of Chromium 108.
console.log(accessHandle.getSize());
accessHandle.truncate(123);
accessHandle.flush();
accessHandle.close();
मुझे क्या करना होगा?
ध्यान दें कि तरीकों को एसिंक्रोनस से सिंक्रोनस में बदलना वेब पर दिखने वाला ऐसा बदलाव है जिसमें संभावित रुकावट होती है. await
को सिंक करने के तरीकों में इस्तेमाल करने पर कोई समस्या नहीं होती, लेकिन Promise.then()
का कोई भी इस्तेमाल नहीं किया जा सकता.
अगर आपने पहले एसिंक्रोनस और अब सिंक करने वाले किसी तरीके का इस्तेमाल करके, then()
कॉल को चेन किया है, तो आपको अपना कोड बदलना होगा.
// (✅) This won't break, but you better remove the superfluous `await`:
await accessHandle.flush();
// ✅ Correct:
accessHandle.flush();
// ⛔️ This will break, and you need to restructure your code:
accessHandle.flush().then(/* Follow-up code */);
// ✅ Correct:
accessHandle.flush();
/* Follow-up code */
इसी विषय से जुड़े कुछ लिंक
- टैग की समीक्षा
- खास जानकारी
- किसी प्रॉडक्ट की जानकारी से जुड़ी समस्या (जिसकी वजह से बदलाव हुआ)
- ChromeStatus एंट्री
- Chromium की गड़बड़ी