WebPerf WG roadmap
igrigorik@chromium.org
| 2016 | 2017 | 2018 |
High Resolution Time | Level 2 CR | Level 2 REC | --- |
Performance Timeline | Level 2 CR | Level 2 REC | --- |
Resource Timing | Level 1 CR+REC Level 2 CR | Level 2 REC Level 3 CR | Level 3 REC |
Navigation Timing | Level 2 CR | Level 2 REC Level 3 CR | Level 3 REC |
Page Visibility | Level 2 CR | Level 2 REC | --- |
Beacon API | Level 1 CR+REC | Level 2 CR | Level 3 REC |
User Timing | Level 2 CR | Level 2 REC Level 3 CR | Level 3 REC |
requestIdleCallback | Level 1 CR | Level 1 REC | --- |
Preload | Level 1 CR | Level 1 REC | --- |
Resource Hints | Level 1 CR | Level 1 REC | --- |
Level 1 “performance pack”
Brief overview and history of the L1 pack
- Navigation Timing L1 was the first spec produced by the working group.
- It is self contained and does not contain any dependencies.
- High-Resolution Time L1 introduced a high precision monotonic clock.
- Time origin is defined as from navigationStart defined in Navigation Timing L1.
- Performance Timeline L1 was introduced as base infrastructure for new performance entries:
- It defined the base PerformanceEntry object and methods to retrieve said objects from the timeline.
- PerformanceEntry depends on High Resolution time for its timestamps.
- By itself, this spec does not offer any new usable API’s to developers.
- User Timing L1 allowed developers to create own “marks” and “measures”
- The resulting PerformanceMark / PerformanceMeasure interfaces inherit from PerformanceEntry.
- Resource Timing L1 surfaces individual resource fetches to developers.
- PerformanceResourceTiming inherits from PerformanceEntry and extends it with custom attributes.
- It defines the Timing-Allow-Origin header for cross-origin resources.
Level 2 “performance pack”
History and changes from the L1 pack
- Refactor of L1 specs
- Many interfaces are shuffled between specs to bring conceptual coherence and simplify authoring.
- Performance Timeline is now exposed on Worker.
- “Time origin” is moved to High-Resolution Time L2 and is compatible with Window and Worker contexts.
- New PerformanceObserver interface defined on Performance Timeline
- Resource Timing, Nav Timing, User Timing integrations with PerformanceObserver.
- Resource Timing extensions and clarifications:
- Uses new “time origin” definition (High-Resolution Time L2)
- secureConnectionStart is a mandatory attribute.
- New attributes: transferSize, decodedBodySize, encodedBodySize, nextHopProtocol, workerStart
- Processing algorithm clarifications on how to deal with failed resource fetches
- Navigation Timing is redefined as an extension to Resource Timing:
- Navigation Timing entries are exposed via Performance Timeline
- Legacy interfaces are preserved
- User Timing: minor processing clarifications and timestamps are with respect to new “time origin”.
Q3~Q4 deliverables … SHIP ALL THE THINGS!!! Maybe?
- Publish notes / move to WICG…
- Server Timing
- Frame Timing
- Reporting
- NEL
- Snapshot “L2 performance pack”
- What’s new: refactored, consistent time origin, exposed on worker.
- AI’s:
- P0: resolve translation issues for HR-Time
- P0: resolve presence of requests that don't return a response on Resource Timing
- P1: review and/or contribute tests for all L2 specs
- P2: security and privacy reviews
- Publish CR’s
- Page Visibility L2 CR
- What’s new: fire on unload; processing clarifications.
- AI’s:
- P0: land tests
- Publish CR
- Beacon L1 CR
- Depends on Page Visibility L2
- AI’s:
- P0: land tests
- Publish CR
- Move to REC in Q4
- requestIdleCallback L1 CR
- AI’s:
- P0: land tests, security review.
- P1: Resolve interop with HTML spec, integrate Edge feedback
- Publish CR
- Preload L1 CR
- AI’s
- P0: Tests & security review
- Publish CR
Q4+ deliverables
- Fetch all the things?
- Resource Timing, Nav Timing L3’s?
- Multi-request fetches
- …
- Preload
- Define preload cache interop with Fetch
- User Timing L2?
- Declarative marks
- Richer payloads
- …?
- Beacon
- L2:
- GET, custom headers, etc.
- Expose as fetch() primitive?
- Preload
- Define preload cache interop with Fetch
- Resource Hints
- AI’s
- Build tests & interop data
- Security review
- Publish CR… REC?
Process
- Create milestones for each spec
- E.g. https://github.com/w3c/hr-time/milestones/Level%202
- Assign all open issues to milestones
- Assign editors for each next-milestone issue
- Update dashboard to track next-milestone
---
- Organizing the agenda
------
- It would be nice to have a way for developers to mark what content is important; allows browsers to optimize.
- We can have “default” implementation + mechanism for developers to hint us
- First Paint, First contentful Paint
- Starting a navigation
- Visually complete
- Network quiescence
- Delay latency between user interaction and next paint
- Bandwidth efficiency
- Battery efficiency
Performance Observer
- Extend filter options to support filter by “type AND name”
- Option to receive buffered entries as first invocation callback
- Q: should we clear at some point?
Resource Timing extensions
- Recreate resource dependency graph ala Polaris/Scout
- URL of the resource initiating
- AI: Yoav will investigate costs in various implementations
- We need to explain the magical memory cache
- AI: add a note explaining that some browsers may have a magical memory cache and that sometimes you may not get a new event when such a thing is hit.
https://docs.google.com/document/d/1DNRGhlYbMYdBkKsy7z9Bg--83KHa6r9-THurzBNLqTE/edit#