ओरिजिनल निजी फ़ाइल सिस्टम, एक खास तरह की फ़ाइल का ऐक्सेस देता है. यह फ़ाइल, परफ़ॉर्मेंस के लिए काफ़ी ऑप्टिमाइज़ की जाती है. उदाहरण के लिए, किसी फ़ाइल के कॉन्टेंट को इन-प्लेस और खास तौर पर लिखने का ऐक्सेस देकर. डेवलपर, createSyncAccessHandle()
को कॉल करके ऐसी फ़ाइलों का ऐक्सेस पा सकते हैं. यह एक ऐसा तरीका है जो FileSystemFileHandle
ऑब्जेक्ट पर उपलब्ध होता है. इस कॉल
के नतीजे में आपको FileSystemSyncAccessHandle
मिलेगा.
FileSystemSyncAccessHandle
एक फ़ाइल प्राइमिटिव है, जो लोकल फ़ाइलों को बेहतर तरीके से ऐक्सेस करने की सुविधा देता है. इसका इस्तेमाल मुख्य रूप से, C/C++ कोड को Wasm में पोर्ट करने वाले ऐप्लिकेशन में किया जाता है. हालांकि, फ़िलहाल Wasm में असाइनोक्रोनस कॉल पूरी तरह से काम नहीं करते. इसके अलावा, Asyncify लाइब्रेरी का इस्तेमाल करने से, ऐप्लिकेशन की परफ़ॉर्मेंस पर काफ़ी बुरा असर पड़ता है. FileSystemSyncAccessHandle
सिंक्रोनस के सभी तरीके सिंक्रोनस और POSIX जैसे फ़ाइल API के लिए, 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 में गड़बड़ी