FYI: updated our documentation accordingly (PR
<https://github.com/GoogleChrome/web.dev/pull/6241>).

On Thu, Sep 9, 2021 at 1:40 PM Yoav Weiss <yoavwe...@chromium.org> wrote:

> LGTM to experiment M95-M98
>
> On Wednesday, September 8, 2021 at 9:40:41 AM UTC+2 Emanuel Krivoy wrote:
>
>> Contact emails
>>
>> fived...@chromium.org, r...@chromium.org
>>
>> Explainer
>>
>> https://github.com/WICG/file-system-access/blob/main/AccessHandle.md
>>
>> Specification
>>
>> Work in progress. See explainer for WebIDL definition.
>>
>> Summary
>>
>> The Origin Private File System (OPFS, part of the File System Access API)
>> is augmented with a new surface that brings very performant access to data.
>> This new surface differs from existing ones by offering in-place and
>> exclusive write access to a file’s content. This change, along with the
>> ability to consistently read unflushed modifications and the availability
>> of a synchronous variant on dedicated workers, significantly improves
>> performance and unblocks new use cases (especially for porting existing
>> IO-heavy applications to WebAssembly).
>>
>> This Intent-to-Experiment is only in reference to the sync variant of the
>> API i.e., the createSyncAccessHandle() method and the SyncAccessHandle
>> object (only exposed in worker contexts):
>>
>> const handle = await file.createSyncAccessHandle();
>>
>> var writtenBytes = handle.write(buffer);
>>
>> var readBytes = handle.read(buffer {at: 1});
>>
>> The sync variant is meant to be consumed by low-level entities like
>> toolchains. We expect application developers to prefer the async API with
>> its streaming interface which will be shipped later.
>>
>> AccessHandles is the new API shape for what was previously called Storage
>> Foundation API (Intent-to-Experiment:
>> http://groups.google.com/a/chromium.org/g/blink-dev/c/Jhirhnq3WbY).
>>
>> Blink component
>>
>> Blink>Storage>FileSystem
>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EStorage%3EFileSystem>
>>
>> TAG review
>>
>> https://github.com/w3ctag/design-reviews/issues/664
>>
>> TAG review status
>>
>> Preliminary positive feedback, pending closure after plenary session.
>>
>> Risks
>>
>> Interoperability and Compatibility
>>
>> The feature has to be compatible with existing ways to access data on
>> OPFS i.e., createWritable() and getFile(). The use of write locks and
>> care for backwards compatibility should mean that the risk here is low. In
>> order to ease compatibility concerns in the future, we've added an optional
>> 'mode' parameter to createAccessHandle()/createSyncAccessHandle(). This
>> allows us to eventually extend AccessHandle functionality to non-OPFS
>> file systems without necessarily taking the OPFS behaviour as default (more
>> details here:
>> https://github.com/WICG/file-system-access/blob/main/AccessHandle.md#exposing-accesshandles-on-all-filesystems
>> ).
>>
>> There is a risk of interoperability between vendors, pending the position
>> on implementing this surface. This design is the result of feedback from
>> Gecko and WebKit, who reviewed previous iterations of this functionality
>> and gave feedback that it should integrate more strongly with OPFS. We
>> directly shared documents outlining alternatives considered
>> <https://docs.google.com/document/d/121OZpRk7bKSF7qU3kQLqAEUVSNxqREnE98malHYwWec>,
>> and later our recommendation
>> <https://docs.google.com/document/d/1g7ZCqZ5NdiU7oqyCpsc2iZ7rRAY1ZXO-9VoG4LfP7fM>
>> towards this particular API shape.
>>
>> We believe that the new design, when paired with a separate streams-based
>> extension to OPFS, meets the goal of more strongly integrating with the
>> existing surface. However, we have not yet received replies to the position
>> requests below.
>>
>> Gecko: No formal signal, but generally positive reception with questions
>> about supporting existing surfaces (
>> https://github.com/mozilla/standards-positions/issues/562)
>>
>> WebKit: No signal (
>> https://lists.webkit.org/pipermail/webkit-dev/2021-August/031934.html)
>>
>> Web developers: Positive
>>
>> From our Storage Foundation OT, we received very positive feedback on the
>> need for high performance storage, as well as on the general shape of the
>> API:
>>
>>
>>    -
>>
>>    Adobe’s support statement (about the need for the capability)
>>    <https://github.com/WICG/proposals/issues/10#issuecomment-804145429>
>>    -
>>
>>    absurd-sql’s mention
>>    
>> <https://github.com/mozilla/standards-positions/issues/481#issuecomment-898061119>
>>    -
>>
>>    Reception on Twitter after DevRel announcement
>>    <https://twitter.com/ChromiumDev/status/1405101909757902851>
>>
>>
>> SyncAccessHandles have a very similar shape to the surface that was
>> exposed in Storage Foundation’s Origin Trial. The current implementation in
>> Chrome is currently being tested by partners to confirm it is a good
>> replacement of Storage Foundation for their needs.
>>
>> Ergonomics
>>
>> As mentioned above, SyncAccessHandles offer a very similar surface to
>> the one positively received during Storage Foundation’s OT. The main
>> differences are the migration of file system operations into OPFS and the
>> asynchronicity of auxiliary methods (i.e. methods other than read and
>> write).
>>
>> Since many of our use cases require good interoperability between this
>> API and Wasm, we’ve developed an Emscripten file system
>> <https://github.com/rstz/emscripten-pthreadfs/tree/main/pthreadfs> that
>> allows ported applications to use SyncAccessHandles. This simplifies
>> both activation and use, since the API can be accessed through standard
>> C/C++ file system libraries.
>>
>> Security and Privacy
>>
>> SyncAccessHandles have received approval for Security and Privacy in our 
>> launch
>> bug <https://bugs.chromium.org/p/chromium/issues/detail?id=1232436>.
>>
>> Goals for experimentation
>>
>> In general, we want to validate the new surface against "real world" use
>> cases from our partners and developers at large. In particular, we are
>> interested in the relative usage between the sync and async methods, since
>> this could have an impact on performance when using Asyncify. We also would
>> like to receive qualitative feedback on the ease of use of the API from
>> within Wasm.
>>
>> Debuggability
>>
>> Basic tooling: Autocomplete works as described in "New WebIDL/DOM
>> interfaces and attributes".
>>
>> Extended tooling: we'll eventually want to be able to explore files
>> stored in OPFS. There are two tracking bugs related to this:
>> crbug.com/256067 and crbug.com/735618. This API doesn't really add new
>> storage backends, just new ways to interact with files, so we'd be covered
>> by those as well.
>>
>> File System Access API usage is also reflected in user settings pages
>> such as chrome://settings/siteData.
>>
>> Is this feature fully tested by web-platform-tests
>> <https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md>
>> ?
>>
>> Yes, we’ve added tests for all new functionality, as well as for the
>> intersection between this surface and existing parts of OPFS (in particular
>> for locking semantics). Our test suite is also run against our Incognito
>> mode implementation, since it is significantly different from the regular
>> mode one.
>>
>> wpt.fyi results: wpt.fyi/results/file-system-access
>>
>> Is this feature supported on all six Blink platforms?
>>
>> No. File System Access API is not currently available on Android or
>> Android WebView.
>>
>> DevTrial instructions
>>
>>
>> https://github.com/WICG/file-system-access/blob/main/AccessHandle.md#trying-it-out
>>
>> Flag name
>>
>> FileSystemAccessAccessHandle
>>
>> Requires code in //chrome?
>>
>> False
>>
>> Tracking bug
>>
>> https://bugs.chromium.org/p/chromium/issues/detail?id=1218431
>>
>> Launch bug
>>
>> https://bugs.chromium.org/p/chromium/issues/detail?id=1232436
>>
>> Estimated milestones
>>
>> Access Handles
>>
>> OriginTrial desktop last
>>
>> 98
>>
>> OriginTrial desktop first
>>
>> 95
>>
>> DevTrial on desktop
>>
>> 94
>>
>> Link to entry on the Chrome Platform Status
>>
>> https://chromestatus.com/feature/5702777582911488
>>
>> Links to previous Intent discussions
>>
>> Intent to prototype:
>> https://groups.google.com/a/chromium.org/g/blink-dev/c/33T36N6VBKI
>>
>> Ready for Trial:
>> https://groups.google.com/a/chromium.org/g/blink-dev/c/_nB5VfgXW_I
>>
>>
>> This intent message was mostly generated by Chrome Platform Status
>> <https://www.chromestatus.com/>.
>>
>>

-- 
Thomas Steiner, PhD—Developer Advocate (https://blog.tomayac.com,
https://twitter.com/tomayac)

Google Germany GmbH, ABC-Str. 19, 20354 Hamburg, Germany
Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
Registergericht und -nummer: Hamburg, HRB 86891

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.1.23 (GNU/Linux)

iFy0uwAntT0bE3xtRa5AfeCheCkthAtTh3reSabiGbl0ck0fjumBl3DCharaCTersAttH3b0ttom.
hTtPs://xKcd.cOm/1181/
-----END PGP SIGNATURE-----

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CALgRrLn70%2BSjgxZ5cdPHi5XJRdQus19n9OoHwe1yP9YrX2oSmw%40mail.gmail.com.

Reply via email to