Do you build things with AMP? Fill out the AMP Developer Survey!
AMP

The AMP Project Roadmap

The ongoing development of AMP is conducted in working groups, each with knowledge or interest in a specific area of AMP.

To make their work visible to the community all groups provide regular status updates with details of what they have accomplished and what's up next.

All of the updates listed here are available as issues on GitHub and we'd love you to join the conversation there!

Select working groups

Performance

Status Update Mon Oct 12 2020

What was accomplished

  • fix esm ads performance/query tracking
  • make sure to opt-out control of LTS reporting
  • correctly cache busted control (this caused control to have higher cache hit rate as it was using production resources)
  • make performance-impl more robust in performanceobserver observe calls https://github.com/ampproject/amphtml/pull/30554

Lessons Learned

  • do not do a/b testing during the rollout phase and have a separate clean a/b testing environment
All details on GitHub

What's Next

  • esm from 50% to 100%
All details on GitHub

Performance

Status Update Mon Sep 28 2020

What was accomplished

  • Identified performance bottlenecks with amp.dev including inlined SVGs at top of body, unused CSS (https://github.com/ampproject/amp.dev/issues/4650), unnecessary layers (https://github.com/ampproject/amp.dev/issues/4665), and using custom carousel instead of amp-carousel (https://github.com/ampproject/amp.dev/issues/4670)
  • Started build-in-chunks experiment to improve FID (https://github.com/ampproject/amphtml/pull/30301)
  • support "mjs" in local/test server routes https://github.com/ampproject/amphtml/pull/30378
  • refactor postHTML transformers to support bad or implied localhost URL's (like relative paths) (https://github.com/ampproject/amphtml/pull/30292)
  • fix bug in module build for amp-ad's. Transfer the parent document's amp-runtime CSS into the amp-ad friendly iframe (https://github.com/ampproject/amphtml/pull/30257)

Lessons Learned

  • web.dev suggests a maximum of 1,500 DOM nodes per page
All details on GitHub

What's Next

  • Continue to identify FID & LCP issues affecting amp.dev (and large AMP sites)
  • allow for module/nomodule pattern in JavaScript validator (following c++ changes)
All details on GitHub

Performance

Status Update Mon Sep 14 2020

What was accomplished

  • fixed AMP deployment of worker-dom artifacts (https://github.com/ampproject/amphtml/pull/30141)
  • prototyped moving compilation of worker-dom to downstream repos. (https://github.com/ampproject/worker-dom/pull/937)
  • added amp-debug and amp-production binaries to worker-dom. (https://github.com/ampproject/worker-dom/pull/929)
  • prototyped adding content-visibility css automatically for valid AMP components.
  • created repo to test amp.dev performance and discovered svg issue causing slowdown

Lessons Learned

All details on GitHub

What's Next

  • visual diffs for module build
  • improve compatibility of worker-dom Element.innerHTML setter.
All details on GitHub

Performance

Status Update Mon Aug 31 2020

What was accomplished

  • Removed fine and info level logs from ESM build for additional runtime size reduction
  • tested modulepreload vs preload vs modulepreload + preload in tachometer (synthetic testing showing that there is no gain to using modulepreload in chrome)

Lessons Learned

All details on GitHub

What's Next

  • Figure out how to make amp.dev pass CWV
  • Study advanced closure optimizations/ global variable renaming (potential size reduction: 5kb)
  • Study removing user assertions & errors from ESM build for additional size reduction
  • add AMP "browsing stories" to chromium system health
  • add in memory object table to fix message extraction race condition on disk
All details on GitHub

Performance

Status Update Mon Aug 17 2020

What was accomplished

  • exclude LTS from module/nomodule rollout
  • added AMP "loading stories" to chromium system health
  • finished design doc on AMP Analytics vendor config inlining
  • Wrapped up work on the AMP packager for the SxG build
  • AMP Animations polyfill to lazyloading saving ~18KB for compliant browsers

Lessons Learned

All details on GitHub

What's Next

  • add AMP "browsing stories" to chromium system health
  • work on adding module/nomodule support for validator
  • make amp.dev pass CWV
  • Begin working on validator changes for the SxG build
All details on GitHub

Performance

Status Update Mon Aug 03 2020

What was accomplished

  • Merged ads experiment id's for module/nomodule
  • runtime type meta is temporarily inserted for module/nomodule ads experiments detection (ex. <meta name="runtime-type" value="${value}">
  • @xiexr151e added gulp coverage-map task. allows to evaluate code not ran during initialization

Lessons Learned

All details on GitHub

What's Next

  • evaluate gulp unit testing to align with module build
  • fixes/update to gulp coverage-map
All details on GitHub

Performance

Status Update Mon Jul 20 2020

What was accomplished

  • Add a way for the module/nomodule rollout to be able to identify its control branch. This gives us a path to report to the ads team
  • Did some preliminary work on reducing v0.js in the upcoming SxG build by enabling the experiment on fixed layer code

Lessons Learned

All details on GitHub

What's Next

  • Add reporting for rollout of module/nomodule as an ads experiment on client side
All details on GitHub

Performance

Status Update Mon Jul 06 2020

What was accomplished

  • Merged CSS insert logic for tests https://github.com/ampproject/amphtml/pull/28972
  • OpenJS/Web.dev conferences
  • Wrapped up server side cache transformation for inline amp-analytics vendor config
  • Fixed Transpilation of WorkerDOM impacting Element.classList.
  • Moved AMP to Graal Native Closure Compiler, increasing concurrency and dropping developer build times by ~2.5x.

Lessons Learned

  • Travis, Github, and CircleCI all use low core count machines for Continuous Integration.
All details on GitHub

What's Next

  • turn on transformers for all integration tests. unblock failing critical tests by skipping and assigning to individual working groups.
  • Runtime changes for using inlined amp-analytics vendor config
  • Efficiency improvements for Closure Compilation
  • Kris goes on paternity leave.
All details on GitHub

Performance

Status Update Mon Jun 22 2020

What was accomplished

  • integration tests html fixtures are now passed through a no op pipeline and outputted to test-bin at the root of the project https://github.com/ampproject/amphtml/pull/28864
  • @xiexr151e joined the AMP Performance team as an intern!
  • Removed Single Pass Pipeline.
  • Simplify Logic for rtv in client code.
  • Conformance checks for allowlist, denylist, and legacy enforced usage.
  • Remove Share Tracking

Lessons Learned

  • Github Actions works well for generating native binaries using Graal.
All details on GitHub

What's Next

  • add css append postHTML transformer https://github.com/ampproject/amphtml/pull/28972
  • turn on the transforms for fixtures when integration tests are ran for esm mode
  • Enable Custom AMP Runner pre-built native Closure Compiler, ~3x speedup in compilation.
  • Inline amp-analytics vendor config with cache transform (instead of fetching from server)
All details on GitHub

Performance

Status Update Tue May 26 2020

What was accomplished

  • add debug flag to gulp integration. This will allow developers to add "debugger" statements as well as setting breakpoints as it auto opens devtools during the integration run (only works in non headless mode)
  • Cleaned up FixedLayer issues and ready to merge and start experiment

Lessons Learned

All details on GitHub

What's Next

  • add HTML transformer to integration tests (part of making integration tests pass for --esm)
  • clean up and make AmpCodingConvention more generalized as part of proposal for submission to Closure Compiler team
  • Inline amp-ad config on Google AMP cache
  • Prepare for Performance Team intern!
All details on GitHub

Performance

Status Update Mon May 11 2020

What was accomplished

  • Design doc and design review for validator changes needed for module/nomodule https://docs.google.com/document/d/1aD7MSHNlS8MsyBOjBx57OuLxVuIMPXVWDIrjt0ItzM8/edit#heading=h.hyyaxi8m42a
  • FixedLayer experiment merged (but turned off due to failing test on master)

Lessons Learned

  • Experiment tests do not run on PRs in CI
All details on GitHub

What's Next

  • Turn on Integration tests for module build (carry over, blocking module/nomodule launch)
  • Investigate removal of AmpCodingConvention.java
  • Investigate/resolve conflict with sidebar tests & FixedLayer experiment
  • Wrap up RAIL metrics in amp-analytics work
All details on GitHub

Performance

Status Update Mon Apr 27 2020

What was accomplished

  • Mitigated RTV experiment issues
  • Write Mini explainer identifying resources that conflict between module/nomodule written to dist directory

Lessons Learned

All details on GitHub

What's Next

  • Turn on Integration tests for module build (carry over)
  • Update validator to support module/nomodule in origin
  • Start FixedLayer experiment
  • Open PR for https://github.com/ampproject/amphtml/issues/27770
All details on GitHub

Performance

Status Update Mon Apr 13 2020

What was accomplished

  • Design Doc for additional log/assert removals
  • use new error reporting endpoint for module build errors
  • Updated Google AMP Cache to upgrade amp-viewer-integration load priority
  • Remove ie-media-fix polyfill from ESM build

Lessons Learned

  • Take care of your mental health
All details on GitHub

What's Next

  • postHTML transforms in integration tests (carry over)
  • Start work on AMP optimizer and validator for module build changes. (carry over)
  • Wrap up testing and merge FixedLayer PR
  • Move amp-ad and amp-analytics components lazy loading to cache transform
All details on GitHub

Performance

Status Update Mon Mar 30 2020

What was accomplished

  • Reduce size of v0.mjs to 60.07kb, as a result of landing several optimization changes.
  • Move from resorcery to @ampproject/remapping.
  • Introduce Post Closure Babel Compilation Pipeline for Multi-Pass.
  • Remove padding-top adjustment during boot on origin documents.
  • Fix accidental compilation of ES Classes in Module Build.
  • Prototype and land new local server for development, supporting Modules.
  • Test framework for Document transforms, intended for usage across different transformers (AMP Caches, Optimizer, AMP Wordpress).
  • Fix error reporting to identify module build.
  • Add module build explainer.

Lessons Learned

  • Buy a good chair for home.
All details on GitHub

What's Next

  • postHTML transforms in integration tests (in progress).
  • Start work on AMP optimizer and validator for module build changes.
  • Slight refactor of babel-plugin-transform-function-declarations.
  • Remove indirection for AMP Configuration, allowing plural AMP Caches and AMP Optimizer to support Module Builds.
  • Moving FixedLayer to extension
  • Send page load performance metrics to CSI
All details on GitHub

Performance

Status Update Mon Mar 16 2020

What was accomplished

  • add mjs files for experiments added on experiments-config.js
  • fixed single pass to work with Preact work
  • Tracked down common sources of low performance due to layout shift and high largest contentful paint and created tracking issues:
  • https://github.com/ampproject/amphtml/issues/27228
  • https://github.com/ampproject/amphtml/issues/27229
  • https://github.com/ampproject/amphtml/issues/27230

Lessons Learned

  • fast internet is expensive
All details on GitHub

What's Next

  • fix integration tests for module build (in progress)
  • build pipeline for local development automatically uses module / nomodule
All details on GitHub

Performance

Status Update Mon Mar 02 2020

What was accomplished

Kris

  • added post closure compiler transformation processing step
  • Remove doc css and base css from ESM build, which is a 10% improvement from the output size (62.61 kb <- 72.88 kb)
  • Move the ampproject from using brotli-size library to filesize (brotli compression on multiple cores, improves task on machines with higher cpu cores)

Erwin

  • Fixed render delaying extensions preloading for module builds
  • On duty (partially 1st week)
  • Ramped up module builds to 5% (seeing traffic)
  • Fixed single pass code to work with JSX (in review)

Kevin

  • Wrote proposal to move FixedLayer from runtime to viewer integration extension (save 36kb unminified, uncompressed)
  • Investigating AMP pages with poor RAIL metrics to identify areas of work for performance improvements

Lessons Learned

Kris

  • Travis VMs are lower powered than Github Actions ones.
All details on GitHub

Erwin

Kevin

What’s next

Kris

  • Assist Working Groups with Performance Analysis on real-world devices

Erwin

  • Ramp up module to 50%
  • Get all tests to work with module build
  • Add module/nomodule pattern to AMP packager

Kevin

  • Take FixedLayer proposal to design review
  • Writeup for using DOM Purify only in cache (remove from extensions on origin)
All details on GitHub

Performance

Status Update Mon Feb 03 2020

Accomplished

  • gulp dist --esm output .mjs instead of .js extension type (doesn't change build only extension type, https://github.com/ampproject/amphtml/pull/26340)
  • Dashboard (https://github.com/ampproject/amphtml/projects/99) for all projects that must be completed by the end of Q2 for all AMP documents to meet performance requirements.
  • Design Review for moving from 50 kb -> 75 kb of allowed CSS.
  • Prototyped removal of DOM Purify for AMP Documents outside of Viewer
  • Opened PR for shadow AMP bug fix where resource is not loading on document visibility change
All details on GitHub

Next

  • I2S CSS Limit Change
  • Continue researching removing DOM Purify where possible
  • TDD for replacing FixedLayer system with cache transform
  • Troubleshoot issues with shadow AMP integration test PR
All details on GitHub

Performance

Status Update Tue Jan 21 2020

What was accomplished

  • Internal changes for rollout of module/no-module
  • Investigate amp.dev to understand issues with performance when served canonically.
  • Refactoring rollup-plugin-closure-compiler to support source-transforms and chunk-transforms.

Lessons Learned

All details on GitHub

What's Next

  • module/no-module to 1%
  • Update amp-sw build system to rollup
  • Disable FixedLayer on canonically served documents.
All details on GitHub

Performance

Status Update Mon Jan 06 2020

What was accomplished

  • Implemented code splitting and bug fixes for rollup-plugin-closure-compiler.

Lessons Learned

  • Desktop Linux Machine is 3.4x faster! than laptop for closure compiler test suite.
All details on GitHub

What's Next

  • Backfill 2 weeks worth of release with mjs files
  • Server side changes to insert module/no-module script tags (carry over from last sprint)
  • Merge performance benchmark task
  • Tackling AMP PWA/Shadow bugs
All details on GitHub

Performance

Status Update Mon Dec 09 2019

What was accomplished

  • amp-img component: pass data attributes to inner image tag (PR)
  • Finalize high level roadmap plans for 2020

Lessons Learned

  • Back up your dev environment regularly...in case your computer turns into a paperweight 😅
All details on GitHub

What's Next

  • Server side changes to insert module/no-module script tags
  • Open PR for performance test gulp task to compare local branch vs. prod
  • Fixing PWA / shadow AMP bugs
All details on GitHub

Performance

Status Update Mon Nov 11 2019

What was accomplished

  • performance WG roadmap planning
  • planning on how to deploy module/no-module to production
  • crossorigin=anonymous experiment should be launched.

Lessons Learned

  • a P0 almost every day is no fun...
All details on GitHub

What's Next

  • add transformer pipeline to typecheck + object destructure transform
  • add transformer pipeline to dev build
  • migrating RTV performance comparison/visualization tool to GCP
All details on GitHub

Performance

Status Update Mon Oct 28 2019

What was accomplished

  • CEV1 Polyfill Shipped
  • Message extraction bugfix / infra.
  • Design Document for Merics Collection
  • Replacement for bundlesize (3x Faster, 7x less Dependencies)

Lessons Learned

  • Build files transferred between Travis runs are visible on logs but they list is collapsed, so look hard for them.
All details on GitHub

What's Next

  • Turn on message extraction.
  • Investigate removing info/fine calls (for production builds).
  • Performance changes for WorkerDOM Node.cloneNode(deep?).
All details on GitHub