Very exciting to see this ready to ship after what sounds like a successful experiment. A few small questions...
On Sat, Aug 10, 2024 at 6:19 AM Scott Haseley <shase...@chromium.org> wrote: > Contact emailsshase...@chromium.org > > Explainer > https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md > > https://github.com/WICG/scheduling-apis/blob/main/explainers/prioritized-task-scheduling.md#scheduleryield > > *Note*: The explainer includes parameters to yield(), but we're initially > shipping this with only the default behavior described in the > specification. It wasn't clear if the parameters were necessary, there was > some concern internally over the exact behavior > <https://github.com/WICG/scheduling-apis/issues/96>, and it complicates > the API. They may yet prove necessary, but it's safer to roll this out --- > handling the main use case --- and revisit later, if needed. > > Specificationhttps://wicg.github.io/scheduling-apis/#dom-scheduler-yield > > Summary > > Provides a method for yielding control to the browser, which can be used > to break up long tasks. Awaiting the promise returned by scheduler.yield() > causes the current task to yield, continuing in a new browser task. This > can be used to improve responsiveness issues caused by long tasks. > Continuations are prioritized to mitigate performance problems of existing > alternatives. > > > Blink componentBlink>Scheduling>APIs > <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EScheduling%3EAPIs> > > TAG reviewhttps://github.com/w3ctag/design-reviews/issues/966 > > TAG review statusPending > > Chromium Trial NameSchedulerYield > > Link to origin trial feedback summary > https://docs.google.com/document/d/1HSlhqWsamWyR9bwgtCzB2TpVW7CUm9QkyKbK0TdM0RA/edit?usp=sharing > > Origin Trial documentation link > https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md > > Risks > > > Interoperability and Compatibility > > This is a new feature and will not change existing event loop task > scheduling, so the main risk is that other browsers might not implement the > feature. There is an interop challenge, however, that comes with > prioritization: we want to be specific enough to provide developers > guarantees and interoperable implementations, but provide enough scheduling > flexibility for UAs (like the HTML specification does with task > sources/task queues), which we'll keep in mind while drafting the spec (see > also https://github.com/WICG/scheduling-apis/issues/67). > > > *Gecko*: Positive ( > https://github.com/mozilla/standards-positions/issues/1039) Note that the > issue opened for yield() was folded in with the original Scheduling APIs > proposal, as this is an enhancement to that. > > *WebKit*: No signal ( > https://github.com/WebKit/standards-positions/issues/361) > > *Web developers*: Positive > > Several partners were able to improve site performance using the API > during Origin Trial (see the Origin Trial feedback link for quotes). > > Also some tweets I found with positive sentiment: > - https://x.com/cramforce/status/1588912606777335808 > - https://x.com/mohamedmansour/status/1752909705842933943 > - https://x.com/sebastienlorber/status/1589939130225475584 > > *Other signals*: > > Ergonomics > > The default use (inserting yield points in long tasks) should enable > Chrome to maintain better performance (responsiveness). There is a risk of > continuations starving other work, but there are reasonable mitigations, > e.g. bounding total of prioritized continuations (see also > https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md#preventing-task-starvation-by-continuations > ). > > > Activation > > The feature would benefit from a polyfill so that tasks still yield in the > case the feature is unavailable. The behavior can be approximated by > awaiting `scheduler.postTask()` or wrapping `setTimeout(0)` in a promise. > The signal inheritance bit [1], however, would need transpilation support > to propagate the current signal across async (Promise) boundaries. > > > [1] > https://docs.google.com/document/d/1rIOBBbkLh3w79hBrJ2IrZWmo5tzkVFc0spJHPE8iP-E/edit#heading=h.c484rp62uh2i > > Security > > > https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md#self-review-questionnaire-security-and-privacy > https://wicg.github.io/scheduling-apis/#sec-security > > > WebView application risks > > Does this intent deprecate or change behavior of existing APIs, such that > it has potentially high risk for Android WebView-based applications? > > No, this is a new API. > > > Debuggability > > This has basic new-API devtools support. We plan to work with the devtools > team to see if we can integrate continuations into the performance panel in > some way. > > > Will this feature be supported on all six Blink platforms (Windows, Mac, > Linux, ChromeOS, Android, and Android WebView)?Yes > > Is this feature fully tested by web-platform-tests > <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> > ?Yes > > > https://wpt.fyi/results/scheduler/tentative/yield?label=experimental&label=master&aligned > > > DevTrial instructions > https://github.com/WICG/scheduling-apis/blob/main/implementation-status.md > > Flag name on chrome://flags--enable-blink-features=SchedulerYield > > Finch feature nameNone > > Non-finch justificationNone > I think this should be no chrome://flags, and a Finch feature name of SchedulerYield. (Assuming you got the default of having a base::Feature generated from the Blink feature.) > > > Requires code in //chrome?False > > Tracking bughttps://bugs.chromium.org/p/chromium/issues/detail?id=979020 > > MeasurementUsage is measured by the SchedulerYield UseCounter: > https://chromestatus.com/metrics/feature/popularity#SchedulerYield > > Availability expectationInitially available only in Chromium browsers. > > Adoption expectationFeature is a key part of optimizing long tasks, which > contribute to poor responsiveness: > https://web.dev/articles/optimize-long-tasks. Several partners are > waiting for this API as part of INP optimization efforts. > > Adoption planThere has already communication with developers in > anticipation of this API, e.g. > https://web.dev/articles/optimize-long-tasks. I'll work with the devrel > team on what additional communication may be required. > > Non-OSS dependencies > > Does the feature depend on any code or APIs outside the Chromium open > source repository and its open-source dependencies to function? > No. > > Estimated milestones > Shipping on desktop 129 > Origin trial desktop first 115 > Origin trial desktop last 120 > DevTrial on desktop 113 > Shipping on Android 129 > Origin trial Android first 115 > Origin trial Android last 120 > DevTrial on Android 113 > Shipping on WebView 129 > Origin trial WebView first 115 > Origin trial WebView last 120 > > Anticipated spec changes > > Open questions about a feature may be a source of future web compat or > interop issues. Please list open issues (e.g. links to known github issues > in the project for the feature specification) whose resolution may > introduce web compat/interop risk (e.g., changing to naming or structure of > the API in a non-backward-compatible way). > > No breaking changes are expected, but enhancements may be added as we > learn more from usage. We also may need to adjust our internal scheduling > policies (i.e. relative ordering of task sources) depending on what we > learn from early adopters. > > The open issue that could potentially affect this API is the naming of > related "yieldy" APIs: https://github.com/WICG/scheduling-apis/issues/95. > This was raised in the WebKit position, specifically that > scheduler.render() (future API enhancement) doesn't quite fit. We plan to > name around scheduler.yield(), and are leaning towards rolling > scheduler.render() in as a yield() parameter -- but this is still TBD. > https://github.com/WICG/scheduling-apis/blob/main/explainers/yield-and-continuation.md#open-questions lists a few open questions, which could have compat impacts. I suspect that section of the explainer just hasn't been updated. Can you confirm? > > > Link to entry on the Chrome Platform Status > https://chromestatus.com/feature/6266249336586240?gate=6275382550986752 > > Links to previous Intent discussionsIntent to Prototype: > https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ1SBQP-ABM3%2BsDtKzUZiPoSCWqW2mLOjMrUfFBx4TomSw%40mail.gmail.com > Intent to Experiment: > https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ1Uj8nX5HrUT86iZ83YBj%3D6GJ4jnKZKYF3tOq%3D_twN_Yg%40mail.gmail.com > > > This intent message was generated by Chrome Platform Status > <https://chromestatus.com/>. > > -- > 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/CAKXGoJ3q%2BzPuSwBQ6Xp48aCP6m1kdE30Znh4wuzB_bL16UQwBg%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKXGoJ3q%2BzPuSwBQ6Xp48aCP6m1kdE30Znh4wuzB_bL16UQwBg%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > -- 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/CAM0wra__BaTWoBJWkbeTYiYgQ%2B61_qh-i4P%2Br%2BLE%3DAe6682YnQ%40mail.gmail.com.