Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 1 | # Web Performance Objectives |
| 2 | |
| 3 | [TOC] |
| 4 | |
Nicolás Peña Moreno | 8dc6c07a | 2021-04-13 22:26:59 | [diff] [blame] | 5 | ## 2021 Q2 Objectives |
| 6 | |
| 7 | * Publish public proposal on **smoothness**. |
| 8 | * **Responsiveness**: |
| 9 | * Socialize publicly our definition of interactions and normalization options. |
| 10 | * Implement [interactionID](https://docs.google.com/presentation/d/1nxNFwsGqYy7WmIZ3uv_0HsSIQMSXQA9_PqlOD3V74Us/edit#slide=id.p). |
| 11 | * Enable exposing information about **Single Page Apps** via |
| 12 | [navigation IDs](https://docs.google.com/presentation/d/1snPIu2GJ_JO7esJ_3YmOAiXC_g4PeQW3jclYx1u3Qzs/edit#slide=id.p). |
| 13 | * Expose performance information about **back-forward cache** navigations to performance timeline. |
| 14 | * Specify and launch redefined (window-based) **Cumulative Layout Shift**. |
| 15 | * Ship **JS Sampling Profiler**. |
| 16 | * Facilitate **Resource Timing** integration into Fetch and change implementation as needed. |
| 17 | * Obtain more accurate **abandonment** rates on Chrome to determine what to do about the problem. |
| 18 | * Implement and ship [droppedEntriesCount](https://w3c.github.io/performance-timeline/#dom-performanceobservercallbackoptions-droppedentriescount). |
| 19 | |
| 20 | ## 2021 Q1 Progress |
| 21 | |
| 22 | * **performance.measureMemory** was shipped! See the blog [post](https://web.dev/monitor-total-page-memory-usage/). |
| 23 | * **Single Page Apps**: |
| 24 | * Provided feedback to the AppHistory [explainer](https://github.com/WICG/app-history/blob/main/README.md). |
| 25 | * Discussed how to extend performance timeline to include SPAs in the WebPerf WG. |
| 26 | * Improved **abandonment** data on Chrome to account for FCP more accurately. |
| 27 | * Continued work on **smoothness** and **responsiveness** proposals. |
| 28 | * Proposed way to include **back-forward cache** performance information to the WebPerf WG. |
| 29 | * Organized **A/B testing workshop** to better understand the problem space: see |
| 30 | [notes](https://docs.google.com/document/d/1rmVjH7-5hGk_VB0EwErM1tcEVz100XZDYlaSd75WbRE/edit?ts=601c4a9c). |
| 31 | * Completed GC integration work for the **JS Sampling Profiler**. |
| 32 | * Various improvements for **Layout Instability** which especially impact carousels. See |
| 33 | [changelog](https://chromium.googlesource.com/chromium/src/+/main/docs/speed/metrics_changelog/cls.md). |
| 34 | * Decided redefinition of **Cumulative Layout Shift** and announced in [post](https://web.dev/evolving-cls/). |
| 35 | |
Nicolás Peña Moreno | fa375fb | 2021-01-13 18:38:11 | [diff] [blame] | 36 | ## 2021 Q1 Objectives |
| 37 | |
| 38 | * **performance.measureMemory**: ship the API. |
| 39 | * **Single Page Apps**: |
| 40 | * Publish an explainer about SPA issues. |
| 41 | * Determine whether User Timing hints conventions are still useful. |
| 42 | * **Abandonment**: |
| 43 | * Gather concrete feedback form analytics providers and other potential users of this API. |
| 44 | * Improve confidence on the abandonment rates computed by implementing a renderer-side flushing. |
| 45 | * Update analysis on rates when the above fix has reached Chrome Stable. |
| 46 | * **Smoothness**: |
| 47 | * Continue refining the definition of dropped frames. |
| 48 | * Move proposal to WICG. |
| 49 | * **Back-forward cache**: |
| 50 | * Expand scope to include FCP and FID in the values reported after back-forward navigations. |
| 51 | * Investigate backwards compatibility of adding new entries and propose an API shaped based on the outcome. |
| 52 | * **Responsiveness**: |
| 53 | * Investigate correctness of existing internal metrics and implement fixes as needed. |
| 54 | * Further investigate scrolling performance and how it should be integrated with metric. |
| 55 | * Define user interactions that we care about for this API. |
| 56 | * Create a manual test corpus to test ideas about the 'end time' of a user interaction. |
| 57 | * **First Contentful Paint**: improve implementation to pass more |
| 58 | [tests](https://wpt.fyi/results/paint-timing?label=master&label=experimental). |
| 59 | * **Longtasks**: add system time, including garbage collection |
| 60 | ([bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1091754)). |
| 61 | * Present proposal to security team, and begin socializing the proposal externally. |
| 62 | * **A/B testing**: organize workshop on client-side A/B testing. |
Nicolás Peña Moreno | 56bfe52d | 2021-01-15 14:48:21 | [diff] [blame] | 63 | * **JS Sampling Profiler**: |
| 64 | * Complete the GC integration work. |
| 65 | * Ship the API. |
Nicolás Peña Moreno | fa375fb | 2021-01-13 18:38:11 | [diff] [blame] | 66 | |
| 67 | ## 2020 Q4 Progress |
| 68 | |
| 69 | ### New web performance APIs |
| 70 | |
| 71 | * **performance.measureMemory**: added support for cross-origin iframes in the same process and sent |
| 72 | [Intent to Ship](https://groups.google.com/a/chromium.org/g/blink-dev/c/RExJ9a3SmQw). |
| 73 | * **Page abandonment**: made some data available publicly and socialized it in a |
| 74 | [blogpost](https://calendar.perfplanet.com/2020/abandonment/). |
Nicolás Peña Moreno | 56bfe52d | 2021-01-15 14:48:21 | [diff] [blame] | 75 | * **JS Sampling Profiler**: |
| 76 | * Implemented the API so it requires COOP/COEP and gated it behind Document Policy. |
| 77 | * Finished a prototype of GC integration for the V8 sampling profiler (which will help reduce profiler startup time). |
| 78 | * Landed some initial support for code object refcounting. |
Nicolás Peña Moreno | fa375fb | 2021-01-13 18:38:11 | [diff] [blame] | 79 | * **Smoothness**: published a proposal around dropped frames and presented it at TPAC. |
| 80 | * **Back-forward cache**: determined that it is backwards compatible to expose a PerformanceNavigationTiming |
| 81 | entry for back-forward navigations. |
| 82 | * **Responsiveness**: |
| 83 | * Investigated some internal metrics, but found some metric quality issues that need to be investigated. |
| 84 | * Started brainstorm on capturing asynchronous work as well as which user interactions to capture. |
| 85 | * Did investigation on scrolling and determined that in most cases pages do not seem to suffer from poor |
| 86 | scrolling performance. |
| 87 | |
| 88 | ### Existing web performance API improvements |
| 89 | |
| 90 | * **Largest Contentful Paint**: include removed nodes ([bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1045640)) |
| 91 | and ignored images occupying the full viewport ([bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1133883)). |
| 92 | * **Cumulative Layout Shift**: implemented various fixes, see |
John Palmer | 046f987 | 2021-05-24 01:24:56 | [diff] [blame] | 93 | [changelog](https://chromium.googlesource.com/chromium/src/+/main/docs/speed/metrics_changelog/README.md). |
Nicolás Peña Moreno | fa375fb | 2021-01-13 18:38:11 | [diff] [blame] | 94 | |
Nicolás Peña Moreno | 6bbfb9c | 2020-10-13 20:15:16 | [diff] [blame] | 95 | ## 2020 Q4 Objectives |
| 96 | |
| 97 | ### New web performance APIs |
| 98 | |
| 99 | * {#measure-memory-20204}**performance.measureMemory**: |
| 100 | * Add support for cross-origin iframes. |
| 101 | * Send Intent to Ship and ship --- API would become available early next year. |
| 102 | * {#spas-20204}**Single Page Apps**: |
| 103 | * Publish document for feedback on measurement issues, attributions issues, and other issues specific |
| 104 | to SPAs. |
| 105 | * Land support for User Timing hints in Chrome, and get 2+ frameworks to start using such hints. |
| 106 | * {#page-abandonment-20204}**Page abandonment**: publish data on abandonment rates, making a case for or against |
| 107 | an abandonment API. |
| 108 | * {#js-profiler-20204}**JS Sampling Profiler**: |
| 109 | * Implement the API so it requires COOP/COEP. |
| 110 | * Add support for warm codemap initialization. |
| 111 | * Add web platform tests. |
| 112 | * _(Stretch)_ Send Intent to Ship. |
| 113 | * {#smoothness-20204}**Smoothness** (FrameTiming): |
| 114 | * Discuss and socialize API shape. |
| 115 | * Propose API on WICG. |
| 116 | * Start a TAG review. |
| 117 | * {#bf-cache-20204}**Back-forward cache**: document and socialize a concrete proposal on a web API that supports |
| 118 | monitoring performance of sites on browsers that may perform back-forward navigations. |
| 119 | * {#responsiveness-20204}**Responsiveness**: |
| 120 | * Investigate internal metrics and potentially add new metrics to capture end-to-end responsiveness. |
| 121 | * Document how popular frameworks handle user interactions. |
| 122 | * Brainstorm on how to expand Event Timing to capture user handling for asynchronous work and to handle multiple |
| 123 | events referring to a single user interaction. |
| 124 | * Complete on-going investigation on whether scroll performance is also a problem in the web that needs a web API. |
| 125 | |
| 126 | ### Existing web performance API improvements |
| 127 | |
| 128 | * {#lcp-20204}**Largest Contentful Paint**: |
| 129 | * Complete [investigation](https://bugs.chromium.org/p/chromium/issues/detail?id=1045640) on removed nodes |
| 130 | and if needed update the API. |
| 131 | * [Ignore](https://bugs.chromium.org/p/chromium/issues/detail?id=1133883) images that occupy the full viewport. |
| 132 | * {#cls-20204}**Cumulative Layout Shift**: evaluate the impact of triggering on empty or invisible content and update |
| 133 | [spec](https://github.com/WICG/layout-instability/issues/61) and implementation accordingly. |
| 134 | * {#fcp-20204}**First Contentful Paint**: improve implementation to pass more |
| 135 | [tests](https://wpt.fyi/results/paint-timing?label=master&label=experimental). |
| 136 | * {#rt-worker-20204}**Navigation Timing**: [Fix](https://crbug.com/925239) encoded/decoded body sizes when going |
| 137 | through service workers. |
| 138 | |
| 139 | ## 2020 Q3 Progress |
| 140 | |
| 141 | ### New web performance APIs |
| 142 | |
| 143 | * [performance.measureMemory](#measure-memory-20203): |
| 144 | * Spec was reviewed and polished. |
| 145 | * API support was added for workers (available from Chrome 87). |
| 146 | * [Page abandonment](#page-abandonment-20203): improved data was gathered, but more accuracy improvements are needed. |
| 147 | * [VisibilityStateEntry](#page-visibility-20203): |
| 148 | [explainer](https://docs.google.com/document/d/1l5kHiJRkdQwEN-CYI5_mUNODhQVB5rCyjN4jHDdXDHA/edit#), |
| 149 | [discussion](https://github.com/w3c/performance-timeline/issues/105), and TAG |
| 150 | [review](https://github.com/w3ctag/design-reviews/issues/534) kicked off, but no consensus yet on API shape. |
| 151 | * [FrameTiming](#frame-timing-20203): a lot of research on defining a good metric to capture smoothness. |
| 152 | * [isInputPending](#fb-driven-20203): shipped and available from Chrome 87! |
| 153 | |
| 154 | ### Existing web performance API improvements |
| 155 | |
| 156 | * [LargestContentfulPaint](#lcp-20203): |
| 157 | * Did analysis on how LCP would change when removed content is included. |
| 158 | * Ignored paints occurring with opacity 0. |
John Palmer | 046f987 | 2021-05-24 01:24:56 | [diff] [blame] | 159 | * CumulativeLayoutShift [fixes](https://chromium.googlesource.com/chromium/src/+/main/docs/speed/metrics_changelog/cls.md): |
Nicolás Peña Moreno | 6bbfb9c | 2020-10-13 20:15:16 | [diff] [blame] | 160 | * Ignored shifts from video thumb sliders. |
| 161 | * Fixed computations for ink overflow and transforms. |
| 162 | * Updated computations when child moves alongside their parent element. |
| 163 | |
| 164 | ### Interop |
| 165 | |
| 166 | * [Web vitals specs](#vitals-specs-20203): triaged new |
| 167 | [issues](https://github.com/search?q=is%3Aissue+created%3A2020-06-01..2020-09-30+repo%3Awicg%2Flayout-instability+repo%3Awicg%2Flargest-contentful-paint+repo%3Awicg%2Fevent-timing&type=issues) |
| 168 | as well as existing ones. |
| 169 | * [Paint Timing](#paint-timing-20203): fixed two FCP tests by improving our implementation. |
| 170 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 171 | ## 2020 Q3 Objectives |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 172 | |
| 173 | ### New web performance APIs |
| 174 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 175 | * {#measure-memory-20203}Continue [previous work](#measure-memory-20202) on **performance.measureMemory**. |
| 176 | * Extend the scope of the API to workers and cross-site iframes. |
| 177 | * Do a review over the spec and polish it. |
| 178 | * {#spas-20203}Continue [previous work](#spas-20202) on **Single Page Apps** (SPAs). |
| 179 | * Complete partnerships with frameworks and begin gathering data using the strategy based on User Timing annotations. |
| 180 | * {#page-abandonment-20203}Continue [previous work](#page-abandonment-20202) on **page load abandonment**. |
| 181 | * Decide a path forward for a potential new web API based on data from the metric we recently implemented. |
| 182 | * {#page-visibility-20203}Continue [previous work](#page-visibility-20202) on exposing full |
| 183 | **[Page Visibility](https://github.com/w3c/page-visibility/)** history. We intend to spec and ship the |
| 184 | [VisibilityStateEntry](https://docs.google.com/document/d/1l5kHiJRkdQwEN-CYI5_mUNODhQVB5rCyjN4jHDdXDHA/edit). |
Nicolás Peña Moreno | c667b22 | 2020-07-16 21:39:39 | [diff] [blame] | 185 | * {#frame-timing-20203}Work on the |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 186 | **[Frame Timing](https://docs.google.com/document/d/1t3A56iTN01ReEELJ18_jLYrvc13L3hDTXWK46AafKwE/edit)** proposal. |
Nicolás Peña Moreno | 904a5d9 | 2020-07-20 18:24:31 | [diff] [blame] | 187 | * Draft a spec. |
| 188 | * _(Stretch)_ Land a prototype of the API. |
| 189 | * {#fb-driven-20203}Continue [previous work](#fb-driven-20202) on Facebook-driven APIs. |
| 190 | * Based on the iframe layerization experiment results, send Intent to Ship for **isInputPending**. |
| 191 | * _(Stretch)_ Implement warm initialization logic for the **JS Self-Profiling** API. |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 192 | |
| 193 | ### Existing web performance API improvements |
| 194 | |
| 195 | * {#lcp-20203}Improve quality of **[Largest Contentful Paint](https://github.com/WICG/largest-contentful-paint)**. |
| 196 | * Decide whether LCP including removals is better than the current definition (which excludes removals). |
| 197 | * Address problems with LCP not correctly accounting for opacity in some cases due to optimizations in paint code: see |
| 198 | relevant [bug](https://bugs.chromium.org/p/chromium/issues/detail?id=1092473). |
| 199 | * {#normalization-20203}Brainstorm ideas around better **normalization** techniques for existing web performance metrics and |
| 200 | socialize these ideas with the W3C Web Perf WG. |
| 201 | |
| 202 | ### Interop |
| 203 | |
| 204 | * {#vitals-specs-20203}Triage spec issues filed on GitHub. We intend to give higher priority to feeedback on |
| 205 | [web vitals](https://web.dev/vitals/) specs. |
| 206 | * {#event-timing-20203}Reduce WPT test flakiness on **[Event Timing](https://github.com/WICG/event-timing)**. |
| 207 | * {#paint-timing-20203}Change more of Chrome's **[Paint Timing](https://github.com/w3c/paint-timing)** implementation to pass more |
| 208 | of the currently failing WPTs. |
| 209 | |
| 210 | ## 2020 Q2 Progress |
| 211 | |
| 212 | * [performance.measureMemory](#measure-memory-20202): |
| 213 | * Crafted a plan to enable extending the API to workers as well as to cross-site iframes with the appropriate COEP headers. |
| 214 | * Drafted a [spec](https://ulan.github.io/misc/measure-memory-spec/), but it requires review. |
| 215 | * [Single Page Apps](#spas-20202): |
| 216 | * Designed a strategy for routing frameworks to report the start and end of SPAs via User Timing. |
| 217 | * Began conversations with such frameworks but haven't started gathering data with the strategy we designed. |
| 218 | * Presented our data-driven approach to the W3C Web Perf WG. |
| 219 | * [Page abandonment](#page-abandonment-20202): Socialized a proposal for how to define abandonment and brainstormed ways in which |
| 220 | we could expose the data to web developers. However, we have not yet reached a decision on how we plan to expose the data because |
| 221 | there is no one actively working on solving design issues with [Origin Policy](https://wicg.github.io/origin-policy/). |
Nicolás Peña Moreno | c667b22 | 2020-07-16 21:39:39 | [diff] [blame] | 222 | * [Event Timing](#event-timing-20202): Shipped the API, which should be available on Chrome 85 (see chromestatus |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 223 | [entry](https://www.chromestatus.com/feature/5167290693713920)). |
| 224 | * [Page Visibility](#page-visibility-20202): Socialized our proposal and based on feedback will work on shipping |
| 225 | VisibilityStateEntry (see the [explainer](https://docs.google.com/document/d/1l5kHiJRkdQwEN-CYI5_mUNODhQVB5rCyjN4jHDdXDHA/edit)). |
| 226 | * [Layout Instability sources](#cls-sources-20202): Shipped the `sources` attribute, which should be available on Chrome 84 (see |
| 227 | chromestatus [entry](https://www.chromestatus.com/feature/5712483207610368)). |
| 228 | * Fixed layout shifts being reported from controls in the video element, see relevant [bug](https://crbug.com/1088311). The fix is |
| 229 | available on Chrome 85. |
| 230 | * [Largest Contentful Paint removal](#lcp-removal-20202): Added a metric that computes an experimental version of LCP which |
| 231 | includes content that is removed from the page. We're waiting to get Stable data in order to decide whether this is an |
| 232 | improvement over the existing LCP metric. |
| 233 | * [Final Largest Contentful Paint](#final-lcp-20202): Wrote a |
| 234 | [proposal](https://docs.google.com/document/d/1a24lxTmSycox5HS1mdtj09Sinf1mJCifdv-oREUJQ1A/edit) on how to surface the final LCP |
| 235 | candidate to a page, but this work has been deprioritized for the time being. |
| 236 | * [Paint Timing](#paint-timing-20202): Implemented a couple of fixes and now pass two more tests, but more work is needed to pass |
| 237 | all of them. |
| 238 | * [Documentation](#documentation-20202): Submitted feedback on some of the metrics content on web.dev, most of which was actioned |
| 239 | upon. Updated MDN entries for core web vitals metrics. |
Nicolás Peña Moreno | 904a5d9 | 2020-07-20 18:24:31 | [diff] [blame] | 240 | * [Facebook-driven APIs](#fb-driven-20202): Landed support for predicting touch and gesture events for isInputPending. |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 241 | |
| 242 | ## 2020 Q2 Objectives |
| 243 | |
| 244 | ### New web performance APIs |
| 245 | |
| 246 | * {#measure-memory-20202}Work towards shipping |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 247 | **[performance.measureMemory](https://github.com/WICG/performance-measure-memory)**. |
| 248 | This API intends to provide memory measurements for web pages without |
| 249 | leaking information. It will replace the non-standard performance.memory and |
| 250 | provide more accurate information, but will require the website to be |
| 251 | [cross-origin |
| 252 | isolated](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/crossOriginIsolated). |
| 253 | Try it out with the Origin Trial |
| 254 | [here](https://web.dev/monitor-total-page-memory-usage/#using-performance.measurememory())! |
| 255 | Deliverables for this quarter: |
| 256 | * Extend the scope of the API to workers. |
| 257 | * Draft a spec. |
| 258 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 259 | * {#spas-20202}Work towards web perf support for **Single Page Apps** (SPAs). SPAs have |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 260 | long been mistreated by our web performance APIs, which mostly focus on the |
| 261 | initial page load for ‘multi-page apps’. It will be a long process to |
| 262 | resolve all measurement gaps, but we intend to start making progress on |
| 263 | better performance measurements for SPAs by using a data-driven approach. |
| 264 | Deliverables for this quarter: |
| 265 | * Implement a strategy for measuring the performance of SPA navigations in |
| 266 | RUM, based on explicit navigation annotations via User Timing. |
| 267 | * Partner with some frameworks to gather data using said strategy. |
| 268 | * Socialize an explainer with our ideas. |
| 269 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 270 | * {#page-abandonment-20202}Work towards web perf support for **page abandonment**. Currently, our APIs |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 271 | are blind to a class of users that decide to leave the website very early |
| 272 | on, before the performance measurement framework of the website is set into |
| 273 | place. This quarter, we plan to create and socialize a proposal about |
| 274 | measuring early page abandonment. |
| 275 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 276 | * {#event-timing-20202}Ship the full **[Event Timing](https://github.com/WICG/event-timing)** API. |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 277 | Currently, Chrome ships only ‘first-input’ to enable users to measure their |
| 278 | [First Input Delay](https://web.dev/fid/). We intend to ship support for |
| 279 | ‘event’ so that developers can track all slow events. Each entry will |
| 280 | include a ‘target’ attribute to know which was the EventTarget. We’ll |
| 281 | support a durationThreshold parameter in the observer to tweak the duration |
| 282 | of events being observed. Finally, we’ll also have performance.eventCounts |
| 283 | to enable computing estimated percentiles based on the data received. |
| 284 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 285 | * {#page-visibility-20202}Ship a **[Page Visibility](https://github.com/w3c/page-visibility/)** |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 286 | observer. Right now, the Page Visibility API allows registering an event |
| 287 | listener for future changes in visibility, but any visibility states prior |
| 288 | to that are missed. The solution to this is having an observer which enables |
| 289 | ‘buffered’ entries, so a full history of the visibility states of the page |
| 290 | is available. An alternative considered was having a boolean flag in the |
| 291 | PerformanceEntry stating that the page was backgrounded before the entry was |
| 292 | created, but there was overwhelming |
| 293 | [support](https://lists.w3.org/Archives/Public/public-web-perf/2020Apr/0005.html) |
| 294 | for the observer instead. |
| 295 | |
Nicolás Peña Moreno | 904a5d9 | 2020-07-20 18:24:31 | [diff] [blame] | 296 | * {#fb-driven-20202}Provide support for two Facebook-driven APIs: |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 297 | [isInputPending](https://github.com/WICG/is-input-pending) and [JavaScript |
| 298 | Self-Profiling](https://github.com/WICG/js-self-profiling). The |
| 299 | **isInputPending** API enables developers to query whether the browser has |
| 300 | received but not yet processed certain kinds of user inputs. This way, work |
| 301 | can be scheduled on longer tasks while still enabling the task to stopped |
| 302 | when higher priority work arises. The **JS Self-Profiling** API enables |
| 303 | developers to collect JS profiles from real users, given a sampling rate and |
| 304 | capacity. It enables measuring the performance impact of specific JS |
| 305 | functions and finding hotspots in JS code. |
| 306 | |
| 307 | ### Existing web performance API improvements |
| 308 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 309 | * {#cls-sources-20202}Ship the |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 310 | [sources](https://github.com/WICG/layout-instability#Source-Attribution) |
| 311 | attribute for the |
| 312 | **[LayoutInstability](https://github.com/WICG/layout-instability)** API. The |
| 313 | Layout Instability API provides excellent information about content shifting |
| 314 | on a website. This API is already shipped in Chrome. However, it’s often hard |
| 315 | to figure out which content is shifting. This new attribute will inform |
| 316 | developers about the shifting elements and their locations within the |
| 317 | viewport. |
| 318 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 319 | * {#lcp-removal-20202}**[LargestContentfulPaint](https://github.com/WICG/largest-contentful-paint)**: |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 320 | gather data about LCP without excluding DOM nodes that were removed. The |
| 321 | Largest Contentful Paint API exposes the largest image or text that is painted |
| 322 | in the page. Currently, content removed from the website is also removed as a |
| 323 | candidate for LCP. However, this negatively affects some websites, for |
| 324 | instance those with certain types of image carousels. This quarter, we’ll |
| 325 | gather data internally to determine whether we should start including removed |
| 326 | DOM content. The API itself will not change for now. |
| 327 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 328 | * {#final-lcp-20202}_(Stretch)_ Work on exposing the **‘final’ LargestContentfulPaint** candidate. |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 329 | Currently LCP just emits a new entry whenever a new candidate is found. This |
| 330 | means that a developer has no way to know when LCP is ‘done’, which can happen |
| 331 | early on if there is some relevant user input in the page. We could consider |
| 332 | surfacing an entry to indicate that LCP computations are finished and |
| 333 | including the final LCP value, when possible. There’s also an |
| 334 | [idea](https://github.com/WICG/largest-contentful-paint/issues/43#issuecomment-608569132) |
| 335 | to include some heuristics to get a higher quality signal regarding whether |
| 336 | the LCP obtained seems ‘valid’. If we have time this quarter, we’d be happy to |
| 337 | do some exploration on this. |
| 338 | |
| 339 | * _(Stretch)_ **[ResourceTiming](https://github.com/w3c/resource-timing)**: |
| 340 | outline a plan to fix the problem of TAO (Timing-Allow-Origin) being an opt-in |
| 341 | for non-timing information such as transferSize. This may mean using a new |
| 342 | header or relying on some of the upcoming new security primitives in the web. |
| 343 | If we have time this quarter, we’d like to begin tackling this problem by |
| 344 | socializing a concrete proposal for a fix. |
| 345 | |
| 346 | ### Interop and documentation |
| 347 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 348 | * {#paint-timing-20202}**[Paint Timing](https://github.com/w3c/paint-timing)**: change the Chromium |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 349 | implementation so it passes [new web platform |
| 350 | tests](https://wpt.fyi/results/paint-timing/fcp-only?label=experimental&label=master&aligned). |
| 351 | These tests are based on the feedback from WebKit. They intend to ship First |
| 352 | Contentful Paint in the near future! |
| 353 | |
Nicolás Peña Moreno | cbb8a05 | 2020-07-16 16:42:20 | [diff] [blame] | 354 | * {#documentation-20202}Improve the **documentation** of our APIs on MDN and web.dev. We have been |
Nicolás Peña Moreno | c7391bb | 2020-04-30 22:17:12 | [diff] [blame] | 355 | busily shipping new web perf APIs, but some of the documentation of them has |
| 356 | lagged behind. For instance, we’ll make sure that there’s MDN pages on all of |
| 357 | the new APIs we’ve shipped, and we’ll collaborate with DevRel to ensure that |
| 358 | the documentation on web.dev is accurate. |