{"version":"1.0","encoding":"UTF-8","feed":{"xmlns":"http://www.w3.org/2005/Atom","xmlns$openSearch":"http://a9.com/-/spec/opensearchrss/1.0/","xmlns$blogger":"http://schemas.google.com/blogger/2008","xmlns$georss":"http://www.georss.org/georss","xmlns$gd":"http://schemas.google.com/g/2005","xmlns$thr":"http://purl.org/syndication/thread/1.0","id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966"},"updated":{"$t":"2026-05-25T23:28:08.803-07:00"},"category":[{"term":"beta"},{"term":"security"},{"term":"chrome"},{"term":"chrome web store"},{"term":"the fast and the curious"},{"term":"extensions"},{"term":"performance"},{"term":"devtools"},{"term":"googlechrome"},{"term":"html5"},{"term":"chrome security"},{"term":"chromium"},{"term":"dart"},{"term":"native client"},{"term":"webgl"},{"term":"capabilities"},{"term":"v8"},{"term":"webrtc"},{"term":"New Features"},{"term":"chrome apps"},{"term":"javascript"},{"term":"webkit"},{"term":"webp"},{"term":"websockets"},{"term":"10th birthday"},{"term":"DNS-over-HTTPS"},{"term":"DoH"},{"term":"HTTPS"},{"term":"birthday"},{"term":"chrome privacy"},{"term":"chromeos"},{"term":"open web"},{"term":"privacy sandbox"},{"term":"speed"},{"term":"Data Saver"},{"term":"accessibility"},{"term":"chrome extensions"},{"term":"chromeframe"},{"term":"issue tracker"},{"term":"portals"},{"term":"releases"},{"term":"webaudio"},{"term":"Chrome on Android"},{"term":"Developer Program Policy"},{"term":"Lite Mode"},{"term":"Secure DNS"},{"term":"abusive notifications"},{"term":"ad blocking"},{"term":"android"},{"term":"blink"},{"term":"browser"},{"term":"cds18"},{"term":"chrome 83"},{"term":"chrome 84"},{"term":"core web vitals"},{"term":"design"},{"term":"feedback"},{"term":"fugu"},{"term":"lighthouse"},{"term":"linux"},{"term":"manifest v3"},{"term":"metrics"},{"term":"mobile"},{"term":"origin trials"},{"term":"payments"},{"term":"privacy"},{"term":"progressive web apps"},{"term":"safe browsing"},{"term":"spdy"},{"term":"ssl"},{"term":"strobe"},{"term":"twa"},{"term":"video"},{"term":"web assembly"},{"term":"$200K"},{"term":"Chrome Developer Center"},{"term":"Chrome Frame"},{"term":"Chrome OS"},{"term":"Chrome dev"},{"term":"Chrome extension"},{"term":"Chrome lite"},{"term":"Chrome on Mac"},{"term":"Data saver desktop extension"},{"term":"Fast badging"},{"term":"Follow"},{"term":"HTTP\/3"},{"term":"Lite pages"},{"term":"Project Strobe"},{"term":"QUIC"},{"term":"TCP"},{"term":"TLS"},{"term":"WebM"},{"term":"abusive ads"},{"term":"ad blockers"},{"term":"advanced capabilities"},{"term":"anti abuse"},{"term":"anti-deception"},{"term":"background periodic sync"},{"term":"badging"},{"term":"benchmarks"},{"term":"better ads standards"},{"term":"billing"},{"term":"browser interoperability"},{"term":"bundles"},{"term":"capable web"},{"term":"cds"},{"term":"cds2018"},{"term":"chrome 81"},{"term":"chrome ads"},{"term":"chrome dev summit"},{"term":"chrome dev summit 2018"},{"term":"chrome dev summit 2019"},{"term":"chrome developer"},{"term":"chrome developer summit"},{"term":"chrome devtools"},{"term":"chrome on ios"},{"term":"chrome releases"},{"term":"chromedevtools"},{"term":"chromeos.dev"},{"term":"cloud print"},{"term":"coalition"},{"term":"coalition for better ads"},{"term":"contact picker"},{"term":"content indexing"},{"term":"cookies"},{"term":"csrf"},{"term":"css"},{"term":"cumulative layout shift"},{"term":"custom tabs"},{"term":"dashboard"},{"term":"day 2"},{"term":"deceptive installation"},{"term":"declarative net request api"},{"term":"developer dashboard"},{"term":"developer website"},{"term":"digital event"},{"term":"discoverability"},{"term":"emoji"},{"term":"emscriptem"},{"term":"enterprise"},{"term":"faster web"},{"term":"features"},{"term":"field data"},{"term":"first input delay"},{"term":"fonts"},{"term":"form controls"},{"term":"frameworks"},{"term":"fund"},{"term":"funding"},{"term":"gdd"},{"term":"google earth"},{"term":"google event"},{"term":"google io 2019"},{"term":"google web developer"},{"term":"harmful ads"},{"term":"iframes"},{"term":"images"},{"term":"incognito"},{"term":"insecure forms"},{"term":"intent to explain"},{"term":"ios"},{"term":"ios Chrome"},{"term":"jank"},{"term":"lab data"},{"term":"labelling"},{"term":"largest contentful paint"},{"term":"launch"},{"term":"lazy-loading"},{"term":"loading interventions"},{"term":"loading optimizations"},{"term":"lock icon"},{"term":"long-tail"},{"term":"mac"},{"term":"microsoft edge"},{"term":"mixed forms"},{"term":"na"},{"term":"native file system"},{"term":"notifications"},{"term":"octane"},{"term":"pagespeed insights"},{"term":"pagespeedinsights"},{"term":"passwords"},{"term":"payment handler"},{"term":"payment request"},{"term":"performance tools"},{"term":"permission UI"},{"term":"permissions"},{"term":"play store"},{"term":"prefetching"},{"term":"private prefetch proxy"},{"term":"profile guided optimization"},{"term":"protection"},{"term":"pwa"},{"term":"quieter permissions"},{"term":"removals"},{"term":"rlz"},{"term":"root program"},{"term":"site isolation"},{"term":"slow loading"},{"term":"sms receiver"},{"term":"spam policy"},{"term":"spectre"},{"term":"store listing"},{"term":"subscription pages"},{"term":"suspicious site reporter extension"},{"term":"tools"},{"term":"tracing"},{"term":"transparency"},{"term":"trusted web activities"},{"term":"user agent string"},{"term":"user data policy"},{"term":"wasm"},{"term":"web"},{"term":"web apps"},{"term":"web developers"},{"term":"web intents"},{"term":"web packaging"},{"term":"web payments"},{"term":"web platform"},{"term":"web request api"},{"term":"web vitals"},{"term":"web.dev"},{"term":"web.dev live"},{"term":"webapi"},{"term":"webassembly"},{"term":"webmaster"},{"term":"webtiming"},{"term":"writable-files"},{"term":"yerba beuna center for the arts"}],"title":{"type":"text","$t":"Chromium Blog"},"subtitle":{"type":"html","$t":"News and developments from the open source browser project"},"link":[{"rel":"http://schemas.google.com/g/2005#feed","type":"application/atom+xml","href":"http:\/\/blog.chromium.org\/feeds\/posts\/default"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default?alt=json"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/"},{"rel":"hub","href":"http://pubsubhubbub.appspot.com/"},{"rel":"next","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default?alt=json\u0026start-index=26\u0026max-results=25"}],"author":[{"name":{"$t":"Unknown"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"16","height":"16","src":"https:\/\/img1.blogblog.com\/img\/b16-rounded.gif"}}],"generator":{"version":"7.00","uri":"http://www.blogger.com","$t":"Blogger"},"openSearch$totalResults":{"$t":"646"},"openSearch$startIndex":{"$t":"1"},"openSearch$itemsPerPage":{"$t":"25"},"entry":[{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-2130288086571329610"},"published":{"$t":"2026-03-31T11:25:00.000-07:00"},"updated":{"$t":"2026-03-31T11:26:49.119-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"JetStream 3: A modern benchmark for high-performance, compute-intensive Web applications"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj7mETepavttUoY0pDjkUG5z7WnmZPQRhUlQkPGWzY5afsHga0ExOpY1FIELBAIq3Ssfv7PJFdtvFIfmj4azUAEpalCw3vROcJyGfoJR-FZo_eRMAwKVYgUuFZNb5ixovknfmtUA7t860UmjYGctEumZvbcgGggl6MRDPqSRzenKHxH-px617F2H7Au53PL\/s1600\/Screenshot%202026-03-31%20at%201.26.23%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"330\" data-original-width=\"794\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj7mETepavttUoY0pDjkUG5z7WnmZPQRhUlQkPGWzY5afsHga0ExOpY1FIELBAIq3Ssfv7PJFdtvFIfmj4azUAEpalCw3vROcJyGfoJR-FZo_eRMAwKVYgUuFZNb5ixovknfmtUA7t860UmjYGctEumZvbcgGggl6MRDPqSRzenKHxH-px617F2H7Au53PL\/s1600\/Screenshot%202026-03-31%20at%201.26.23%E2%80%AFPM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp\u003E\nWe’re incredibly excited to announce the release of JetStream 3, built in close collaboration with Apple, Mozilla, and other partners in the web ecosystem!\n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEheAHzDj95eAsg7G6hUGoXG1GX6HMnDUKXUmEMtoRy79QenUNyjOWKLaU5JxR72MkLs8A7IStrhBIt3r938XLUAHUY6A8vOo0Txxy6JevLwl8ifF5l-ME0_PqFSCFrTWeSuePS4z0zCHtPc3VMRltID7duvbF45AHOqRovrKXLwnd6XQNtgto894ZlnZ7sR\/s1600\/Screenshot%202026-03-31%20at%2010.30.35%E2%80%AFAM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"570\" data-original-width=\"1412\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEheAHzDj95eAsg7G6hUGoXG1GX6HMnDUKXUmEMtoRy79QenUNyjOWKLaU5JxR72MkLs8A7IStrhBIt3r938XLUAHUY6A8vOo0Txxy6JevLwl8ifF5l-ME0_PqFSCFrTWeSuePS4z0zCHtPc3VMRltID7duvbF45AHOqRovrKXLwnd6XQNtgto894ZlnZ7sR\/s1600\/Screenshot%202026-03-31%20at%2010.30.35%E2%80%AFAM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp\u003E\nWhile we’ve covered the high-level details of this release in our\u003Ca href=\"https:\/\/browserbench.org\/announcements\/jetstream3\/\"\u003E shared announcement blog post\u003C\/a\u003E, we wanted to take a moment here to dive a little deeper. In this post, we’ll pull back the curtain on the benchmark itself, explore the methodology behind our choices, and share the motivations driving these major updates.\n\u003C\/p\u003E\n\u003Chr\u003E\n\u003Ch3\u003E\u003Cstrong\u003EWhy Do We Benchmark, Anyway?\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nBefore we get into the \"what,\" it helps to talk about the \"why.\" Why do browser engineers care so much about benchmarks?\n\u003C\/p\u003E\n\u003Cp\u003E\nAt its core, benchmarking serves as a critical safety net for catching performance regressions before they ever reach users. But beyond that, benchmarks act as a powerful motivation function—a sort of \"gamification\" for browser engineers. Having a clear target helps us prioritize our efforts and decide exactly which optimizations deserve our focus. It also drives healthy competitiveness between different browser engines, which ultimately lifts the entire web ecosystem.\n\u003C\/p\u003E\n\u003Cp\u003E\nOf course, the ultimate goal isn't just to make a number on a chart go up; it's to meaningfully improve user experience and real-world performance.\n\u003C\/p\u003E\n\u003Ch3\u003E\u003Cstrong\u003EDriven by Open Governance\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nJust like Speedometer 3, JetStream 3 is the result of a massive \u003Ca href=\"https:\/\/github.com\/WebKit\/Jetstream\"\u003Ecollaborative effort\u003C\/a\u003E across all major browser engines, including Apple, Mozilla, and Google.\n\u003C\/p\u003E\n\u003Cp\u003E\nWe adopted a strict consensus model for this release. This means we only added new workloads when everyone agreed they were valuable and representative. This open governance model has led to an incredibly productive collaboration with buy-in from multiple parties, ensuring the benchmark serves the best interests of the overall Web ecosystem.\n\u003C\/p\u003E\n\u003Ch3\u003E\u003Cstrong\u003ERipe for an Update\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nThe last major release, JetStream 2, came out in 2019. In the technology space—and especially on the Web—six years is an eternity.\n\u003C\/p\u003E\n\u003Cp\u003E\nThere's a well-known concept in economics called Goodhart's Law, which states that when a measure becomes a target, it ceases to be a good measure. Over time, engines naturally optimize for the specific patterns of a benchmark, and the metrics slowly lose their correlation with real-world performance. Speedometer recently received a massive update to account for this, and it only makes sense that JetStream is next in line.\n\u003C\/p\u003E\n\u003Ch3\u003E\u003Cstrong\u003EJetStream vs. Other Benchmarks\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nYou might be wondering: with the recent release of\u003Ca href=\"https:\/\/blog.chromium.org\/2024\/03\/speedometer-3-building-benchmark-that.html\"\u003E Speedometer 3\u003C\/a\u003E, why do we need another benchmark?\n\u003C\/p\u003E\n\u003Cp\u003E\nWhile Speedometer is fantastic for measuring UI rendering and DOM manipulation, JetStream has a different focus: the computationally intensive parts of Web applications. We're talking about use cases like browser-based games, physics simulations, framework cores, cryptography, and complex algorithms.\n\u003C\/p\u003E\n\u003Cp\u003E\nThere are also practical engineering considerations. JetStream is designed so that it can run in engine shells—like \u003Ccode\u003Ed8\u003C\/code\u003E, the standalone shell for V8. For engine developers, this is a massive advantage. Building a shell is significantly quicker than compiling a full browser like Chrome, allowing engineers to iterate faster. Because \u003Ccode\u003Ed8\u003C\/code\u003E is single-process, it also produces far less background noise, leading to more stable testing. This shell-compatibility also makes JetStream highly valuable for hardware and device vendors running simulators. It is a trade-off—a shell is slightly further removed from a full, real-world browser environment—but the engineering velocity it unlocks is well worth it.\n\u003C\/p\u003E\n\u003Ch3\u003E\u003Cstrong\u003EHow We Select Workloads\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nBuilding a benchmark requires a delicate balance between microbenchmarks and real applications.\n\u003C\/p\u003E\n\u003Cp\u003E\nMicrobenchmarks are great engineering tools; they have a high signal-to-noise ratio and make it easy to see the effects of one specific optimization. While they make sense for early improvements of new features, they also often encourage overfitting in the long run. Engines might optimize heavily for a tiny loop that looks great on the benchmark but does absolutely nothing to help real users.\n\u003C\/p\u003E\n\u003Cp\u003E\nBecause of this, a primary criterion for inclusion in JetStream 3 is that a workload should represent a real, end-to-end use case (or at least a highly abstracted form of one).\n\u003C\/p\u003E\n\u003Cp\u003E\nWe also heavily prioritized diversity. We don’t want workloads that all exercise the exact same hot loop. We want coverage across different frameworks, varied libraries, diverse source languages, and distinct toolchains.\n\u003C\/p\u003E\n\u003Cp\u003E\nFinally, we had to lay down some practical ground rules:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003E\u003Cstrong\u003ETime:\u003C\/strong\u003E The full benchmark suite needs to complete in a few minutes.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003EMemory:\u003C\/strong\u003E It shouldn't consume so much RAM that it crashes low-end devices.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003ENetwork:\u003C\/strong\u003E It shouldn't require massive payload transfers.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003EConsistency:\u003C\/strong\u003E Results should be deterministic and repeatable from one run to the next.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Chr\u003E\n\u003Ch3\u003E\u003Cstrong\u003ERethinking WebAssembly\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nOne of the most significant shifts in JetStream 3 is an increased focus and major update with regards to WebAssembly (Wasm).\n\u003C\/p\u003E\n\u003Cp\u003E\nWhen JetStream 2 was created, Wasm was still in its infancy. Fast forward to today, and Wasm is significantly more widespread.\n\u003C\/p\u003E\n\u003Cp\u003E\nBecause the language has evolved so rapidly, JetStream 2 became outdated quickly. It only tested the Wasm MVP (Minimum Viable Product). Today, the Wasm spec includes powerful features like \u003Ca href=\"https:\/\/en.wikipedia.org\/wiki\/Single_instruction,_multiple_data\"\u003ESIMD\u003C\/a\u003E (single instruction, multiple data), \u003Ca href=\"https:\/\/developer.chrome.com\/blog\/wasmgc\"\u003EWasmGC\u003C\/a\u003E, and Exception Handling—none of which were being properly benchmarked.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe ecosystem of tools has also completely transformed. The old workloads relied almost entirely on ancient versions of Emscripten compiling C\/C++, often utilizing the deprecated \u003Ccode\u003Easm.js\u003C\/code\u003E backend via \u003Ccode\u003Easm2wasm\u003C\/code\u003E. Furthermore, some of the old microbenchmarks mis-incentivized the wrong optimizations. For example, the old \u003Ccode\u003EHashSet-wasm\u003C\/code\u003E workload rewarded aggressive inlining that actually \u003Cem\u003Ehurt\u003C\/em\u003E performance in real-world user scenarios.\n\u003C\/p\u003E\n\u003Ch3\u003E\u003Cstrong\u003EThe New WebAssembly Workloads\u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nTo fix this, we sought out entirely new Wasm workloads, introducing 12 in total.\n\u003C\/p\u003E\n\u003Cp\u003E\nWe expanded our toolchain coverage from just C++ to include five new toolchains: J2CL, Dart2wasm, Kotlin\/Wasm, Rust, and .NET. This means we are now actively benchmarking Wasm generated from Java, Dart, Kotlin, Rust, and C#!\n\u003C\/p\u003E\n\u003Cp\u003E\nThese workloads represent actual end-to-end tasks, including:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Eargon2:\u003C\/strong\u003E A cryptographic password hashing function.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003ETransformers.js:\u003C\/strong\u003E Client-side machine learning heavily utilizing SIMD.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003ECross-platform UI:\u003C\/strong\u003E Dart and Kotlin workloads utilizing WasmGC.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003ESQLite3:\u003C\/strong\u003E The ubiquitous database, replacing old WebSQL patterns.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003E.NET:\u003C\/strong\u003E As an example of full interpreters and language runtimes built on top of Wasm.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\nThese aren't tiny, kilobyte-sized modules anymore. These are multi-megabyte applications that produce diverse, complex flamegraphs, pushing engines to their limits. Reflecting its heightened importance on the modern web, Wasm now makes up 15-20% of the overall benchmark suite, up from just 7% in JetStream 2. Beyond new workloads, JetStream 3 also overhauls scoring to ensure that runtime performance—not just instantiation—is accurately reflected in the total score.\n\u003C\/p\u003E\n\u003Ch3\u003E\u003Cstrong\u003EThe New and Updated JavaScript Workloads \u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nWe have many new larger JavaScript workloads that better represent how JS is used in the wild. Additionally to just measuring the pure execution speed we have \"startup\" workloads that include parsing and frameworks setup code – more closely matching what happens on initial page load.\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Ebabylonjs:\u003C\/strong\u003E Startup and execution of the JavaScript core of the \u003Ca href=\"Babylon.js\"\u003EBabylon.js\u003C\/a\u003E 3D engine.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Ebigint-noble-ed25519:\u003C\/strong\u003E \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/BigInt\"\u003EBigInt\u003C\/a\u003E stress-test that calculates an elliptic curve.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Edoxbee:\u003C\/strong\u003E Async code patterns using \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Promise\"\u003Epromises\u003C\/a\u003E and \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Statements\/async_function\"\u003Easync functions\u003C\/a\u003E.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Ejs-tokens \u003C\/strong\u003E\u003Ca href=\"https:\/\/github.com\/lydell\/js-tokens\"\u003Ejs-tokenizer\u003C\/a\u003E performance over JavaScript and JSX sources.\u003C\/li\u003E\n\n\u003Cli\u003Ej\u003Cstrong\u003Esdom-d3-startup:\u003C\/strong\u003E \u003Ca href=\"https:\/\/d3js.org\/\"\u003ED3\u003C\/a\u003E running in a \u003Ca href=\"https:\/\/github.com\/jsdom\/jsdom\"\u003EJavaScript-only DOM\u003C\/a\u003E implementation frequently used in unittests.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Elazy-collections:\u003C\/strong\u003E JavaScript \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Guide\/Iterators_and_generators#generator_functions\"\u003Egenerators\u003C\/a\u003E stress-test.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Emobx-startup:\u003C\/strong\u003E Startup performance of the \u003Ca href=\"https:\/\/mobx.js.org\/\"\u003EMobX\u003C\/a\u003E state management library.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Eprismjs:\u003C\/strong\u003E Startup performance of a \u003Ca href=\"https:\/\/prismjs.com\/\"\u003Esyntax highlighting library\u003C\/a\u003E on various source files.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Eproxies\u003C\/strong\u003E: Two new workloads that stress tests \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Proxy\"\u003Eproxy\u003C\/a\u003E functionality using different libraries.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Eraytrace classes: \u003C\/strong\u003EStress testing private and public fields with ES6 \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Classes\"\u003Eclasses\u003C\/a\u003E.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Esync-fs: \u003C\/strong\u003EA mock file system, testing DataView, Promises, and synchronous generators \/ iterators.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Ethreejs: \u003C\/strong\u003EA 3D particle system implemented with \u003Ca href=\"Three.js\"\u003EThree.js\u003C\/a\u003E.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Etypescript-lib:\u003C\/strong\u003E \u003Ca href=\"https:\/\/www.typescriptlang.org\/\"\u003ETypescript\u003C\/a\u003E v5.9 compilation speed.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Evalidatorjs:\u003C\/strong\u003E String validation and sanitization with \u003Ca href=\"https:\/\/github.com\/validatorjs\/validator.js\"\u003Evalidator.js\u003C\/a\u003E.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003Eweb-ssr\u003C\/strong\u003E: Server-side rendering (SSR) using \u003Ca href=\"https:\/\/react.dev\/\"\u003EReact\u003C\/a\u003E.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3\u003E\u003Cstrong\u003EUpdated JavaScript Workloads \u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cul\u003E\n\n\u003Cli\u003E\u003Cstrong\u003EWTB\u003C\/strong\u003E: Updated version of the \u003Ca href=\"https:\/\/v8.github.io\/web-tooling-benchmark\/\"\u003Eweb-tooling benchmark\u003C\/a\u003E measuring performance of various developer tools.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003ESunspider\u003C\/strong\u003E: All separate workloads have been combined into a single item to reduce its weight. \u003C\/li\u003E\n\n\u003Cli\u003EVarious older workloads were fixed to fix benchmark bugs and counter-act non real-world improvements.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Ch3\u003E\u003Cstrong\u003EConclusion \u003C\/strong\u003E\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nWith JetStream 3, the browser benchmarking space has made another big step forward and brought a new tool for browsers to improve performance for their valued users. Alongside Speedometer and MotionMark, these benchmarks give a clear view not only to browser vendors but also to users about various engine’s performance. \n\u003C\/p\u003E\n\u003Cp\u003E\nIf you’d like to contribute to the benchmark with your own workloads or have suggestions for how we can make it better, feel free to \u003Ca href=\"https:\/\/github.com\/WebKit\/JetStream\"\u003Ejoin the repository on GitHub\u003C\/a\u003E. We’re continually iterating on these benchmarks and will have more updates on each in the future as well. \n\u003C\/p\u003E\n\n\u003Cspan class='post-author'\u003EPosted by Daniel Lehmann, Thomas Nattestad and Camillo Bruni, Chrome team \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2130288086571329610"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2130288086571329610"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2026\/03\/jetstream-3-a-modern-benchmark.html","title":"JetStream 3: A modern benchmark for high-performance, compute-intensive Web applications"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj7mETepavttUoY0pDjkUG5z7WnmZPQRhUlQkPGWzY5afsHga0ExOpY1FIELBAIq3Ssfv7PJFdtvFIfmj4azUAEpalCw3vROcJyGfoJR-FZo_eRMAwKVYgUuFZNb5ixovknfmtUA7t860UmjYGctEumZvbcgGggl6MRDPqSRzenKHxH-px617F2H7Au53PL\/s72-c\/Screenshot%202026-03-31%20at%201.26.23%E2%80%AFPM.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-3789186118438448142"},"published":{"$t":"2026-03-25T10:01:00.000-07:00"},"updated":{"$t":"2026-03-25T10:01:09.622-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"Android Sets New Record for Mobile Web Performance"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg1ID1ntGdw8mqTRlNGoEgDtJ9v6XC82v4G-WYeBFCIR7Tbq3A-UVpP9nxFryuS8mZsIkEL2HSurSzyRNbk1MFuUWK6CpbvZog1m5yiWVbaffWrHP9o4OrQelfTVNPvwcERw0kSbL7K7JgSWazLwcFfosxwmM3_V5l1cWbOUE1_mKIdr-HnzSr2VbahAy72\/s1600\/Screenshot%202026-03-24%20at%2010.58.02%E2%80%AFAM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"390\" data-original-width=\"836\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg1ID1ntGdw8mqTRlNGoEgDtJ9v6XC82v4G-WYeBFCIR7Tbq3A-UVpP9nxFryuS8mZsIkEL2HSurSzyRNbk1MFuUWK6CpbvZog1m5yiWVbaffWrHP9o4OrQelfTVNPvwcERw0kSbL7K7JgSWazLwcFfosxwmM3_V5l1cWbOUE1_mKIdr-HnzSr2VbahAy72\/s1600\/Screenshot%202026-03-24%20at%2010.58.02%E2%80%AFAM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp\u003E\nA core part of the Android experience is the web. Whether you are browsing in Chrome or using one of the \u0026gt;90% of Android apps that utilize WebView, the speed of the web defines the speed of your phone. Today, we are proud to celebrate a major milestone: \u003Cstrong\u003EAndroid is now the fastest mobile platform for web browsing.\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nThrough deep vertical integration across hardware, the Android OS, and the Chrome engine, the latest flagship Android devices are setting new performance records, outperforming all other mobile competitors in the key web performance benchmarks Speedometer and LoadLine and providing a level of responsiveness previously unseen on mobile.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjoFmTNXcCKkGA3F2RDhRsjKH0dSVPB0tto857cyOzyOi6H8Cn5X2O2UH_8RJ4K8ejkfOroe4nLv66u6H8nQBT0CNEC9Ly58lBsv7umA0PLkRhCy9aufhXAssbOPsmoWEMcvKzydxY7XoIB17-DOAXjyHK53-X9d0THQqSXW1uDsBn-nw1syUivYeyIIYLv\/s1600\/score-chart.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"624\" data-original-width=\"1704\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjoFmTNXcCKkGA3F2RDhRsjKH0dSVPB0tto857cyOzyOi6H8Cn5X2O2UH_8RJ4K8ejkfOroe4nLv66u6H8nQBT0CNEC9Ly58lBsv7umA0PLkRhCy9aufhXAssbOPsmoWEMcvKzydxY7XoIB17-DOAXjyHK53-X9d0THQqSXW1uDsBn-nw1syUivYeyIIYLv\/s1600\/score-chart.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp style=\"text-align: center;\"\u003E\nAndroid flagship phones reach new high-scores in\u003Cbr \/\u003Eweb performance benchmarks (Chrome 146, March 2026)\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003EWhy web performance matters\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nWeb performance isn't just about high scores—it’s about how your device feels every day. On Android, web content and its performance is central to the user experience.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhether searching for information, catching up on the latest news, or online-shopping, Android users spend a significant portion of their daily screen time interacting with web content. Chrome is one of the most popular Android apps in the US and worldwide. Furthermore, this usage increases sharply on tablets and foldables, where productivity use cases are key.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhile the web is clearly important, a great web experience necessitates a fast browser and device: Modern websites are highly complex, with more than 200 million active sites serving everything from blog posts with dynamic ad auctions to desktop-class productivity tools. This complexity makes for a demanding workload that can stress even powerful devices.\n\u003C\/p\u003E\n\u003Cp\u003E\nTo ensure a high-quality user experience, we focus on two critical pillars when evaluating web performance: \u003Cstrong\u003Eresponsiveness\u003C\/strong\u003E and \u003Cstrong\u003Epage load speed\u003C\/strong\u003E.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003ESpeedometer: Measuring web responsiveness\u003C\/h3\u003E\n\n\n\u003Cp\u003E\n\u003Cstrong\u003E\u003Ca href=\"https:\/\/browserbench.org\/Speedometer3.1\/\"\u003ESpeedometer\u003C\/a\u003E\u003C\/strong\u003E is the collaborative industry standard used by all major browser engine developers to measure web app responsiveness. It simulates real-world user actions—like adding items to a to-do list—to measure interaction latency.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhile synthetic, Speedometer's workloads offer high consistency and are built using relevant, state-of-the-art web frameworks, such as React, Angular or jQuery, and include to-do apps, text editors, chart rendering, and a mock news portal.\n\u003C\/p\u003E\n\u003Cp\u003E\nSpeedometer scores have a strong correlation (-0.8) with 99th-percentile interaction latency (INP) in the field. Thus, a higher Speedometer score directly translates to a more fluid, snappy feeling when you tap, scroll, or type on a website.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003ELoadLine: Measuring the complete page load\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nWhile interaction responsiveness is vital, it’s only half of the story. Users also care about how fast a page appears after they click a link. To measure this, Chrome and Android teams worked with Android SoC and OEM partners to develop \u003Cstrong\u003E\u003Ca href=\"https:\/\/chromium.googlesource.com\/crossbench\/+\/refs\/heads\/main\/config\/benchmark\/loadline2\/\"\u003ELoadLine\u003C\/a\u003E\u003C\/strong\u003E, an emerging end-to-end benchmark that simulates the complete process of loading a website.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhere traditional benchmarks often focus on synthetic tasks, LoadLine uses recorded, stable versions of select \u003Cstrong\u003Ereal-world websites\u003C\/strong\u003E. This includes simpler and more complex sites with varied characteristics, reflecting the most important types of mobile web content, such as shopping, search, and news portals.\n\u003C\/p\u003E\n\u003Cp\u003E\nLoadLine has proven that Android's page load performance is world-class: Top tier Android phones score up to 47% higher than non-Android competitors. And this matters: LoadLine scores also correlate well (-0.8) with median and high-percentile page load latency in the field.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjpyiDHC_oGrj_rfEPNRG0oveFID-onA60JeyQ3oHGCgpnb-bphc3UAg0eCsOt0kQZlI863IdYlNYy2PsIcfshBgsRp2srGZQ5aCvWjrSFhO9j02ReVz7uTaouRLbb_dnHBWO-Pt39hSn7uq_gD4oSbxVV99ql-yn27G5mAWn1L4FmcnHy4204FCQLfOb3b\/s1600\/speedometer_loadline_optimized.gif\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"735\" data-original-width=\"1333\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjpyiDHC_oGrj_rfEPNRG0oveFID-onA60JeyQ3oHGCgpnb-bphc3UAg0eCsOt0kQZlI863IdYlNYy2PsIcfshBgsRp2srGZQ5aCvWjrSFhO9j02ReVz7uTaouRLbb_dnHBWO-Pt39hSn7uq_gD4oSbxVV99ql-yn27G5mAWn1L4FmcnHy4204FCQLfOb3b\/s1600\/speedometer_loadline_optimized.gif\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp style=\"text-align: center;\"\u003E\nSpeedometer (left) and examples of LoadLine workloads (right)\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003ESuccess through vertical optimization\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nAndroid’s current lead is the result of a concerted effort to tune the entire \"stack\"—from silicon to software.\n\u003C\/p\u003E\n\u003Cp\u003E\nWe encouraged our Android partners to evaluate and tune their devices against Speedometer and LoadLine. While advances in SoCs' core performance build the foundation for fast web experiences, tuning of the OS and browser software stack are critical to utilize the hardware effectively. Collaborating with select SoC and OEM partners, we utilized Speedometer and LoadLine to optimize Chrome and kernel scheduler policies.\n\u003C\/p\u003E\n\u003Cp\u003E\nAs a result of these improvements, some Android flagship phones improved their Speedometer and LoadLine scores by 20-60% year-over-year, compared to their respective predecessor models. And these improvements translate to faster real-world web performance: Today, page loads are 4-6% faster and high-percentile interactions 6-9% faster on these newer models, for real users in the field.\n\u003C\/p\u003E\n\u003Cp\u003E\nWe invite all developers and hardware partners to join us in using these benchmarks to push the boundaries of what’s possible on the mobile web.\n\u003C\/p\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by Eric Seckler, software engineer, Chrome  \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/3789186118438448142"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/3789186118438448142"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2026\/03\/android-sets-new-record-for-mobile-web.html","title":"Android Sets New Record for Mobile Web Performance"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg1ID1ntGdw8mqTRlNGoEgDtJ9v6XC82v4G-WYeBFCIR7Tbq3A-UVpP9nxFryuS8mZsIkEL2HSurSzyRNbk1MFuUWK6CpbvZog1m5yiWVbaffWrHP9o4OrQelfTVNPvwcERw0kSbL7K7JgSWazLwcFfosxwmM3_V5l1cWbOUE1_mKIdr-HnzSr2VbahAy72\/s72-c\/Screenshot%202026-03-24%20at%2010.58.02%E2%80%AFAM.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-6210597145390132704"},"published":{"$t":"2026-03-12T13:01:00.000-07:00"},"updated":{"$t":"2026-03-12T15:04:18.898-07:00"},"title":{"type":"text","$t":"Bringing Chrome to ARM64 Linux Devices"},"content":{"type":"html","$t":"\u003Cp\u003E\nWe’re excited to announce that Google will launch Chrome for ARM64 Linux devices in Q2 2026, following the successful expansion of Chrome to Arm-powered macOS devices in 2020 and Arm-powered Windows devices in 2024.\n\u003C\/p\u003E\n\u003Cp\u003E\nLaunching Chrome for ARM64 Linux devices allows more users to enjoy the seamless integration of Google’s most helpful services into their browser. This move addresses the growing demand for a browsing experience that combines the benefits of the open-source Chromium project with the Google ecosystem of apps and features.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis release represents a significant undertaking to ensure that ARM64 Linux users receive the same secure, stable, and rich Chrome experience found on other platforms.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EGet the best of the Google ecosystem \u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nWith Chrome, you are able to leverage the full power of the Google ecosystem, providing a more cohesive and feature-rich environment designed for convenience and cross-device continuity. By signing into a Google Account, your bookmarks, browsing history, and open tabs follow you across devices. You can easily access the best extensions the Chrome Web Store has to offer, without needing to use specialized tools or alter developer settings. And you can effortlessly translate webpages with a single click. \n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EUse the browser that is secure by design \u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nChrome also offers the added benefit of Google’s strongest security protections. Enabling \u003Ca href=\"https:\/\/support.google.com\/chrome\/answer\/9890866?hl=en\u0026co=GENIE.Platform%3DAndroid\"\u003EEnhanced Protection in Safe Browsing\u003C\/a\u003E\u003Cstrong\u003E \u003C\/strong\u003Eoffers real-time protection against phishing and malware by leveraging AI alongside Google’s list of known threats. With the Google Pay integration you can easily and securely manage your payments, using Chrome autofill for an added level of convenience. And the Google Password Manager lets you securely store, generate, and sync complex passwords across all your devices, eliminating the need to memorize multiple logins. It goes beyond simple storage by actively monitoring your credentials for data breaches and providing \"Password Checkup\" alerts if any of your accounts are compromised.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EPartnering with the industry \u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nLast year, NVIDIA introduced the DGX Spark, an AI supercomputing device that packs its Grace Blackwell architecture into a compact, 1-liter form factor. Google is partnering with NVIDIA to make it easier for DGX Spark users to install Chrome.  Users with other Linux distributions can also install the ARM64 version of Chrome by visiting \u003Ca href=\"http:\/\/chrome.com\/download\"\u003Echrome.com\/download\u003C\/a\u003E.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis launch marks a major milestone in our commitment to the Linux community and the Arm ecosystem. We look forward to seeing how developers and power-users leverage Chrome on this next generation of high-performance devices.\n\u003C\/p\u003E\n\n\u003Cspan class='post-author'\u003EPosted by the Chrome team \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6210597145390132704"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6210597145390132704"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2026\/03\/bringing-chrome-to-arm64-linux-devices.html","title":"Bringing Chrome to ARM64 Linux Devices"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-1276438242879541012"},"published":{"$t":"2025-10-10T10:04:00.000-07:00"},"updated":{"$t":"2025-10-10T10:11:38.695-07:00"},"title":{"type":"text","$t":"Reducing notification overload for a quieter browsing experience in Chrome"},"content":{"type":"html","$t":"\u003Cp\u003E\nWe're constantly working to improve your browsing experience. To help you cut through the noise and reduce notification overload, we’re launching a new feature to automatically remove notification permission for sites you haven't interacted with recently. Today, Chrome’s Safety Check \u003Ca href=\"https:\/\/blog.google\/products\/chrome\/google-chrome-safety-update-september-2024\/\"\u003Ealready does this\u003C\/a\u003E for other permissions such as camera and location. The feature will be launched in Chrome on Android and desktop.\n\u003C\/p\u003E\n\u003Cp\u003E\nData indicates that users frequently receive a high volume of notifications, resulting in minimal engagement and high disruption. Less than 1% of all notifications receive any interaction from users.\n\u003C\/p\u003E\n\u003Cp\u003E\nBut notifications can be genuinely valuable and helpful. Therefore, this feature will only revoke permissions for sites when there is very low user engagement and a high volume of notifications being sent. This feature does not revoke notifications for \u003Ca href=\"https:\/\/support.google.com\/chrome\/answer\/9658361?co=GENIE.Platform%3DAndroid\u0026oco=1\"\u003Eany installed web apps\u003C\/a\u003E. \n\u003C\/p\u003E\n\u003Cp\u003E\nChrome will inform you when notification permissions are removed. If you prefer to keep getting notifications from a particular website, you can easily re-grant the permission at any time through Safety Check or alternatively by visiting the site and enabling notifications again. You can also choose to turn off the auto-revocation feature entirely.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhBESUSexTeb8BtWSMAcsKILZYGMYpYHqONZ0FWuU5g9OLFbdnHbP81gGI6LHizOJLS0eFr_V1S0AQdtiQeEJcFEQVK355w7HEqZCIleo7H2KKqAlreIO2BXvCDYsrgmxzzYSjIL35MWJtwYg5q0LhxsBvLZWXE4AT58Zqx0rQf-oMX-rYWPhW2Yb9fHxbT\/s1600\/Screenshot%202025-10-10%20at%2012.10.49%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"517\" data-original-width=\"709\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhBESUSexTeb8BtWSMAcsKILZYGMYpYHqONZ0FWuU5g9OLFbdnHbP81gGI6LHizOJLS0eFr_V1S0AQdtiQeEJcFEQVK355w7HEqZCIleo7H2KKqAlreIO2BXvCDYsrgmxzzYSjIL35MWJtwYg5q0LhxsBvLZWXE4AT58Zqx0rQf-oMX-rYWPhW2Yb9fHxbT\/s1600\/Screenshot%202025-10-10%20at%2012.10.49%E2%80%AFPM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp\u003E\nWe've already been testing this feature. Our test results show a significant reduction in notification overload with only a minimal change in total notification clicks. Our experiments also indicate that websites that send a lower volume of notifications are actually seeing an increase in clicks. \n\u003C\/p\u003E\n\u003Cp\u003E\nThis launch is part of our ongoing commitment to user safety, privacy, and control. We believe this change will lead to a cleaner, more focused browsing experience, and we’ll continue to invest in ways to help you manage your online interactions and reduce distractions, so you can make the most of your time online.\n\u003C\/p\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by Archit Agarwal, Product Manager, Chrome\u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/1276438242879541012"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/1276438242879541012"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2025\/10\/automatic-notification-permission.html","title":"Reducing notification overload for a quieter browsing experience in Chrome"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhBESUSexTeb8BtWSMAcsKILZYGMYpYHqONZ0FWuU5g9OLFbdnHbP81gGI6LHizOJLS0eFr_V1S0AQdtiQeEJcFEQVK355w7HEqZCIleo7H2KKqAlreIO2BXvCDYsrgmxzzYSjIL35MWJtwYg5q0LhxsBvLZWXE4AT58Zqx0rQf-oMX-rYWPhW2Yb9fHxbT\/s72-c\/Screenshot%202025-10-10%20at%2012.10.49%E2%80%AFPM.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-6328112074962053717"},"published":{"$t":"2025-07-08T10:46:00.000-07:00"},"updated":{"$t":"2025-11-03T09:18:44.373-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"Introducing Skia Graphite: Chrome's rasterization backend for the future"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi_oXM-_56tbxbRYQxIunAhz47yN-RJHgS4FSb4wnuyaBN5amMkmRSGXu9oWoQ9apIB-DOl1RRi69mwcOLlV2EaD8HBjBPFg0p1dud7HStcmzIRYa3wwq11BjsKOeC_pUykrZMSJvsl2RlCQktC0xw28TpBnEbqBJxev7D-ZFHVBt20bshdN6wLtogSN6MG\/s1600\/Fast%20Curious_image%20%281%29.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"166\" data-original-width=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi_oXM-_56tbxbRYQxIunAhz47yN-RJHgS4FSb4wnuyaBN5amMkmRSGXu9oWoQ9apIB-DOl1RRi69mwcOLlV2EaD8HBjBPFg0p1dud7HStcmzIRYa3wwq11BjsKOeC_pUykrZMSJvsl2RlCQktC0xw28TpBnEbqBJxev7D-ZFHVBt20bshdN6wLtogSN6MG\/s1600\/Fast%20Curious_image%20%281%29.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp\u003E\n\u003Cem\u003EToday's The Fast and the Curious post covers the launch of Skia's new rasterization backend, Graphite, in Chrome on Apple Silicon Macs. Graphite is instrumental in helping Chrome achieve exceptional scores on Motionmark 1.3 and is key to unlocking a ton of future improvements in Chrome Graphics.\u003C\/em\u003E\n\u003C\/p\u003E\n\u003Ch1\u003EA brief history of Skia in Chrome\u003C\/h1\u003E\n\n\n\u003Cp\u003E\nIn Chrome, Skia is used to render paint commands from Blink and the browser UI into pixels on your screen, a process called rasterization. Skia has powered Chrome Graphics \u003Ca href=\"https:\/\/www.google.com\/url?q=https:\/\/blog.chromium.org\/2008\/10\/graphics-in-google-chrome.html\u0026amp;sa=D\u0026amp;source=docs\u0026amp;ust=1744655288075052\u0026amp;usg=AOvVaw2iZg3ILJvcyGeG8RDYzVNv\"\u003Esince the very beginning\u003C\/a\u003E. Skia eventually ran into performance issues as the web evolved and became more complex, which led Chrome and Skia to invest in a GPU accelerated rasterization backend called Ganesh.  \n\u003C\/p\u003E\n\u003Cp\u003E\nOver the years, Ganesh matured into a solid highly performant rasterization backend and GPU rasterization launched on all platforms in Chrome on top of GL (via ANGLE on Windows D3D9\/11). However, Ganesh always had a GL-centric design with too many specialized code paths and the team was hitting a wall when trying to implement optimizations that took advantage of modern graphics APIs in a principled manner.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis set the stage for the team to rethink GPU rasterization from the ground up in the form of a new rasterization backend, Graphite. Graphite was developed from the start to be principled by having fewer and more comprehensible code paths. This forward looking design helps take advantage of modern graphics APIs like Metal, Vulkan and D3D12 and paradigms like compute based path rasterization, and is multithreaded by default.\n\u003C\/p\u003E\n\u003Ch1\u003EResults\u003C\/h1\u003E\n\u003Cp\u003E\nWith Graphite in Chrome, we increased our Motionmark 1.3 scores by almost 15% on a Macbook Pro M3. At the same time, we improved real world metrics like INP (interaction to next paint time), LCP (time to largest contentful paint),  graphics smoothness (percent dropped frames), GPU process malloc memory usage, and others. This all means substantially smoother interactions, less stutter when scrolling, and less time waiting for sites to show.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjK7OcoGT0p5zxAfiA30b8wcjhxDlovG2IUL3DNsazr0NBYBK-yoizvfdjng-6jOXE_T4hEGGGR6D3MsytJj6qkFkjS8Fjs8PjYHbHvCljY6fwmpMUIalNFg4QRp2fpFolLIQJmwar4IrhBtgbzuyhh7zRMbSv_rHSsDBycZ0G0SDn53owruvmmkgqTs9qr\/s1600\/Screenshot%202025-07-08%20at%2012.40.51%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"587\" data-original-width=\"677\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjK7OcoGT0p5zxAfiA30b8wcjhxDlovG2IUL3DNsazr0NBYBK-yoizvfdjng-6jOXE_T4hEGGGR6D3MsytJj6qkFkjS8Fjs8PjYHbHvCljY6fwmpMUIalNFg4QRp2fpFolLIQJmwar4IrhBtgbzuyhh7zRMbSv_rHSsDBycZ0G0SDn53owruvmmkgqTs9qr\/s1600\/Screenshot%202025-07-08%20at%2012.40.51%E2%80%AFPM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Ch1\u003EDifferences between Graphite and Ganesh\u003C\/h1\u003E\n\n\n\u003Ch3 style=\"text-align: left;\"\u003EModern graphics APIs\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nGanesh was originally implemented on OpenGL ES, which had minimal support for multi-threading or GPU capabilities like compute shaders. Since then, modern graphics APIs like Vulkan, Metal and D3D12 have evolved to take advantage of multithreading and expose new GPU capabilities. They allow applications to have much more control over when and how expensive work such as allocating GPU resources is performed and scheduled, while utilizing both the CPU and the GPU effectively.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhile we were able to adapt Ganesh to support modern graphics APIs, it had accumulated enough technical debt that it became hard to fully take advantage of the multi-threading and GPU compute capabilities of modern graphics APIs.\n\u003C\/p\u003E\n\u003Cp\u003E\nFor Graphite in Chrome, we chose to use Chrome's WebGPU implementation, \u003Ca href=\"https:\/\/dawn.googlesource.com\/dawn\"\u003EDawn\u003C\/a\u003E, as the abstraction layer for platform native graphics APIs like Metal, Vulkan and D3D. Dawn provides a baseline for capabilities common in modern graphics APIs and helps us reduce the long term maintenance burden by leveraging Dawn's mature well tested native backends instead of implementing them from scratch for Graphite. \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E2D depth(?!) testing\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nA core part of the GPU rendering pipeline is depth testing, which can reduce or eliminate overdraw by drawing opaque objects in front to back order, followed by translucent objects back to front. In graphics, \"overdraw\" refers to the unnecessary rendering of the same pixels multiple times, which can negatively impact performance and battery life, especially on mobile devices.\n\u003C\/p\u003E\n\u003Cp\u003E\nGanesh never utilized the depth testing capabilities of graphics cards, which was admittedly intended for rendering 3D content and not accelerating 2D graphics. Ganesh suffers from overdraw due to its reliance on adhering to strict painters order when drawing both opaque and translucent objects.\n\u003C\/p\u003E\n\u003Cp\u003E\nGraphite extends Skia’s GPU rendering to take advantage of the depth test by assigning each “draw” a \u003Cem\u003Ez \u003C\/em\u003Evalue defining its painter’s ordering index. While transparent effects and images must still be drawn from back to front, opaque objects in the foreground can now automatically eliminate overdraw. This means opaque draws can be re-ordered to minimize expensive GPU state changes while relying on the depth buffer to produce correct output.\n\u003C\/p\u003E\n\u003Cp\u003E\nDepth testing is also used to implement clipping in Graphite by treating clip shapes as depth only draws as opposed to maintaining a clip stack like in Ganesh. Besides reducing algorithmic complexity, a significant benefit to this approach is that the shader program required to render a “draw” does not also depend on the state of the clip stack.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhJvgOlBS_vrfP7D7vbi9seLOrlsKLhSWmuo6Lc6RiHIjvm23kjXT7zNM_iFS_ojrEowtoLhvSaCgDeoSWlwFWDH5vyqE23zhLCjPPrs6fLVTiGWw-os-ErUrz3VicU1r_Za-A4tRzyeW1BrVmqz8sgK7QLNMK27eB2u7lPeX1Kb9O4o-6y3bNzRZi9z3VZ\/s1600\/Screenshot%202025-07-08%20at%2012.42.02%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"238\" data-original-width=\"637\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhJvgOlBS_vrfP7D7vbi9seLOrlsKLhSWmuo6Lc6RiHIjvm23kjXT7zNM_iFS_ojrEowtoLhvSaCgDeoSWlwFWDH5vyqE23zhLCjPPrs6fLVTiGWw-os-ErUrz3VicU1r_Za-A4tRzyeW1BrVmqz8sgK7QLNMK27eB2u7lPeX1Kb9O4o-6y3bNzRZi9z3VZ\/s1600\/Screenshot%202025-07-08%20at%2012.42.02%E2%80%AFPM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp\u003E\nLeft: Frame from Motionmark Suits Right: Depth buffer for the same frame.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003EMultithreading\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nChromium is a complex multi-process application, with render processes issuing commands to a shared GPU process that is responsible for actually displaying everything in a webpage, tab, and even the browser UI. The GPU process main thread is the primary driver of all rendering work and is where all GPU commands are issued.\n\u003C\/p\u003E\n\u003Cp\u003E\nDue to the single threaded nature of Ganesh and OpenGL, only a limited set of work could be moved to other threads, making it easy to overload the main thread causing increased jank and latency ultimately hurting user experience.\n\u003C\/p\u003E\n\u003Cp\u003E\nIn contrast, Graphite's API is designed to take advantage of multithreading capabilities of modern graphics APIs. Graphite’s new core API is centered around independent \u003Cem\u003ERecorders\u003C\/em\u003E that can produce \u003Cem\u003ERecordings\u003C\/em\u003E on multiple threads, with minimal need to synchronize between them. Even though the \u003Cem\u003ERecordings\u003C\/em\u003E are submitted to the GPU on the main thread, more expensive work is moved to other threads when producing \u003Cem\u003ERecordings\u003C\/em\u003E, keeping the GPU main thread free.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003EPerformance cliffs and pipeline compilation\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nWhen Ganesh was initially implemented, the programmable capabilities of graphics cards were quite limited, and branching in particular was expensive. To work around this, Ganesh had many specialized shader pipelines to handle common cases. These specializations are hard to predict and depend on a large number of factors related to each individual draw, leading to an explosion of different pipelines for essentially the same page content. Since these pipelines must each be compiled, it doesn't work well for modern web content which might have effects and animations trigger new pipelines at any moment, causing noticeable jank.\n\u003C\/p\u003E\n\u003Cp\u003E\nGraphite’s design philosophy is instead to consolidate the number of rendering pipelines as much as possible while still preserving performance.  This reduces the number of pipelines that have to be compiled, and makes it possible for Chrome to ensure they are compiled at startup so they do not interrupt active browsing. Ganesh’s specialization approach also led to surprising performance cliffs. For example, while it could handle simple cases, real page content was often a complex mix. By consolidating pipelines, complex content can be rendered as effectively as simple content.\n\u003C\/p\u003E\n\u003Ch1\u003EFuture Plans\u003C\/h1\u003E\n\n\n\u003Ch3 style=\"text-align: left;\"\u003EMultithreaded Rasterization\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nCurrently, Graphite is integrated into Chromium using two Recorders: one handles web content tiles and Canvas2D on the main thread, while the other is for compositing.  In the future, this model will open up a number of exciting possibilities to further improve Chrome’s performance.  Instead of saturating the main GPU thread with the tasks from each renderer process, rasterization can be forked across multiple threads.\n\u003C\/p\u003E\n\u003Cp\u003E\nCurrent:\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj3Yp75STRKmlqx_4MJ5OTvQ5Tz1z7v2xRopsCekbpxOuUrxWptOz5ihk6VIJNTtj4uwKzV2CGOC_s_hJXKRKYkyOd1mKeol4SO20GdRuRQLS7KlkWpy5TuslgfJJz8fuoXUMvDwHmtqgFVGVsb08Yf5th5LX84dwGBRHZqSAOdcAxZYOPKu_tVWJBFkBIL\/s1600\/Screenshot%202025-07-08%20at%2012.43.01%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"833\" data-original-width=\"768\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEj3Yp75STRKmlqx_4MJ5OTvQ5Tz1z7v2xRopsCekbpxOuUrxWptOz5ihk6VIJNTtj4uwKzV2CGOC_s_hJXKRKYkyOd1mKeol4SO20GdRuRQLS7KlkWpy5TuslgfJJz8fuoXUMvDwHmtqgFVGVsb08Yf5th5LX84dwGBRHZqSAOdcAxZYOPKu_tVWJBFkBIL\/s1600\/Screenshot%202025-07-08%20at%2012.43.01%E2%80%AFPM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp\u003E\nFuture:\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjfZABxcWDhyphenhyphen8ziigDEkaW97viWcKe-TVFCf9gISovY__siuJKB09cUmyV4TPqB78Y1LzOyU5zHQgeH_eGEZ9aepscWyFWVhTtrpu6QwHzWGBmG70iPibu4e4NX47XHBOXV0Ufa6eyEvV2-i9gD-KlrOdfHMrmfpp7ueXPvsRsmgLgCBQvTxGEMvRmb4M9i\/s1600\/Screenshot%202025-07-08%20at%2012.44.09%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"562\" data-original-width=\"786\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjfZABxcWDhyphenhyphen8ziigDEkaW97viWcKe-TVFCf9gISovY__siuJKB09cUmyV4TPqB78Y1LzOyU5zHQgeH_eGEZ9aepscWyFWVhTtrpu6QwHzWGBmG70iPibu4e4NX47XHBOXV0Ufa6eyEvV2-i9gD-KlrOdfHMrmfpp7ueXPvsRsmgLgCBQvTxGEMvRmb4M9i\/s1600\/Screenshot%202025-07-08%20at%2012.44.09%E2%80%AFPM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Ch3 style=\"text-align: left;\"\u003EReducing GPU memory for simple content\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nGraphite recordings can also be re-issued to the GPU with certain dynamic changes such as translation. This can be used to accelerate scrolling while eliminating the unnecessary work to re-issue rendering commands.  This lets us automatically reduce the amount of GPU memory required to cache web content as tiles. If the content is simple enough, the performance difference between drawing a cached image and drawing its content can be worth skipping allocating a tile for it and just re-rendering it each frame.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003EGPU Compute Path Rasterization\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nIn the landscape of 2D graphics rendering, \u003Ca href=\"https:\/\/raphlinus.github.io\/rust\/graphics\/gpu\/2020\/06\/13\/fast-2d-rendering.html\"\u003EGPU compute-based path rasterization\u003C\/a\u003E is very much en vogue with recent implementations like \u003Ca href=\"https:\/\/github.com\/pcwalton\/pathfinder\"\u003EPathfinder\u003C\/a\u003E and \u003Ca href=\"https:\/\/github.com\/linebender\/vello\"\u003Evello\u003C\/a\u003E. We would like to implement these ideas in Skia, possibly using a \u003Ca href=\"https:\/\/docs.google.com\/document\/d\/1gEqf7ehTzd89Djf_VpkL0B_Fb15e0w5fuv_UzyacAPU\/preview\"\u003Ehybrid approach\u003C\/a\u003E. Currently, Graphite relies on MSAA where it can, but in many cases we can't due to poor performance on older integrated GPUs or high memory overhead on non-tiling GPUs, and we have to fallback to CPU path rasterization using an atlas for caching. GPU compute based path rasterization would allow us to improve over both the visual quality of MSAA which is often limited to 4 samples per pixel and over the performance of CPU rasterization.\n\u003C\/p\u003E\n\u003Cp\u003E\nThese are future directions the Chrome Graphics team plans to pursue, and we are excited to see how far we can push the needle.\n\u003C\/p\u003E\n\u003Cp\u003E\n  \n\u003C\/p\u003E\n\u003Cspan class=\"post-author\"\u003EPosted By Michael Ludwig \u0026amp; Sunny Sachanandani\n \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6328112074962053717"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6328112074962053717"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2025\/07\/introducing-skia-graphite-chromes.html","title":"Introducing Skia Graphite: Chrome's rasterization backend for the future"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi_oXM-_56tbxbRYQxIunAhz47yN-RJHgS4FSb4wnuyaBN5amMkmRSGXu9oWoQ9apIB-DOl1RRi69mwcOLlV2EaD8HBjBPFg0p1dud7HStcmzIRYa3wwq11BjsKOeC_pUykrZMSJvsl2RlCQktC0xw28TpBnEbqBJxev7D-ZFHVBt20bshdN6wLtogSN6MG\/s72-c\/Fast%20Curious_image%20%281%29.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-6945376193810405194"},"published":{"$t":"2025-06-05T10:00:00.000-07:00"},"updated":{"$t":"2025-11-03T09:19:10.306-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"Chrome achieves highest score ever on Speedometer 3.1, saving users millions of hours"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7ibRIFh6_fd8s7ZyAA5Itvhk0OXNyAoVEfC_ctfRXwjGWIcRw-HBETVHqY9IFeZKJwkXj0uE2YsV27pJEjrIJkJkZDCK9Xhp38_jwg4inqSv360AChaT2R7my7jigmtLVeL79pawHZY9AX4HA9LyQ22VmOF-eVi2vjMIZdO61356_4AQu_xjWn7_BAyQz\/s1600\/Fast%20Curious_image.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"166\" data-original-width=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7ibRIFh6_fd8s7ZyAA5Itvhk0OXNyAoVEfC_ctfRXwjGWIcRw-HBETVHqY9IFeZKJwkXj0uE2YsV27pJEjrIJkJkZDCK9Xhp38_jwg4inqSv360AChaT2R7my7jigmtLVeL79pawHZY9AX4HA9LyQ22VmOF-eVi2vjMIZdO61356_4AQu_xjWn7_BAyQz\/s1600\/Fast%20Curious_image.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp\u003E\n\u003Cem\u003EUpdate (6\/10\/2025): This blog was updated to reflect that testing was done using the Speedometer 3.1 benchmark, and resulted in a 22% performance improvement. The previous version incorrectly noted that the performance improvement was 10% and that the benchmark was Speedometer 3. \u003C\/em\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nPerformance has always been one of the core pillars of Chrome and it’s something we’ve never stopped investing in.  Publicly available and open benchmarks, which we create in open collaboration with other browsers, are useful tools for tracking our overall progress, understanding new areas of improvement, and validating potential optimizations. In today’s\u003Ca href=\"https:\/\/blog.chromium.org\/search\/label\/the%20fast%20and%20the%20curious\"\u003E The Fast and the Curious\u003C\/a\u003E post,  we’d like to go through Chrome’s recent work that enabled it to achieve the highest score ever on the Speedometer benchmark.\n\u003C\/p\u003E\n\u003Cp\u003E\nFor Speedometer, these optimizations have resulted in a 22% improvement since August 2024. That 22% improvement leads to better browser experiences, higher conversions for businesses, and deeper enjoyment of what the web has to offer. If each Chrome user used Chrome for just 10 minutes a day, these improvements collectively save 116 million hours or roughly 166 lifetimes worth of waiting around for websites to load and do things. \n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhNBzs94FRWaVl6_LwIzhqoAu5BQUjRUfMIeqPIW6f6hsKFlYw0yHAmXDAHvfOnNFgZc-XtC857Hwk4xAGNM2aYvZC4N7DAUdcWCTQzufE5tTV-pL2FesiTsL91_2aHaF7dCcEMmKjdwxe2rH2HumPUl_ZgAwmXROWUnokDtNiUkxsHaLXYCzptr-dZ7PJK\/s1600\/Screenshot%202025-06-10%20at%2012.24.01%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"874\" data-original-width=\"1522\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhNBzs94FRWaVl6_LwIzhqoAu5BQUjRUfMIeqPIW6f6hsKFlYw0yHAmXDAHvfOnNFgZc-XtC857Hwk4xAGNM2aYvZC4N7DAUdcWCTQzufE5tTV-pL2FesiTsL91_2aHaF7dCcEMmKjdwxe2rH2HumPUl_ZgAwmXROWUnokDtNiUkxsHaLXYCzptr-dZ7PJK\/s1600\/Screenshot%202025-06-10%20at%2012.24.01%E2%80%AFPM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp style=\"text-align: center;\"\u003E\nSpeedometer 3.1 score measured on Apple Macbook Pro M4 with MacOS 15 \n\u003C\/p\u003E\n\u003Cp\u003E\nSpeedometer is a benchmark created in open collaboration with other browsers and measures web application responsiveness through workloads that cover a large variety of different areas of the Blink rendering engine used in Chrome:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003EHTML parsing\u003C\/li\u003E\n\n\u003Cli\u003EJavaScript and JSON processing\u003C\/li\u003E\n\n\u003Cli\u003EJavaScript and Document Object Model (DOM) interaction\u003C\/li\u003E\n\n\u003Cli\u003EDOM manipulations (element insertion and removal)\u003C\/li\u003E\n\n\u003Cli\u003EText size computation (font shaping)\u003C\/li\u003E\n\n\u003Cli\u003ECascading Style Sheet (CSS) application and layout calculation\u003C\/li\u003E\n\n\u003Cli\u003EPixel rendering\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\nIn essence, Speedometer tests critical components of the entire rendering pipeline. For a deeper dive into these individual parts, we recommend the presentation \u003Ca href=\"https:\/\/www.youtube.com\/watch?v=K2QHdgAKP-s\"\u003ELife of a Script at Chrome University\u003C\/a\u003E.\n\u003C\/p\u003E\n\u003Cp\u003E\nAchieving exceptional web performance requires a multifaceted approach, and optimizing for Speedometer is a testament to overall product excellence. Over the past year, our team has focused on refining fundamental rendering paths across the entire stack. Here are some notable optimization examples.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe team heavily optimized memory layouts of many internal data structures across DOM, CSS, layout, and painting components. Blink now avoids a lot of useless churn on system memory by keeping state where it belongs with respect to access patterns, maximizing utilization of CPU caches. Where internal memory was already relying on garbage collection in Oilpan, e.g. DOM, the usage was expanded by converting types from using malloc to Oilpan. This generally speeds up the affected areas as it packs memory nicely in Oilpan’s backend.\n\u003C\/p\u003E\n\u003Cp\u003E\nStrings in the renderer improved quite a bit over the last year by avoiding costly representations where possible and switching hashing to rapidhash. More generally, lots of data structures were equipped with better hashes, filters, and probing algorithms.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhere rendering becomes inherently expensive, e.g., for computing CSS styles across various elements, caches are now used much more effectively with better hit rates. At the same time we cache fewer things that are not relevant. Another area where rendering becomes expensive is font shaping; the team significantly improved \u003Ca href=\"https:\/\/en.wikipedia.org\/wiki\/Apple_Advanced_Typography\"\u003EApple  Advanced Typography\u003C\/a\u003E font shaping performance which is relevant everywhere text is rendered.\n\u003C\/p\u003E\n\u003Cp\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by Thomas Nattestad \u003C\/span\u003E\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6945376193810405194"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6945376193810405194"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2025\/06\/chrome-achieves-highest-score-ever-on.html","title":"Chrome achieves highest score ever on Speedometer 3.1, saving users millions of hours"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7ibRIFh6_fd8s7ZyAA5Itvhk0OXNyAoVEfC_ctfRXwjGWIcRw-HBETVHqY9IFeZKJwkXj0uE2YsV27pJEjrIJkJkZDCK9Xhp38_jwg4inqSv360AChaT2R7my7jigmtLVeL79pawHZY9AX4HA9LyQ22VmOF-eVi2vjMIZdO61356_4AQu_xjWn7_BAyQz\/s72-c\/Fast%20Curious_image.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-6194686865561872235"},"published":{"$t":"2025-05-08T09:59:00.000-07:00"},"updated":{"$t":"2025-05-08T09:59:31.008-07:00"},"title":{"type":"text","$t":"Fighting Unwanted Notifications with Machine Learning in Chrome "},"content":{"type":"html","$t":"\u003Cp\u003E\nNotifications in Chrome are a useful feature to keep up with updates from your favorite sites. However, we know that some notifications may be spammy or even deceptive. We’ve received reports of notifications diverting you to download suspicious software, tricking you into sharing personal information or asking you to make purchases on potentially fraudulent online store fronts. \n\u003C\/p\u003E\n\u003Cp\u003E\nTo defend against these threats, Chrome is launching warnings of unwanted notifications on Android. This new feature uses on-device machine learning to detect and warn you about potentially deceptive or spammy notifications, giving you an extra level of control over the information displayed on your device.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhen a notification is flagged by Chrome, you’ll see the name of the site sending the notification, a message warning that the contents of the notification are potentially deceptive or spammy, and the option to either unsubscribe from the site or see the flagged content. \n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjdCMwUjjbBbWbcsIDPz1-12QyQOWYYHRBrw-V3fZlpdpLIhb-KR6ZQVUnB5Lc0CcsLuOLaz5H6TxtxbcFfNSnaSRcEN6f-NeXe4Q271frko8j3oKrH-lIBFoWWtq17stBqfEHK8sOj-epcZoXj43KRHpEWjlnYF-jFYWC0qrDf4hTBsAAzgvbBRI-os7ft\/s1600\/Screenshot%202025-05-07%20at%202.41.50%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"636\" data-original-width=\"369\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjdCMwUjjbBbWbcsIDPz1-12QyQOWYYHRBrw-V3fZlpdpLIhb-KR6ZQVUnB5Lc0CcsLuOLaz5H6TxtxbcFfNSnaSRcEN6f-NeXe4Q271frko8j3oKrH-lIBFoWWtq17stBqfEHK8sOj-epcZoXj43KRHpEWjlnYF-jFYWC0qrDf4hTBsAAzgvbBRI-os7ft\/s1600\/Screenshot%202025-05-07%20at%202.41.50%E2%80%AFPM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp style=\"text-align: center\"\u003E\nAn example of a notification flagged as possibly spam.\n\u003C\/p\u003E\n\u003Cp\u003E\nIf you choose to see the notification you will still see the option to unsubscribe or you can choose to always allow notifications from that site and not see warnings in the future. \n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi-pUXQlfKAIH427ozKplzv2geQz_cNc_EOjxSaB9K4nRDXhbiFGYBpR6FTWd95ehGxVZ0de_piDUmEjis_tShIJddv27scbA0rs3KjyL5DvNXoN_ABiikAvQTp6bDeMjHMEO5PP-4Mjy3-b-Fe0sKSQpVVoXsP3X2mqrHF2mfAQCd9ltrBBnA5HxhUfkgG\/s1600\/Screenshot%202025-05-07%20at%202.42.46%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"631\" data-original-width=\"350\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi-pUXQlfKAIH427ozKplzv2geQz_cNc_EOjxSaB9K4nRDXhbiFGYBpR6FTWd95ehGxVZ0de_piDUmEjis_tShIJddv27scbA0rs3KjyL5DvNXoN_ABiikAvQTp6bDeMjHMEO5PP-4Mjy3-b-Fe0sKSQpVVoXsP3X2mqrHF2mfAQCd9ltrBBnA5HxhUfkgG\/s1600\/Screenshot%202025-05-07%20at%202.42.46%E2%80%AFPM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp style=\"text-align: center\"\u003E\nWhat you see when viewing a flagged notification. \n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EHow It Works\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nChrome uses a local, on-device machine learning model to analyze notification content. This model identifies notifications that are likely to be unwanted. The model is trained on the textual contents of the notification, like the title, body, and action button texts.\n\u003C\/p\u003E\n\u003Cp\u003E\nNotifications are end to end encrypted. The analysis of each message is done on-device and notification contents are not sent to Google, to protect user privacy. Due to the sensitive nature of notifications content, the model was trained using synthetic data generated by the Gemini large language model (LLM). The training data was evaluated against real notifications Chrome security team collected by subscribing to a variety of websites that were then classified by human experts. To start, this feature is only available on Android as the majority of notifications are sent to mobile devices, however we will evaluate expanding to other platforms in the future.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis feature is just one of many ways Chrome works to reduce the number of potentially harmful notifications you receive. Other ways Chrome protects against potentially harmful notifications include:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003ERevoking Notification Permissions from Abusive Sites: When Google Safe Browsing identifies a site engaging in abusive behavior Chrome will automatically revoke the site’s notification permissions. You can find a list of revoked notification permissions in Chrome Safety Check. Learn more about how Safety Check takes proactive steps to keep you safe \u003Ca href=\"https:\/\/blog.google\/products\/chrome\/google-chrome-safety-update-september-2024\/\"\u003Ehere\u003C\/a\u003E.\n  \n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi5CxgP6_T4VgVFXAXEmGas2RK5XFTjJ4VA_VutYgOVMaD_S7ZXuttjUIhptyxlU5e4jubpkFXywT9OQK0a-p5ZV39T2MCLTPgqfo-fige9b9rCArWP6o2KJPXlST_Me59-64fzOCGYjQs6egCWhrK5EqJYyxrKIIFquoBTcaRlt43hg-u1Fu7odm8B9F7C\/s1600\/Screenshot%202025-05-07%20at%202.43.48%E2%80%AFPM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"909\" data-original-width=\"954\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi5CxgP6_T4VgVFXAXEmGas2RK5XFTjJ4VA_VutYgOVMaD_S7ZXuttjUIhptyxlU5e4jubpkFXywT9OQK0a-p5ZV39T2MCLTPgqfo-fige9b9rCArWP6o2KJPXlST_Me59-64fzOCGYjQs6egCWhrK5EqJYyxrKIIFquoBTcaRlt43hg-u1Fu7odm8B9F7C\/s1600\/Screenshot%202025-05-07%20at%202.43.48%E2%80%AFPM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp style=\"text-align: center\"\u003E\n\n    In Safety Check you can review any notification permission revocations\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003EOne Tap Unsubscribe on Android: You have the option to unsubscribe from notifications with one click on any Chrome notification sent to an Android phone, whether the notification contents are benign or potentially harmful. Limiting notifications from sites you no longer want updates from can reduce the amount of data and battery life you use daily. If you ever want to review what sites have the ability to send you notifications you can visit Chrome Settings-\u003E Privacy and Security-\u003ESite Settings-\u003ENotifications.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\nNotification warnings are an important step in Chrome's ongoing commitment to user safety. The Chrome Security team in partnership with Google Safe Browsing continually monitors threats to our users in order to evolve our defenses against abusive activity across the web. Keep an eye on our blog for updates on how we are helping you stay one step ahead of online threats.\n\u003C\/p\u003E\n  \n\u003Cspan class='post-author'\u003EPosted by Hannah Buonomo \u0026 Sarah Krakowiak Criel, Chrome Security \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6194686865561872235"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6194686865561872235"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2025\/05\/fighting-unwanted-notifications-with.html","title":"Fighting Unwanted Notifications with Machine Learning in Chrome "}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjdCMwUjjbBbWbcsIDPz1-12QyQOWYYHRBrw-V3fZlpdpLIhb-KR6ZQVUnB5Lc0CcsLuOLaz5H6TxtxbcFfNSnaSRcEN6f-NeXe4Q271frko8j3oKrH-lIBFoWWtq17stBqfEHK8sOj-epcZoXj43KRHpEWjlnYF-jFYWC0qrDf4hTBsAAzgvbBRI-os7ft\/s72-c\/Screenshot%202025-05-07%20at%202.41.50%E2%80%AFPM.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-8124292264549896031"},"published":{"$t":"2025-01-09T09:01:00.000-08:00"},"updated":{"$t":"2025-01-09T09:01:44.434-08:00"},"title":{"type":"text","$t":"Announcing Supporters of Chromium-based Browsers"},"content":{"type":"html","$t":"\u003Cp\u003E\nSince Google \u003Ca href=\"https:\/\/blog.chromium.org\/2008\/09\/welcome-to-chromium_02.html\"\u003Eannounced\u003C\/a\u003E the Chromium project in 2008, we have been excited to build on the great foundations of open-source web browsers and contribute to the continued development of a rich web platform. Today, Chromium is used by hundreds of different projects globally, including big browsers like Chrome, home electronics from LG, application frameworks like Electron and even custom applications like Bloomberg terminals and SpaceX capsule control software.\n\u003C\/p\u003E\n\u003Cp\u003E\nIn 2024, Google made over \u003Ca href=\"https:\/\/chrome-commit-tracker.arthursonzogni.com\/organizations\/commits?repositories=chromium\u0026organizations=all\u0026grouping=yearly\u0026colors=organizations\u0026kind=author\u0026metric=commit\u0026chart=line\u0026dates=2000-01-01,2024-12-05\"\u003E100,000 commits\u003C\/a\u003E to Chromium, accounting for ~94 percent of contributions. While we have no intention of reducing this investment, we continue to welcome others stepping up to invest more.\n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgeqerR7xRgvX5EFinZOzdwMKzR3rffD9F6fUVFNKnInPaw2JGqxUuGcSRjj_uwWDz4ToXCv-dHd-lxsVVI4HR0eEVvf5DaB4AM05spBOIzWRCrl9vh5588W0tTMC0a6FZaS_Z4SCIpXrZXlScC3pe7APdwdeAY8MVPb1QsSjKuwj_1SXCj-iNkNy24HPkT\/s1600\/Screenshot%202025-01-09%2010.34.33%20AM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"434\" data-original-width=\"796\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgeqerR7xRgvX5EFinZOzdwMKzR3rffD9F6fUVFNKnInPaw2JGqxUuGcSRjj_uwWDz4ToXCv-dHd-lxsVVI4HR0eEVvf5DaB4AM05spBOIzWRCrl9vh5588W0tTMC0a6FZaS_Z4SCIpXrZXlScC3pe7APdwdeAY8MVPb1QsSjKuwj_1SXCj-iNkNy24HPkT\/s1600\/Screenshot%202025-01-09%2010.34.33%20AM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp\u003E\nGoogle also continues to invest heavily in the shared infrastructure of the Open Source project to \"keep the lights on\", including having thousands of servers endlessly running millions of tests, responding to hundreds of incoming bugs per day, ensuring the important ones get fixed, and constantly investing in code health to keep the whole project maintainable. This work represents hundreds of millions of US dollars in annual investment just for maintenance costs before any new feature, innovation or other business priorities can be addressed. \n\u003C\/p\u003E\n\u003Cp\u003E\nSustainable funding of critical open source infrastructure remains a hot industry-wide topic of discussion and over the years we’ve heard from many companies and developers about how critical the Chromium project is to their work. They’ve also shared how they would like to support the continued health of the project, beyond direct engineering support.\n\u003C\/p\u003E\n\u003Cp\u003E\nToday Google is pleased to announce our partnership with \u003Ca href=\"http:\/\/www.linuxfoundation.org\"\u003EThe Linux Foundation\u003C\/a\u003E and the launch of the \u003Cstrong\u003E\u003Ca href=\"https:\/\/www.linuxfoundation.org\/supporters-of-chromium-based-browsers\"\u003ESupporters of Chromium-based Browsers\u003C\/a\u003E\u003C\/strong\u003E. The goal of this initiative is to foster a sustainable environment of open-source contributions towards the health of the Chromium ecosystem and financially support a community of developers who want to contribute to the project, encouraging widespread support and continued technological progress for Chromium embedders. \n\u003C\/p\u003E\n\u003Cp\u003E\nThe \u003Cstrong\u003ESupporters of Chromium-based Browsers\u003C\/strong\u003E fund will\u003Cstrong\u003E \u003C\/strong\u003Ebe managed by \u003Ca href=\"https:\/\/www.linuxfoundation.org\/\"\u003Ethe Linux Foundation\u003C\/a\u003E, following their long established practices for open governance, prioritizing transparency, inclusivity, and community-driven development. We’re thrilled to have Meta, Microsoft, and Opera on-board as the initial members to pledge their support. \n\u003C\/p\u003E\n\u003Cp\u003E\nWe welcome this additional investment into Chromium’s commons and we’re looking forward to working with the other members of the \u003Cstrong\u003ESupporters of Chromium-based Browsers\u003C\/strong\u003E to ensure that it meets the needs of the wider Chromium community. At the same time, we remain committed to being the responsible steward of the Chromium project and to the massive investment necessary to keep Chromium working well for the entire web industry.\n\u003C\/p\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by Shruthi Sreekanta \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/8124292264549896031"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/8124292264549896031"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2025\/01\/announcing-supporters-of-chromium-based.html","title":"Announcing Supporters of Chromium-based Browsers"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgeqerR7xRgvX5EFinZOzdwMKzR3rffD9F6fUVFNKnInPaw2JGqxUuGcSRjj_uwWDz4ToXCv-dHd-lxsVVI4HR0eEVvf5DaB4AM05spBOIzWRCrl9vh5588W0tTMC0a6FZaS_Z4SCIpXrZXlScC3pe7APdwdeAY8MVPb1QsSjKuwj_1SXCj-iNkNy24HPkT\/s72-c\/Screenshot%202025-01-09%2010.34.33%20AM.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-1765996003748524559"},"published":{"$t":"2024-12-17T10:09:00.000-08:00"},"updated":{"$t":"2024-12-17T10:09:07.948-08:00"},"title":{"type":"text","$t":"Making Chrome QUICer"},"content":{"type":"html","$t":"\u003Cp\u003E\nIn October 2020, Chrome enabled \u003Ca href=\"https:\/\/blog.chromium.org\/2020\/10\/chrome-is-deploying-http3-and-ietf-quic.html\"\u003EHTTP\/3 by default\u003C\/a\u003E. HTTP\/3 (\u003Ca href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9114\"\u003ERFC 9114\u003C\/a\u003E) runs over IETF QUIC (\u003Ca href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9000\"\u003ERFC9000\u003C\/a\u003E). Default-enabling HTTP\/3 in Chrome resulted in improved performance compared not only HTTP\/1 and HTTP\/2, but also Google QUIC. Benefits included reduced Google search latency and fewer rebuffers for YouTube.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe journey to optimizing performance did not end when HTTP\/3 was default enabled. Recent advancements include the implementation of the HTTP\/3 ORIGIN frame (\u003Ca href=\"https:\/\/httpwg.org\/specs\/rfc9412.html\"\u003ERFC 9412\u003C\/a\u003E) and Server's Preferred Address (\u003Ca href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc9000#name-servers-preferred-address\"\u003ERFC 9000 Section 9.6\u003C\/a\u003E). The former enhances connection coalescing, while the latter reduces a connection's round trip time (RTT). Both features have been enabled by default in M131, which was released to Stable on 11\/19.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003EORIGIN Frame\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nWhen a connection is established for a specific hostname, the server’s certificate typically contains numerous other hostnames for which the server is authoritative. However, a client cannot immediately send requests for those other hostnames on that connection without first performing a DNS lookup for the other hostname and verifying that the IP address of the connection matches the resolved address. This additional DNS resolution introduces latency and significantly reduces the likelihood of connection pooling due to potential IP mismatches. The metrics from Chrome indicate that nearly 20% of HTTP\/3 connections would be unnecessary if not for this IP mismatch.\n\u003C\/p\u003E\n\u003Cp\u003E\nCreating a new connection, even with QUIC 0-RTT, is expensive in terms of latency, memory, and CPU usage. This is because:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003EDNS resolution adds latency unless cached locally in Chrome’s DNS cache.\u003C\/li\u003E\n\n\u003Cli\u003EBoth client and server must send multiple packets to complete a QUIC handshake.\u003C\/li\u003E\n\n\u003Cli\u003ETLS necessitates CPU-intensive asymmetric cryptography on both ends.\u003C\/li\u003E\n\n\u003Cli\u003EThe congestion controller begins in its default state, potentially leading to under or over-sending.\u003C\/li\u003E\n\n\u003Cli\u003E0-RTT might fail.\u003C\/li\u003E\n\n\u003Cli\u003ENon-safe requests aren't sent via 0-RTT.\u003C\/li\u003E\n\n\u003Cli\u003EMore connections consume more memory.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\nAdditionally, features like HTTP priorities (\u003Ca href=\"https:\/\/datatracker.ietf.org\/doc\/rfc9218\/\"\u003ERFC 9218\u003C\/a\u003E) are only effective if there are multiple simultaneous responses to send.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe HTTP\/3 ORIGIN Frame (\u003Ca href=\"https:\/\/httpwg.org\/specs\/rfc9412.html\"\u003ERFC 9412\u003C\/a\u003E) enables a server to indicate what domains it would like to pool onto a connection. Additionally, once the frame is received, it indicates other domains should not be pooled onto that connection, even if they are in the certificate.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003EServer’s Preferred Address\u003C\/h3\u003E\n\n\n\u003Cp\u003E\nIn some cases, the initial server address to which the client connects is not the most efficient route. It might be behind an L4 load balancer, and connecting directly could increase stability. Particularly when using Anycast, it’s possible the server is distant from where traffic enters the network, creating a 3-legged path that increases the round trip time.\n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhPbECfw3krb6-1DM-wQBsBpPLhcLNGwGVMzEFW_XzUpumvfQzJSvVLJfZ1iwCyowq9QRE2bwl-GsQ8eArforqyyEBadmNN2iwUP59p3Rl428qWPqaJFu2JYe9o7QsuWa20R1s_isnM7efkNIMSetkmnyhFuQOtRt1-7G_e4NNb-BSfXP-DhVB_X5c6QZ0V\/s1600\/Screenshot%202024-12-17%2012.07.47%20PM.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"381\" data-original-width=\"860\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhPbECfw3krb6-1DM-wQBsBpPLhcLNGwGVMzEFW_XzUpumvfQzJSvVLJfZ1iwCyowq9QRE2bwl-GsQ8eArforqyyEBadmNN2iwUP59p3Rl428qWPqaJFu2JYe9o7QsuWa20R1s_isnM7efkNIMSetkmnyhFuQOtRt1-7G_e4NNb-BSfXP-DhVB_X5c6QZ0V\/s1600\/Screenshot%202024-12-17%2012.07.47%20PM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp\u003E\nOnce the handshake is confirmed, Server’s Preferred Address allows a server to indicate it would like the client to migrate to a different server IP. Though a QUIC connection is not bound to a single 4-tuple like TCP, this is the only type of migration in RFC9000 where the server can change its address.\n\u003C\/p\u003E\n\u003Cp\u003E\nSo far, only Google’s \u003Ca href=\"https:\/\/cloud.google.com\/media-cdn\/docs\/overview\"\u003EMedia CDN\u003C\/a\u003E has widely enabled advertising an alternative address, but we expect more servers to adopt it soon. Testing has shown that this migration is successful over 99% of the time in Chrome and reduces average RTT by 40-80%.\n\u003C\/p\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by Fan Yang and Ian Swett \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/1765996003748524559"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/1765996003748524559"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/12\/making-chrome-quicer.html","title":"Making Chrome QUICer"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhPbECfw3krb6-1DM-wQBsBpPLhcLNGwGVMzEFW_XzUpumvfQzJSvVLJfZ1iwCyowq9QRE2bwl-GsQ8eArforqyyEBadmNN2iwUP59p3Rl428qWPqaJFu2JYe9o7QsuWa20R1s_isnM7efkNIMSetkmnyhFuQOtRt1-7G_e4NNb-BSfXP-DhVB_X5c6QZ0V\/s72-c\/Screenshot%202024-12-17%2012.07.47%20PM.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-6631971075396591077"},"published":{"$t":"2024-12-04T06:00:00.000-08:00"},"updated":{"$t":"2025-11-03T09:19:21.778-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"How Chrome doubled its Speedometer scores on Android"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjscHFeqCsz-nA-3e5XHLXHDD9nSRLgkL9jxZng8O_AiIn_WvC2G4x1AL4l-EgVAbPNAXQR3qZGmWzUtu6KjcagkBFKV4zg1vMWur7DaciR0i9eXaJrt6mFPM_OJcCBQBkXixZTSPh32YpsnM4LSq1y_ifhhRoIRuF5yB_so0zePYf8ko7kfnYnwsAqtu0F\/s1600\/Fast%20Curious_image.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"166\" data-original-width=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjscHFeqCsz-nA-3e5XHLXHDD9nSRLgkL9jxZng8O_AiIn_WvC2G4x1AL4l-EgVAbPNAXQR3qZGmWzUtu6KjcagkBFKV4zg1vMWur7DaciR0i9eXaJrt6mFPM_OJcCBQBkXixZTSPh32YpsnM4LSq1y_ifhhRoIRuF5yB_so0zePYf8ko7kfnYnwsAqtu0F\/s1600\/Fast%20Curious_image.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp\u003E\nToday’s \u003Cem\u003EThe Fast and the Curious\u003C\/em\u003E post covers how Chrome achieved best-in-class Speedometer scores on mobile devices, resulting in faster and smoother web experiences for Android users.\n\u003C\/p\u003E\n\u003Cp\u003E\nChrome has always been about speed. Whether it's loading pages quickly, running complex web apps smoothly, or delivering a seamless browsing experience, performance is at the heart of our browser. And we're always looking for ways to make Chrome even faster.\n\u003C\/p\u003E\n\u003Cp\u003E\nOver the last two years, we have been hard at work on a number of \u003Cstrong\u003Eperformance improvements for Android devices\u003C\/strong\u003E. We're excited to share some of the progress we've made.\n\u003C\/p\u003E\n\u003Ch1\u003ESpeedometer on Android \u003C\/h1\u003E\n\n\n\u003Cp\u003E\nOne of the key metrics we use to track Chrome's performance is the \u003Ca href=\"https:\/\/browserbench.org\/Speedometer3.0\/\"\u003ESpeedometer benchmark\u003C\/a\u003E. This benchmark is developed in collaboration with other major web browser engines and measures how quickly Chrome can complete interactions with web pages, including parsing\/rendering HTML or CSS and running JavaScript.\n\u003C\/p\u003E\n\u003Cp\u003E\nSince the release of Chrome M112, we've seen a \u003Cstrong\u003Esignificant increase in Speedometer 2.1 scores on Android devices [1]\u003C\/strong\u003E. In fact, on many devices, scores more than doubled, with the newest Snapdragon® 8 Elite Mobile Platform setting new records for Speedometer performance on mobile devices! These huge accomplishments are a testament to the work not only of the Chrome and Android teams, but also our silicon and SoC partners.\n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7ULeiY7XhUwFlFUcyUnTZc8AorKMA5I5VhW3ENj7chwRB-Sgc_NQWPgNUBLnX7QhRIsBYH-THYueE-lg5hi4CVg_n-yrPvvCIUPXMmHagNT3Y9PpgID8nrwud7UAT5LMMkaHduXeylctnroj7aQHqOUefGucCKoW3MK6sfU1AsJshwEO2EMyfUkR1Vnm9\/s1600\/s2.1_rel.jpg\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"1006\" data-original-width=\"1953\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7ULeiY7XhUwFlFUcyUnTZc8AorKMA5I5VhW3ENj7chwRB-Sgc_NQWPgNUBLnX7QhRIsBYH-THYueE-lg5hi4CVg_n-yrPvvCIUPXMmHagNT3Y9PpgID8nrwud7UAT5LMMkaHduXeylctnroj7aQHqOUefGucCKoW3MK6sfU1AsJshwEO2EMyfUkR1Vnm9\/s1600\/s2.1_rel.jpg\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp style=\"text-align: center;\"\u003E\nSince Chrome M112, Speedometer 2.1 scores have more than doubled on many Android devices. [1]\n\u003C\/p\u003E\n\u003Ch1\u003EHow Did We Do It?\u003C\/h1\u003E\n\n\n\u003Cp\u003E\nThe improvements resulted from several changes, including:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003E\u003Cstrong\u003EBuild optimizations:\u003C\/strong\u003E We've made a number of changes to the way Chrome is built, which has resulted in faster code execution tuned to modern premium Android devices and SoCs.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003EV8 and Blink improvements:\u003C\/strong\u003E Many improvements to the JavaScript engine (V8) and the rendering engine (Blink) have further boosted performance.\u003C\/li\u003E\n\n\u003Cli\u003E\u003Cstrong\u003EScheduling, OS and SoCs:\u003C\/strong\u003E We worked closely with Android partners to optimize the way Chrome interacts with the operating system and its thread scheduling to make the best use of the silicon on the devices.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\nLet's take a closer look at each of these areas.\n\u003C\/p\u003E\n\u003Ch1\u003EBuild optimizations\u003C\/h1\u003E\n\n\n\u003Cp\u003E\nThe Android device ecosystem is very diverse. From entry-level phones to the newest premium ones, Chrome needs to run well on all devices. Up until last year, we shipped the same Chrome build to all these different Android devices. The memory and disk size constraints on entry-level devices resulted in Chrome having to prioritize a small binary size. Consequently, many modern build optimizations were out of reach, as they resulted in much larger binaries.\n\u003C\/p\u003E\n\u003Cp\u003E\nWith M113, Chrome was finally able to ship a \u003Cstrong\u003Eseparate higher-performance build targeting premium Android devices\u003C\/strong\u003E via the Google Play Store. While we still ship a more binary-size-constrained build to other devices, this approach allowed us to land some of those modern optimizations into the new premium build:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003EBy targeting 64-bit Arm instead of 32-bit Arm, we can make use of more efficient Arm instruction set features and larger 64-bit operations.\u003C\/li\u003E\n\n\u003Cli\u003ESince binary size is less relevant on premium devices with large disks and sufficient memory, we can now compile C++ code \u003Ca href=\"https:\/\/chromium-review.googlesource.com\/c\/chromium\/src\/+\/3936329\"\u003Eoptimized for speed\u003C\/a\u003E (-O2 \/ -O3) rather than size (-Oz).\u003C\/li\u003E\n\n\u003Cli\u003EFurthermore, we tweaked the inlining thresholds used by the compiler to enable more inlining in hot code (\u003Ca href=\"https:\/\/chromiumdash.appspot.com\/commit\/f5361ce9a99a600ec483e2694414d4fb638f1b6a\"\u003Ewithin\u003C\/a\u003E and \u003Ca href=\"https:\/\/chromiumdash.appspot.com\/commit\/1cdd49ffd503bac5e6779d48503865bf5a5a0095\"\u003Eacross modules\u003C\/a\u003E), while updating the model and policy used by another compiler pass (MLGO) to \u003Ca href=\"https:\/\/chromiumdash.appspot.com\/commit\/a181985aec42c2547b774cd0e1e8903bd0c797b4\"\u003Ereduce inlining in cold code\u003C\/a\u003E.\u003C\/li\u003E\n\n\u003Cli\u003EWe now also apply \u003Ca href=\"https:\/\/chromium.googlesource.com\/chromium\/src\/+\/refs\/heads\/main\/docs\/pgo.md\"\u003Eprofile-guided optimization\u003C\/a\u003E (PGO) techniques to the build to further improve the code layout and optimization level for hot code.\u003C\/li\u003E\n\n\u003Cli\u003EFinally, we improved cross-function code ordering by aligning Chrome's \u003Ca\n                                                                       href=\"https:\/\/chromium.googlesource.com\/chromium\/src\/+\/main\/docs\/orderfile.md\"\u003Eorderfile\u003C\/a\u003E generation with the new 64-bit build. We also now \u003Ca href=\"https:\/\/chromiumdash.appspot.com\/commit\/1c90dc12223d10411b096a2fcda13b4a14e39ec2\"\u003Einclude Speedometer 3\u003C\/a\u003E, the latest version of the industry-standard browser speed benchmark, in the workloads used to generate the orderfile.\u003C\/li\u003E\n\u003C\/ul\u003E\n\u003Cp\u003E\nTogether, these build optimizations account for more than half of the overall Speedometer score improvements. This progress was facilitated by our collaboration with Arm, who contributed valuable insights and improvements, including to identify and address inefficiencies in Chrome's PGO setup and inlining.\n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgDpBrRfRMVPKZIjnRSAo7Ea1Wsx00QrnL9VJQl7LEqMi3zWC7vLzfNlLY7tbNPjRzhhq44Yt7lxoY0sEA1OstCQKNcS3z6BWdmZpYxj-3UetcQtatu-4xusYX-LJ1sV76axpmvHvQ-dDVrOMJl4QK6tE1h_ACeK7WsWyduJXKZdkEccf7ng_WVEmygS59K\/s1600\/Screenshot%202024-12-04%202.03.43%20PM.png\" style=\"display: block; padding: 1em 0; text-align: center; \"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"387\" data-original-width=\"807\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgDpBrRfRMVPKZIjnRSAo7Ea1Wsx00QrnL9VJQl7LEqMi3zWC7vLzfNlLY7tbNPjRzhhq44Yt7lxoY0sEA1OstCQKNcS3z6BWdmZpYxj-3UetcQtatu-4xusYX-LJ1sV76axpmvHvQ-dDVrOMJl4QK6tE1h_ACeK7WsWyduJXKZdkEccf7ng_WVEmygS59K\/s1600\/Screenshot%202024-12-04%202.03.43%20PM.png\"\/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Ch1\u003EV8 and Blink improvements\u003C\/h1\u003E\n\n\n\u003Cp\u003E\nChrome continuously improves the performance of its JavaScript and web rendering engines, V8 and Blink. Most optimizations are small in individual impact, but stacked together, these improvements add up and contributed most of the remaining Speedometer impact! Notable ones include:\n\u003C\/p\u003E\n\u003Cul\u003E\n\n\u003Cli\u003EWe now utilize an \u003Ca href=\"https:\/\/chromiumdash.appspot.com\/commit\/dfbc1a660bbe3a219dbbd61365036009008188ad\"\u003Eoptimized fast-path HTML parser\u003C\/a\u003E to parse innerHTML attributes.\u003C\/li\u003E\n\n\u003Cli\u003EV8 launched its \u003Cem\u003E\u003Ca href=\"https:\/\/v8.dev\/blog\/sparkplug\"\u003ESparkplug\u003C\/a\u003E\u003C\/em\u003E compiler tier, a super fast baseline compiler that sits right above its \u003Cem\u003EIgnition\u003C\/em\u003E interpreter and generates non-optimized code very quickly. Later, V8 also launched \u003Cem\u003E\u003Ca href=\"https:\/\/v8.dev\/blog\/maglev\"\u003EMaglev\u003C\/a\u003E\u003C\/em\u003E, a new mid-tier compiler that generates semi-optimized code. It takes longer to do so than Sparkplug, but much less time than \u003Cem\u003ETurbofan\u003C\/em\u003E, V8's ultra-optimizing compiler tier. All together, this new tiering hierarchy allows V8 to tier up more gradually, improving both performance and power consumption.\u003C\/li\u003E\n\n\u003Cli\u003EWe tuned our heuristics that decide when garbage collection occurs, targeting times \u003Ca href=\"https:\/\/crbug.com\/333981063\"\u003Ewhen the rendering engine is idle\u003C\/a\u003E or \u003Ca href=\"https:\/\/crbug.com\/333423696\"\u003Ewhen users navigate away from pages\u003C\/a\u003E.\u003C\/li\u003E\n\n\u003Cli\u003EWe landed many other incremental optimizations, e.g. to V8 and our parsing, style, layout, and text rendering engines.\u003C\/li\u003E\n\u003C\/ul\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgxtu7_F9XtnMIHrTWHIowh8Ok8GpnlgOzz3dGInjQBVv0pD9IV3_u_keDOHQMixrpB5u3cj6rawxhPcLwMacBIYRWSiZ_UDV3VAhPkJ4K4X4KWGSE-1r5GT7sRj6i_JG8fc8ByUYymG6FfWgd6BnXitDZZJtH3w8SRU_RRd9FHvRthBnRwp-ny_9GZukMb\/s1600\/Screenshot%202024-12-03%203.26.21%20PM.png\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"574\" data-original-width=\"1235\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgxtu7_F9XtnMIHrTWHIowh8Ok8GpnlgOzz3dGInjQBVv0pD9IV3_u_keDOHQMixrpB5u3cj6rawxhPcLwMacBIYRWSiZ_UDV3VAhPkJ4K4X4KWGSE-1r5GT7sRj6i_JG8fc8ByUYymG6FfWgd6BnXitDZZJtH3w8SRU_RRd9FHvRthBnRwp-ny_9GZukMb\/s1600\/Screenshot%202024-12-03%203.26.21%20PM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Ch1\u003EScheduling and OS\u003C\/h1\u003E\n\n\n\u003Cp\u003E\nTo achieve the best possible performance, Android partners invest heavily in tuning the operating system's thread scheduling and frequency scaling policies, as well as improving the performance of the Silicon itself.\n\u003C\/p\u003E\n\u003Cp\u003E\nWe worked closely with our partners to improve their tuning for Chrome and Speedometer. In particular, our collaboration with Qualcomm was very fruitful: By combining optimized scheduling policies with improved hardware performance, their newest Snapdragon 8 Elite mobile platform realized \u003Ca href=\"https:\/\/www.qualcomm.com\/news\/onq\/2024\/12\/need-for-speed-how-speedometer-enhances-mobile-browsing\"\u003Ea 60-80% improvement\u003C\/a\u003E in Speedometer 3.0 compared to its predecessor, resulting in class-leading web performance. This collaboration also highlighted important bottlenecks in Chrome's code, such as the need for improved PGO and opportunities in V8.\n\u003C\/p\u003E\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhBBrP6qtcXtpXbBPMBxAVshoG5TopQml-fHOgugFU6qvFugNR3neXsJxkHMHnRwqQAoL8MyBbszeIG5NHV-PRR2rgeVjCmjEnphZ2l_RARrdGL6oVVkO5RMjy_2yHqdTMJz4M_dMfVOGwHgU8nwqnzTgCBK8U4oau1TG3yxoPn5KJDv0iHSb8gSmRB5Ph7\/s1600\/s3.0_8650_vs_8750_low.gif\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"372\" data-original-width=\"972\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhBBrP6qtcXtpXbBPMBxAVshoG5TopQml-fHOgugFU6qvFugNR3neXsJxkHMHnRwqQAoL8MyBbszeIG5NHV-PRR2rgeVjCmjEnphZ2l_RARrdGL6oVVkO5RMjy_2yHqdTMJz4M_dMfVOGwHgU8nwqnzTgCBK8U4oau1TG3yxoPn5KJDv0iHSb8gSmRB5Ph7\/s1600\/s3.0_8650_vs_8750_low.gif\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\n\u003Cp style=\"text-align: center;\"\u003E\nSpeedometer 3.0 on Snapdragon 8 Gen 3 (left) compared to Snapdragon 8 Elite (right), Chrome M131\n\u003C\/p\u003E\n\u003Ch1\u003EWhy do these improvements matter?\u003C\/h1\u003E\n\n\n\u003Cp\u003E\nFaster Speedometer scores translate to improvements in real user interactions with web content, such as faster page loads and interactions. Back at M112, loading a Google Docs document on Pixel Tablet took more than 50% longer than it does today -- that's the effect of a doubled Speedometer score!\n\u003C\/p\u003E\n\n\u003Cdiv class=\"separator\" style=\"clear: both;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjY78_K7cMn77sQY1_BvMNtWkxJoH_oHD5AwBdslqMINJHhTNlNHn7C57urPKBYgKs4IrVVHQoUgs_0X9eqrHdojtiS575ZFfcJ1yPyTU1tksRTOzGikUhHcbzL-a5sS3ELvidEDaw4lGQryREwwd2dSwR0mzhQ1PNKX7ViQib13zPdPaxDQvCCv2pi4ijy\/s1600\/gdocs-pixel-tablet-m112-vs-m129-30fps-halfsize.gif\" style=\"display: block; padding: 1em 0px; text-align: center;\"\u003E\u003Cimg alt=\"\" border=\"0\" data-original-height=\"400\" data-original-width=\"1280\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjY78_K7cMn77sQY1_BvMNtWkxJoH_oHD5AwBdslqMINJHhTNlNHn7C57urPKBYgKs4IrVVHQoUgs_0X9eqrHdojtiS575ZFfcJ1yPyTU1tksRTOzGikUhHcbzL-a5sS3ELvidEDaw4lGQryREwwd2dSwR0mzhQ1PNKX7ViQib13zPdPaxDQvCCv2pi4ijy\/s1600\/gdocs-pixel-tablet-m112-vs-m129-30fps-halfsize.gif\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\n\u003Cp style=\"text-align: center;\"\u003E\nChrome M112 vs. M129 on Pixel Tablet, loading a \u003Ca href=\"https:\/\/docs.google.com\/document\/d\/1-8CM2KW9OWUlsgUjXRrqYQ0dbCHoDytl7_JfeuHYFFw\/edit\"\u003EGoogle Doc\u003C\/a\u003E (frame count) \n\u003C\/p\u003E\n\u003Cp\u003E\n[1] Speedometer 3 was released during M122, so results from Speedometer 2.1 are provided for a full picture. Measurements shown in graphs were taken on Pixel Tablet.\n\u003C\/p\u003E\n\u003Cspan class=\"post-author\"\u003EPosted by Eric Seckler, Software Engineer, Chrome \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6631971075396591077"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6631971075396591077"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/12\/doubling-speedometer-scores-android.html","title":"How Chrome doubled its Speedometer scores on Android"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjscHFeqCsz-nA-3e5XHLXHDD9nSRLgkL9jxZng8O_AiIn_WvC2G4x1AL4l-EgVAbPNAXQR3qZGmWzUtu6KjcagkBFKV4zg1vMWur7DaciR0i9eXaJrt6mFPM_OJcCBQBkXixZTSPh32YpsnM4LSq1y_ifhhRoIRuF5yB_so0zePYf8ko7kfnYnwsAqtu0F\/s72-c\/Fast%20Curious_image.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-4252577083982501261"},"published":{"$t":"2024-08-20T09:01:00.000-07:00"},"updated":{"$t":"2024-08-20T09:01:22.308-07:00"},"title":{"type":"text","$t":"Seamlessly use your passwords and addresses in Chrome across all devices"},"content":{"type":"html","$t":"\u003Cp\u003E\nLast October, we \u003Ca href=\"https:\/\/blog.chromium.org\/2023\/11\/a-new-way-to-seamlessly-browse-across.html\"\u003Eintroduced\u003C\/a\u003E a new identity model on iOS (Chrome 118) and are excited to bring it to Android devices and Desktop soon. This model aligns closely with how you already use other Google apps and services.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhen we first launched \u003Ca href=\"https:\/\/chrome.googleblog.com\/2009\/11\/bookmark-sync-and-more-speed-in-latest.html\"\u003EChrome sync back in 2009\u003C\/a\u003E, powered by the Google Account, our goal then, as it is today, was simple: help users access their bookmarks, passwords, tabs and more, across devices. At the time, this was best achieved by a sync model: synchronizing device data with your account and therefore requiring both sign-in and enabling sync.\n\u003C\/p\u003E\n\u003Cp\u003E\nOver the years, the digital world has changed and user expectations have evolved significantly. Cloud services emerged in 2010, and over the past 15 years, the concept of having a digital identity became more prevalent, especially through smartphones and mobile apps. Today, users increasingly expect to just sign in to get access to their stuff and sign out to keep it safe. \n\u003C\/p\u003E\n\u003Cp\u003E\nGiven this evolution of technology and user norms, we’re continuing to make progress on transforming our legacy sync model into one that more seamlessly meets the expectation users have today. From the point of signing in to Chrome you’ll get access to your saved passwords, addresses, and other data from your Google Account. Where relevant, we’ll offer you the choice to sign into Chrome for a customized browsing experience on any device. For example, you can sign in and start to plan a trip on your phone during your commute, and then seamlessly finish it up on any device. Send tabs between your devices, find your bookmarks and use autogenerated passwords with ease. \n\u003C\/p\u003E\n\u003Cp\u003E\nAs always, you have control - we strive to provide an excellent browser experience regardless of whether you choose to sign in or not. Additionally, saving your history and open tabs to your account remains a separate opt-in after signing into Chrome.\n\u003C\/p\u003E\n\u003Cp\u003E\nStay tuned for updates on this change - already on iOS and coming to Android and Desktop soon.\n\u003C\/p\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by Claire Charron, Chrome Product Manager \u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/4252577083982501261"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/4252577083982501261"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/08\/seamlessly-use-your-passwords-and.html","title":"Seamlessly use your passwords and addresses in Chrome across all devices"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-5918767882580515437"},"published":{"$t":"2024-06-12T11:55:00.000-07:00"},"updated":{"$t":"2024-06-12T11:55:22.176-07:00"},"title":{"type":"text","$t":"Building a faster, smarter, Chromebook experience with the best of Google technologies "},"content":{"type":"html","$t":"\u003Cp\u003E\n\u003Cem\u003EChromeOS will soon be developed on large portions of the Android stack to bring Google AI, innovations, and features faster to users.\u003C\/em\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nOver the last 13 years, we’ve evolved ChromeOS to deliver a secure, fast, and feature-rich Chromebook experience for millions of \u003Ca href=\"https:\/\/edu.google.com\/intl\/ALL_us\/chromebooks\/overview\/\"\u003Estudents and teachers\u003C\/a\u003E, \u003Ca href=\"https:\/\/www.google.com\/chromebook\/family-features\/\"\u003Efamilies\u003C\/a\u003E, \u003Ca href=\"https:\/\/www.google.com\/chromebook\/discover\/gaming\/\"\u003Egamers\u003C\/a\u003E, and \u003Ca href=\"https:\/\/chromeos.google\/products\/devices\/\"\u003Ebusinesses\u003C\/a\u003E all over the world. With our recent \u003Ca href=\"https:\/\/blog.google\/products\/chromebooks\/chromebook-plus-google\/\"\u003Eannouncements\u003C\/a\u003E around new features powered by Google AI and Gemini, Chromebooks now give us the opportunity to put powerful tools in the hands of more people to help with everyday tasks.\n\u003C\/p\u003E\n\u003Cp\u003E\nTo continue rolling out new Google AI features to users at a faster and even larger scale, we’ll be embracing portions of the Android stack, like the Android Linux kernel and Android frameworks, as part of the foundation of ChromeOS. We already have a strong history of collaboration, with \u003Ca href=\"https:\/\/chromeos.dev\/en\/android\"\u003EAndroid apps available on ChromeOS\u003C\/a\u003E and the start of unifying our \u003Ca href=\"https:\/\/chromeos.dev\/en\/posts\/androids-bluetooth-stack-fluoride-comes-to-chromeos\"\u003EBluetooth stacks\u003C\/a\u003E as of ChromeOS 122.\n\u003C\/p\u003E\n\u003Cp\u003E\nBringing the Android-based tech stack into ChromeOS will allow us to accelerate the pace of AI innovation at the core of ChromeOS, simplify engineering efforts, and help different devices like phones and accessories work better together with Chromebooks. At the same time, we will continue to deliver the unmatched security, consistent look and feel, and extensive management capabilities that ChromeOS users, enterprises, and schools love.\n\u003C\/p\u003E\n\u003Cp\u003E\nThese improvements in the tech stack are starting now but won’t be ready for consumers for quite some time. When they are, we’ll provide a seamless transition to the updated experience. In the meantime, we continue to be extremely excited about our continued progress on ChromeOS without any change to our regular software updates and new innovations.\n\u003C\/p\u003E\n\u003Cp\u003E\nChromebooks will continue to deliver a great experience for our millions of customers, users, developers and partners worldwide. We’ve never been more excited about the future of ChromeOS. \n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cem\u003EPosted by Prajakta Gudadhe, Senior Director, Engineering, ChromeOS \u0026 Alexander Kuscher, Senior Director, Product Management, ChromeOS\u003C\/em\u003E\n\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/5918767882580515437"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/5918767882580515437"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/06\/building-faster-smarter-chromebook.html","title":"Building a faster, smarter, Chromebook experience with the best of Google technologies "}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-7799096493389946023"},"published":{"$t":"2024-06-06T09:15:00.000-07:00"},"updated":{"$t":"2024-06-06T23:34:40.322-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"How Chrome achieved the highest score ever on Speedometer 3"},"content":{"type":"html","$t":"\u003Cp\u003E\u003Cem\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003C\/p\u003E\u003Cp style=\"text-align: center;\"\u003E\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTQhp2W8dIjin6cG9FZFPANCCxZkFh9n1Nkn60O8XvgU4XVY_rq3ChNITmiJ1VG16BHnsxVijTYMc06SNA0VHjqfee6dqZLgfjazWxh7p1b3i-pj4thXDt3QyK3vWSpRgrTHaxiSFfPvc1YRDtdcBOorm85i53-FebJDWUXrJA4a_oMAYNbxjTFE0PPbJc\/s400\/Fast%20Curious_image.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"166\" data-original-width=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTQhp2W8dIjin6cG9FZFPANCCxZkFh9n1Nkn60O8XvgU4XVY_rq3ChNITmiJ1VG16BHnsxVijTYMc06SNA0VHjqfee6dqZLgfjazWxh7p1b3i-pj4thXDt3QyK3vWSpRgrTHaxiSFfPvc1YRDtdcBOorm85i53-FebJDWUXrJA4a_oMAYNbxjTFE0PPbJc\/s16000\/Fast%20Curious_image.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cem\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\n\u003Cem\u003EToday’s The Fast and the Curious post explores how Chrome achieved the highest score on the new Speedometer 3.0, an upgraded browser benchmarking tool to optimize the performance of Web applications. Try out \u003Ca href=\"https:\/\/www.google.com\/chrome\/\"\u003EChrome\u003C\/a\u003E today!\u0026nbsp;\u003C\/em\u003E\u003C\/p\u003E\n\u003Cp\u003E\n\u003Ca href=\"https:\/\/browserbench.org\/Speedometer3.0\/\"\u003ESpeedometer 3.0\u003C\/a\u003E is a recently published benchmark for \u003Ca href=\"https:\/\/webkit.org\/blog\/15131\/speedometer-3-0-the-best-way-yet-to-measure-browser-performance\/\"\u003Emeasuring browser performance\u003C\/a\u003E that was created as an industry collaboration between companies like Google, Apple, Mozilla, Intel, and Microsoft. This benchmark helped us identify areas in which we could optimize Chrome to deliver a faster browser experience to all our users.\n\u003C\/p\u003E\n\u003Cp\u003E\nHere’s a closer look at how we further optimized Chrome to achieve the highest score ever Speedometer 3, by carefully tracking its recent performance over time as the updated benchmark was being developed. Since the inception of Speedometer 3 in May 2022, we've driven a 72% increase in Chrome’s Speedometer score - translating into performance gains for our users: \n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjhWV2DrIDMUUKPwXhOGaWNB1Md15huKND9UdpxiFs8taTD8PvDbGcbQnqgzibx8A9Q0SShTLxW0AyjGoJnNwIW-OEPfo5NN8vy0KvcS6vj7PnscI2-FE7_TZ19aTsjIRK5iYohctES6JgahB5W72NJVDkGJ_LhhyT_f9dcGKhVD9FsupDKI_bGwm4WtHw-\/s8333\/Fast%20\u0026amp;%20Curious%20In-Line%20Graph%20_%20Speedometer%20improvements_HighRes-04.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"5151\" data-original-width=\"8333\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjhWV2DrIDMUUKPwXhOGaWNB1Md15huKND9UdpxiFs8taTD8PvDbGcbQnqgzibx8A9Q0SShTLxW0AyjGoJnNwIW-OEPfo5NN8vy0KvcS6vj7PnscI2-FE7_TZ19aTsjIRK5iYohctES6JgahB5W72NJVDkGJ_LhhyT_f9dcGKhVD9FsupDKI_bGwm4WtHw-\/s16000\/Fast%20\u0026amp;%20Curious%20In-Line%20Graph%20_%20Speedometer%20improvements_HighRes-04.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\nOptimizing workloads \n\u003C\/h3\u003E\n\u003Cp\u003E\nBy looking at the workloads in Speedometer and in which functions Chrome was spending the most time, we were able to make targeted optimizations to those functions that each drove an increase in Chrome’s score. For example, the SpaceSplitString function is used heavily to turn space-separated strings such as those in “class=’foo bar’ ” into a list representation. In this function we removed some unnecessary bound checks. When we detect that there are duplicated stylesheets, we dedupe them and reference a single stylesheet instance. We made an optimization to reduce the cost of drawing paths and arcs by tuning memory allocations. When creating form editors we detected some unnecessary processing that occurs when form elements are created. Within querySelector, we were able to detect what selector was commonly used and create a hot-path for that. \n\u003C\/p\u003E\n\u003Cp\u003E\nWe \u003Ca href=\"https:\/\/blog.chromium.org\/2023\/04\/more-ways-were-making-chrome-faster.html\"\u003Epreviously shared\u003C\/a\u003E how we optimized innerHTML using specialized fast paths for parsing, an implementation that also \u003Ca href=\"https:\/\/github.com\/WebKit\/WebKit\/pull\/9926\"\u003Emade its way into WebKit\u003C\/a\u003E. Some workloads in Speedometer 3 use \u003Ca href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/DOMParser\"\u003EDOMParser\u003C\/a\u003E so we extended the same optimization for another 1% gain.  \n\u003C\/p\u003E\n\u003Cp\u003E\nWe worked with the Harfbuzz maintainer to also optimize how Chrome renders \u003Ca href=\"https:\/\/en.wikipedia.org\/wiki\/Apple_Advanced_Typography#AAT_Layout\"\u003EAAT\u003C\/a\u003E fonts such as those used by Apple Mac OS system fonts. Text starts as a processed stream of unicode characters that is then transformed into a glyph stream that is then run through a state machine defined in the AAT font. The optimization allows us to determine more quickly whether glyphs actually participate in the rules for the state machine, leading to speed-ups when processing text using AAT. \n\u003C\/p\u003E\n\u003Cp\u003E\n \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\nPicking the right code to focus on\n\u003C\/h3\u003E\n\u003Cp\u003E\nAn important strategy for achieving high performance is tiering up code, which is picking the right code to further optimize within the engine. Intel contributed profile guided tiering to V8 that remembers tiering decisions from the past such that if a function was stably tiered up in the past, we eagerly tier it up on future runs. \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\nImproving garbage collection\n\u003C\/h3\u003E\n\u003Cp\u003E\nAnother area of changes that drove around 3% progression on Speedometer 3 was improvements around garbage collection. V8’s garbage collector has a \u003Ca href=\"https:\/\/queue.acm.org\/detail.cfm?id=2977741\"\u003Elong history of making use of renderer idle time\u003C\/a\u003E to avoid interfering with actual application code. The recent changes follow this spirit by extending existing mechanisms to prefer garbage collection in idle time on otherwise very active renderers where possible. Specifically, DOM finalization code that is run on reclaiming objects is now also run in idle time. Previously, such operations would compete with regular application code over CPU resources. In addition, V8 now supports a much more compact layout for objects that wrap DOM elements, i.e., all objects that are exposed to JavaScript frameworks. The compact layout reduces memory pressure and results in less time spent on garbage collection.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cem\u003EPosted by Thomas Nattestad, Chrome Product Manager\u003C\/em\u003E\n\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/7799096493389946023"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/7799096493389946023"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/06\/how-chrome-achieved-highest-score-ever.html","title":"How Chrome achieved the highest score ever on Speedometer 3"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjTQhp2W8dIjin6cG9FZFPANCCxZkFh9n1Nkn60O8XvgU4XVY_rq3ChNITmiJ1VG16BHnsxVijTYMc06SNA0VHjqfee6dqZLgfjazWxh7p1b3i-pj4thXDt3QyK3vWSpRgrTHaxiSFfPvc1YRDtdcBOorm85i53-FebJDWUXrJA4a_oMAYNbxjTFE0PPbJc\/s72-c\/Fast%20Curious_image.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-2966402891480312376"},"published":{"$t":"2024-06-03T10:24:00.000-07:00"},"updated":{"$t":"2024-06-03T10:24:28.723-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"Introducing Shared Memory Versioning to  improve slow interactions"},"content":{"type":"html","$t":"\u003Cp style=\"text-align: center;\"\u003E\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgULbG_V-g8EZnGGU7HOmjeHhtXqsFS5cXno21FsN1uucnkTMdlq9tL9rOoZW7fx5vqp6_nW3R5Ib4JJZxMr9zD-MVIqLuCyy8N6ZheCW4iYkI7unu2GX7mMG2PVHNkNrykjbgi5PUwurzRSbd89DP6k1hGe7hze6EKVAzo4XKO8b3NfiO4PRsnHNwMKBDa\/s400\/Fast%20Curious_image.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"166\" data-original-width=\"400\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgULbG_V-g8EZnGGU7HOmjeHhtXqsFS5cXno21FsN1uucnkTMdlq9tL9rOoZW7fx5vqp6_nW3R5Ib4JJZxMr9zD-MVIqLuCyy8N6ZheCW4iYkI7unu2GX7mMG2PVHNkNrykjbgi5PUwurzRSbd89DP6k1hGe7hze6EKVAzo4XKO8b3NfiO4PRsnHNwMKBDa\/s16000\/Fast%20Curious_image.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cem\u003E\u003Cbr \/\u003E\u003C\/em\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\n\u003Cem\u003EOn the Chrome team, we believe it’s not sufficient to be fast most of the time, we have to be fast all of the time. Today’s The Fast and the Curious post explores how we contributed to Core Web Vitals by surveying the field data of Chrome responding to user interactions across all websites, ultimately improving performance of the web. \u003C\/em\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nAs billions of people turn to the web to get things done every day, the browser becomes more responsible for hosting a multitude of apps at once, resource contention becomes a challenge. The multi-process Chrome browser contends for multiple resources: CPU and memory of course, but also its own queues of work between its internal services (in this article, the network service).\n\u003C\/p\u003E\n\u003Cp\u003E\nThis is why we’ve been focused on identifying and fixing \u003Ca href=\"https:\/\/web.dev\/articles\/inp\"\u003Eslow interactions\u003C\/a\u003E from Chrome users’ field data, which is the authoritative source when it comes to real user experiences. We gather this field data by recording anonymized Perfetto traces on Chrome Canary, and report them using a privacy-preserving filter.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhen looking at field data of slow interactions, one particular cause caught our attention: recurring synchronous calls to fetch the current site’s cookies from the network service. \n\u003C\/p\u003E\n\u003Cp\u003E\nLet’s dive into some history. \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cb\u003E\nCookies under an evolving web\n\u003C\/b\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nCookies have been part of the web platform since the very beginning. They are commonly created like this:\n\u003C\/p\u003E\n\n\n\n\u003Cpre class=\"prettyprint\"\u003E    document.cookie = \"user=Alice;color=blue\"\n\u003C\/pre\u003E\n\n\n\u003Cp\u003E\nAnd later retrieved like this:\u003Cbr \/\u003E\n\u003C\/p\u003E\n\n\n\n\u003Cpre class=\"prettyprint\"\u003E    \/\/ Assuming a `getCookie` helper method:\n    getCookie(\"user\", document.cookie)\n\u003C\/pre\u003E\n\n\n\u003Cp\u003E\nIts implementation was simple in single-process browsers, which kept the cookie jar in memory.\n\u003C\/p\u003E\n\u003Cp\u003E\nOver time, browsers became multi-process, and the process hosting the cookie jar became responsible for answering more and more queries. Because the Web Spec requires Javascript to fetch cookies synchronously, however, answering each \u003Ccode\u003Edocument.cookie\u003C\/code\u003E query is a blocking operation.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe operation itself is very fast, so this approach was generally fine, but under heavy load scenarios where multiple websites are requesting cookies (and other resources) from the network service, the queue of requests could get backed up.\n\u003C\/p\u003E\n\u003Cp\u003E\nWe discovered through field traces of slow interactions that some websites were triggering inefficient scenarios with cookies being fetched multiple times in a row. We landed additional metrics to measure how often a \u003Ccode\u003EGetCookieString()\u003C\/code\u003E IPC was redundant (same value returned as last time) across all navigations. We were astonished to discover that \u003Cstrong\u003E87% of cookie accesses were redundant\u003C\/strong\u003E and that, in some cases, this could happen hundreds of times per second.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe simple design of \u003Ccode\u003Edocument.cookie \u003C\/code\u003Ewas backfiring as JavaScript on the web was using it like a local value when it was really a remote lookup. Was this a classic computer science case of caching?! Not so fast! \n\u003C\/p\u003E\n\u003Cp\u003E\nThe web spec allows collaborating domains to modify each other’s cookies. Hence, a simple cache per renderer process didn’t work, as it would have prevented writes from propagating between such sites (causing stale cookies and, for example, unsynchronized carts in ecommerce applications).\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\nA new paradigm: Shared Memory Versioning\n\u003C\/h3\u003E\n\u003Cp\u003E\nWe solved this with a new paradigm which we called \u003Ca href=\"https:\/\/source.chromium.org\/chromium\/chromium\/src\/+\/main:mojo\/public\/cpp\/base\/shared_memory_version.h\"\u003EShared Memory Versioning\u003C\/a\u003E. The idea is that each value of \u003Ccode\u003Edocument.cookie\u003C\/code\u003E is now paired with a monotonically increasing version. Each renderer caches its last read of \u003Ccode\u003Edocument.cookie\u003C\/code\u003E alongside that version. The network service hosts the version of each \u003Ccode\u003Edocument.cookie\u003C\/code\u003E in shared memory. Renderers can thus tell whether they have the latest version without having to send an inter-process query to the network service.\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhl8OJ82Etmnlpmr2nRzeWSmYBk-2yRPAaDSrftFMxYp-hRkb8ZIxYzIMLG09c9iqHB-dD8UrLj3GaXio7rHjOOpLGY6YBmVYQaex21mqaTGFLSHJVMrUywbU13bvgNeVC0PxiT9sV3Wj33H0Rtr0rzOdHCJBzjQe1IGBjC-8uftmM_D5XBL0CoVMUPZMuU\/s7748\/Fast%20\u0026amp;%20Curious%20In-Line_Reduce%20cookies%20IPC_V2_HighRes.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"5251\" data-original-width=\"7748\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhl8OJ82Etmnlpmr2nRzeWSmYBk-2yRPAaDSrftFMxYp-hRkb8ZIxYzIMLG09c9iqHB-dD8UrLj3GaXio7rHjOOpLGY6YBmVYQaex21mqaTGFLSHJVMrUywbU13bvgNeVC0PxiT9sV3Wj33H0Rtr0rzOdHCJBzjQe1IGBjC-8uftmM_D5XBL0CoVMUPZMuU\/s16000\/Fast%20\u0026amp;%20Curious%20In-Line_Reduce%20cookies%20IPC_V2_HighRes.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003EThis reduced cookie-related inter-process messages by 80% and made \u003Ccode\u003Edocument.cookie\u003C\/code\u003E accesses 60% faster 🥳.\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\nHypothesis testing\n\u003C\/h3\u003E\n\u003Cp\u003E\nImproving an algorithm is nice, but what we ultimately care about is whether that improvement results in improving slow interactions for users. In other words, we need to test the hypothesis that stalled cookie queries were a significant cause of slow interactions.\n\u003C\/p\u003E\n\u003Cp\u003E\nTo achieve this, we used Chrome’s A\/B testing framework to study the effect and determined that it, combined with other improvements to reduce resource contention, improved the slowest interactions by approximately 5% on all platforms. This further resulted in more websites \u003Ca href=\"https:\/\/httparchive.org\/reports\/chrome-ux-report?start=2023_11_01\u0026amp;end=latest\u0026amp;view=list#cruxFastInp\"\u003Epassing Core Web Vitals\u003C\/a\u003E 🥳. All of this adds up to a more seamless web for users.\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiGnZvKinh7TK5YiwNx1HC6vzv5CCyKPJoRGhfRzZA0MlBLl-8ho5ciLI8WyFka6QcqmcRSWgMIjz-vsfsiLBWu-dYaZ7Df1j5Ow2YRB3PkQ-k7fjxsCcZ2oJpbjYKxK92pELqHWpcXw9PwaVn4wGSzgkIRj7DLMLZAAeEYkd8mYC8F4OOcJFiePTmsQp_G\/s1176\/Screenshot%202024-05-30%20at%2010.19.00%E2%80%AFAM.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"552\" data-original-width=\"1176\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiGnZvKinh7TK5YiwNx1HC6vzv5CCyKPJoRGhfRzZA0MlBLl-8ho5ciLI8WyFka6QcqmcRSWgMIjz-vsfsiLBWu-dYaZ7Df1j5Ow2YRB3PkQ-k7fjxsCcZ2oJpbjYKxK92pELqHWpcXw9PwaVn4wGSzgkIRj7DLMLZAAeEYkd8mYC8F4OOcJFiePTmsQp_G\/s16000\/Screenshot%202024-05-30%20at%2010.19.00%E2%80%AFAM.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003E\u003Ci\u003E\u003Cspan style=\"font-size: x-small;\"\u003ETimeline of the weighted average of the slowest interactions across the web on Chrome as this was released to 1% (Nov), 50% (Dec), and then all users (Feb).\u003C\/span\u003E\u003C\/i\u003E\u003C\/p\u003E\u003Cdiv\u003EOnward to a seamless web!\u003C\/div\u003E\n\u003Cp\u003E\n\u003Cem\u003EBy Gabriel Charette, Olivier Li Shing Tat-Dupuis, Carlos Caballero Grolimund, and François Doray, from the Chrome engineering team\u003C\/em\u003E\n\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2966402891480312376"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2966402891480312376"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/06\/introducing-shared-memory-versioning-to.html","title":"Introducing Shared Memory Versioning to  improve slow interactions"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgULbG_V-g8EZnGGU7HOmjeHhtXqsFS5cXno21FsN1uucnkTMdlq9tL9rOoZW7fx5vqp6_nW3R5Ib4JJZxMr9zD-MVIqLuCyy8N6ZheCW4iYkI7unu2GX7mMG2PVHNkNrykjbgi5PUwurzRSbd89DP6k1hGe7hze6EKVAzo4XKO8b3NfiO4PRsnHNwMKBDa\/s72-c\/Fast%20Curious_image.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-4730101027872135523"},"published":{"$t":"2024-05-30T09:45:00.000-07:00"},"updated":{"$t":"2024-10-10T10:54:10.313-07:00"},"title":{"type":"text","$t":"Manifest V2 phase-out begins"},"content":{"type":"html","$t":"\n   \u003Ctd\u003E\u003Cem\u003EUpdate (10\/10\/2024): We’ve started disabling extensions still using Manifest V2 in Chrome stable. Read more details in the  \u003Ca href=\"https:\/\/developer.chrome.com\/docs\/extensions\/develop\/migrate\/mv2-deprecation-timeline\"\u003EMV2 support timeline documentation\u003C\/a\u003E.\u003C\/em\u003E\n\u003C\/p\u003E\n   \u003C\/td\u003E\n\n\u003Cp\u003E\n\n    In November 2023, we \u003Ca href=\"https:\/\/developer.chrome.com\/blog\/resuming-the-transition-to-mv3\"\u003Eshared a timeline\u003C\/a\u003E for the phasing out of Manifest V2 extensions in Chrome. Based on the progress and feedback we’ve seen from the community, we’re now ready to roll out these changes as scheduled.\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    We’ve always \u003Ca href=\"https:\/\/security.googleblog.com\/2019\/06\/improving-security-and-privacy-for.html\"\u003Ebeen clear\u003C\/a\u003E that the goal of Manifest V3 is to protect existing functionality while improving the security, privacy, performance and trustworthiness of the extension ecosystem as a whole.  We appreciate the collaboration and feedback from the community that has allowed us - and continues to allow us - to constantly improve the extensions platform.\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    \u003Cstrong\u003EAddressing community feedback\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    We understand migrations of this magnitude can be challenging, which is why we’ve listened to developer feedback and spent years refining Manifest V3 to support the innovation happening across the extensions community. This included adding support for user scripts and introducing offscreen documents to allow extensions to use DOM APIs from a background context. Based on input from the extension community, we also increased the number of rulesets for declarativeNetRequest, allowing extensions to bundle up to 330,000 static rules and dynamically add a further 30,000. You can find more detail in our \u003Ca href=\"https:\/\/developer.chrome.com\/docs\/extensions\/develop\/concepts\/content-filtering\"\u003Econtent filtering guide\u003C\/a\u003E.\u0026nbsp;\u003C\/p\u003E\u003Cp\u003EThis month, we made the transition even easier for extensions using declarativeNetRequest  with the launch of \u003Ca href=\"https:\/\/developer.chrome.com\/blog\/extensions-skip-review-eligible-changes\"\u003Ereview skipping for safe rule updates\u003C\/a\u003E. If the only changes are for safe modifications to an extension’s static rule list for declarativeNetRequest, Chrome will approve the update in minutes. Coupled with the \u003Ca href=\"https:\/\/developer.chrome.com\/blog\/chrome-webstore-rollback\"\u003Elaunch of version roll back\u003C\/a\u003E last month, developers now have greater control over how their updates are deployed.\u003C\/p\u003E\n\u003Cp\u003E\n\n    \u003Cstrong\u003EEcosystem progress  \u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    After we addressed the top issues and feature gaps blocking migration last year, we saw an acceleration of extensions migrating successfully to Manifest V3. Over the past year, we’ve even been able to invite some developers - such as Eyeo, the makers of Adblock Plus - and GDE members like Matt Frisbie to share their experiences and insights with the community through \u003Ca href=\"https:\/\/developer.chrome.com\/blog\/eyeos-journey-to-testing-mv3-service%20worker-suspension?hl=en\"\u003Eguest posts\u003C\/a\u003E and \u003Ca href=\"https:\/\/www.youtube.com\/watch?v=8P-Sc8ZaViY\"\u003EYouTube videos\u003C\/a\u003E. \n\u003C\/p\u003E\n\u003Cp\u003E\n\n    Now, over 85% of actively maintained extensions in the Chrome Web Store are running Manifest V3, and the top content filtering extensions all have Manifest V3 versions available - with options for users of AdBlock, Adblock Plus, uBlock Origin and AdGuard.\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    \u003Cstrong\u003EWhat to expect next\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    Starting on June 3 on the Chrome Beta, Dev and Canary channels, if users still have Manifest V2 extensions installed, some will start to see a warning banner when visiting their extension management page - chrome:\/\/extensions - informing them that some (Manifest V2) extensions they have installed will soon no longer be supported. At the same time, extensions with the Featured badge that are still using Manifest V2 will lose their badge. \n\u003C\/p\u003E\n\u003Cp\u003E\n\n    This will be followed gradually in the coming months by the disabling of those extensions. Users will be directed to the Chrome Web Store, where they will be recommended Manifest V3 alternatives for their disabled extension. For a short time after the extensions are disabled, users will still be able to turn their Manifest V2 extensions back on, but over time, this toggle will go away as well.\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    Like any big launches, all these changes will begin in pre-stable channel builds of Chrome first – Chrome Beta, Dev, and Canary. The changes will be rolled out over the coming months to Chrome Stable, with the goal of completing the transition by the beginning of next year. Enterprises using the \u003Ca href=\"https:\/\/chromeenterprise.google\/policies\/#ExtensionManifestV2Availability\"\u003EExtensionManifestV2Availability\u003C\/a\u003E policy will be exempt from any browser changes until June 2025.\n\u003C\/p\u003E\n\u003Cp\u003E\n\n    We’ve shared more information about the process in our recent \u003Ca href=\"https:\/\/www.youtube.com\/watch?v=hvxOW21na48\"\u003EChrome extensions Google I\/O talk\u003C\/a\u003E. If you have any additional questions, don’t hesitate to reach out via the Chromium extensions mailing list.\n\u003C\/p\u003E\n\n\u003Cspan class=\"post-author\"\u003EPosted by David Li, Product Manager, Chrome Extensions\u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/4730101027872135523"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/4730101027872135523"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/05\/manifest-v2-phase-out-begins.html","title":"Manifest V2 phase-out begins"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-2723696483376984731"},"published":{"$t":"2024-05-29T09:08:00.000-07:00"},"updated":{"$t":"2024-05-29T09:08:33.277-07:00"},"title":{"type":"text","$t":"Multi-tasking with Minimized Custom Tabs"},"content":{"type":"html","$t":"\u003Cp\u003E\nIn the latest release of Chrome, we're introducing \u003Ca href=\"https:\/\/developer.chrome.com\/docs\/android\/custom-tabs#:~:text=Users%20can%20minimize,Chrome%20122%20Beta.\"\u003EMinimized Custom Tabs\u003C\/a\u003E, a feature that allows users to effortlessly transition between native app and web content. With a simple tap on the down button in the Chrome Custom Tabs toolbar, users can minimize a Custom Tab into a compact, floating picture-in-picture window. This seamless integration enables multi-tasking across surfaces, enhancing the in-app web browsing experience. By tapping on the floating window, users can easily maximize the tab, restoring it to its original size.\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiKB-vt3k1oWC8dnOgKzw3mthZikPMXJnYOwbL01KoivsRt69r98CeEjTv0TeAFjfCHdCx6WoOaoXiDECWg5EHgYoUjxQxQTm9aFaSK-AyUFb6w6EyASeQiM2RVfJgm5mgw6haiQYbspQuOQlcTlYcVFo709bmtC2skBgSA9XZJpvhoPDViNTxOkaDQ6IUD\/s1228\/Minimixed%20Custom%20Tabs.gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg alt=\"Minimize a Chrome Custom Tab to interact with the background app\" border=\"0\" data-original-height=\"920\" data-original-width=\"1228\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiKB-vt3k1oWC8dnOgKzw3mthZikPMXJnYOwbL01KoivsRt69r98CeEjTv0TeAFjfCHdCx6WoOaoXiDECWg5EHgYoUjxQxQTm9aFaSK-AyUFb6w6EyASeQiM2RVfJgm5mgw6haiQYbspQuOQlcTlYcVFo709bmtC2skBgSA9XZJpvhoPDViNTxOkaDQ6IUD\/s16000\/Minimixed%20Custom%20Tabs.gif\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\nHow to get started\n\u003C\/h3\u003E\n\u003Cp\u003E\nBecause this change happens at the browser level, developers who use Chrome Custom Tabs will see this change automatically applied starting with Chrome version M124. End users will see the Minimize icon in the Chrome Custom Tab toolbar. \n\u003C\/p\u003E\n\u003Cp\u003E\nPlease note that this is a change in Chrome, and we hope other browsers will adopt similar functionality.\n\u003C\/p\u003E\n\u003Cp\u003E\u003Ci\u003E\nPosted by Victor Gallet, Senior Product Manager\n\u003C\/i\u003E\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2723696483376984731"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2723696483376984731"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/05\/multi-tasking-with-minimized-custom-tabs.html","title":"Multi-tasking with Minimized Custom Tabs"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiKB-vt3k1oWC8dnOgKzw3mthZikPMXJnYOwbL01KoivsRt69r98CeEjTv0TeAFjfCHdCx6WoOaoXiDECWg5EHgYoUjxQxQTm9aFaSK-AyUFb6w6EyASeQiM2RVfJgm5mgw6haiQYbspQuOQlcTlYcVFo709bmtC2skBgSA9XZJpvhoPDViNTxOkaDQ6IUD\/s72-c\/Minimixed%20Custom%20Tabs.gif","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-3770039990353380888"},"published":{"$t":"2024-05-23T10:19:00.000-07:00"},"updated":{"$t":"2024-05-23T10:24:01.941-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"chrome security"}],"title":{"type":"text","$t":"Advancing Our Amazing Bet on Asymmetric Cryptography"},"content":{"type":"html","$t":"\u003Cspan id=\"docs-internal-guid-f8bc9dc7-7fff-f0d8-2adc-75b663a17b8a\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003C\/span\u003E\n\u003Cp\u003E\n\nGoogle and many other organizations, such as \u003Ca href=\"https:\/\/csrc.nist.gov\/projects\/post-quantum-cryptography\"\u003ENIST\u003C\/a\u003E, \u003Ca href=\"https:\/\/datatracker.ietf.org\/group\/tls\/about\/\"\u003EIETF\u003C\/a\u003E, and \u003Ca href=\"https:\/\/www.nsa.gov\/Press-Room\/News-Highlights\/Article\/Article\/3148990\/nsa-releases-future-quantum-resistant-qr-algorithm-requirements-for-national-se\/\"\u003ENSA\u003C\/a\u003E, believe that migrating to post-quantum cryptography is important due to the large risk posed by a \u003Ca href=\"https:\/\/media.defense.gov\/2021\/Aug\/04\/2002821837\/-1\/-1\/1\/Quantum_FAQs_20210804.PDF\"\u003Ecryptographically-relevant quantum computer\u003C\/a\u003E (CRQC). In \u003Ca href=\"https:\/\/blog.chromium.org\/2023\/08\/protecting-chrome-traffic-with-hybrid.html\"\u003EAugust\u003C\/a\u003E, we posted about how Chrome Security is working to protect users from the risk of future quantum computers by leveraging a new form of \u003Ca href=\"https:\/\/datatracker.ietf.org\/doc\/draft-tls-westerbaan-xyber768d00\/\"\u003Ehybrid post-quantum cryptographic key \u003C\/a\u003Eexchange, Kyber (ML-KEM)\u003Csup id=\"fnref1\"\u003E\u003Ca href=\"#fn1\" rel=\"footnote\"\u003E1\u003C\/a\u003E\u003C\/sup\u003E. We’re happy to announce that we have enabled the latest Kyber draft specification by default for TLS 1.3 and QUIC on all desktop Chrome platforms as of Chrome 124.\u003Csup id=\"fnref2\"\u003E\u003Ca href=\"#fn2\" rel=\"footnote\"\u003E2\u003C\/a\u003E\u003C\/sup\u003E This rollout revealed a number of previously-existing bugs in several TLS middlebox products. To assist with the deployment of fixes, Chrome is offering a temporary \u003Ca href=\"https:\/\/chromeenterprise.google\/policies\/#PostQuantumKeyAgreementEnabled\"\u003Eenterprise policy to opt-out\u003C\/a\u003E.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nLaunching opportunistic quantum-resistant key exchange is part of \u003Ca href=\"https:\/\/bughunters.google.com\/blog\/5108747984306176\/google-s-threat-model-for-post-quantum-cryptography\"\u003EGoogle’s broader strategy\u003C\/a\u003E to prioritize deploying post-quantum cryptography in systems \u003Cem\u003Etoday\u003C\/em\u003E that are at risk if an adversary has access to a quantum computer \u003Cem\u003Ein the future\u003C\/em\u003E. We believe that it’s important to inform standards with real-world experience, by implementing drafts and iterating based on feedback from implementers and early adopters. This iterative approach was a key part of developing QUIC and TLS 1.3. It’s part of why we’re launching this draft version of Kyber, and it informs our future plans for post-quantum cryptography.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nChrome’s post-quantum strategy prioritizes quantum-resistant key exchange in HTTPS, and increased \u003Ca href=\"https:\/\/www.chromium.org\/Home\/chromium-security\/root-ca-policy\/moving-forward-together\/\"\u003Eagility\u003C\/a\u003E in certificates from the Web PKI. While PKI agility may appear somewhat unrelated, its absence has contributed to significant delays in past cryptographic transitions and will continue to do so until we find a viable solution in this space. A more agile Web PKI is required to enable a secure and reliable transition to post-quantum cryptography on the web.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nTo understand this, let’s take a look at HTTPS and the current state of post-quantum cryptography. In the context of HTTPS, cryptography is primarily used in three different ways:\n\n\u003C\/p\u003E\n\n\u003Cul\u003E\n\n\n\u003Cli\u003E\u003Cstrong\u003ESymmetric Encryption\/Decryption.\u003C\/strong\u003E HTTP is transmitted as data inside a TLS connection using an authenticated cipher (AEAD) such as AES-GCM. These algorithms are \u003Ca href=\"https:\/\/words.filippo.io\/dispatches\/post-quantum-age\/\"\u003Ebroadly considered safe\u003C\/a\u003E against quantum cryptanalysis and can remain in place.\n\n\n\u003C\/li\u003E\u003Cli\u003E\u003Cstrong\u003EKey Exchange.\u003C\/strong\u003E Symmetric cryptography requires a secret key. Key exchange is a form of asymmetric cryptography in which two parties can mutually generate a shared secret key over a public channel. This secret key can then be used for symmetric encryption and decryption. All current forms of asymmetric key exchange standardized for use in TLS are vulnerable to quantum cryptanalysis. \n\n\n\u003C\/li\u003E\u003Cli\u003E\u003Cstrong\u003EAuthentication\u003C\/strong\u003E. In HTTPS, authentication is achieved primarily through the use of digital signatures, which are used to convey server identity, handshake authentication, and transparency for certificate issuance. All of the digital signature and public key algorithms standardized for authentication in TLS are vulnerable to quantum cryptanalysis.\n\n\u003C\/li\u003E\n\n\u003C\/ul\u003E\n\n\u003Cp\u003E\n\nThis results in two separate quantum threats to HTTPS.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nThe first is the threat to traffic being generated \u003Cem\u003Etoday\u003C\/em\u003E. An adversary could store encrypted traffic now, wait for a CRQC to be practical, and then use it to decrypt the traffic after the fact. This is commonly known as a \u003Ca href=\"https:\/\/en.wikipedia.org\/wiki\/Harvest_now,_decrypt_later\"\u003Estore-now-decrypt-later\u003C\/a\u003E attack. This threat is relatively urgent, since it doesn’t matter when a CRQC is practical—the threat comes from storing encrypted data \u003Cem\u003Enow\u003C\/em\u003E. Defending against this attack requires the key exchange to be quantum resistant. Launching Kyber in Chrome enables servers to mitigate store-now-decrypt-later attacks.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nThe second threat is that \u003Cem\u003Efuture\u003C\/em\u003E traffic is vulnerable to impersonation by a quantum computer. Once a CRQC actually exists, it could be used to break the asymmetric cryptography used for authentication in HTTPS. To defend against impersonation from a CRQC, we need to migrate all of the asymmetric cryptography used for authentication to post-quantum variants. However, breaking authentication only affects traffic generated \u003Cstrong\u003Eafter\u003C\/strong\u003E the availability of CRQCs. This is because breaking authentication on a recorded transcript doesn’t help the attacker impersonate either party—the conversation has already finished. \n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nIn other words, there’s no store-now-decrypt-later equivalent for authentication, and so while migrating key exchange and authentication to post-quantum variants are both \u003Cem\u003Eimportant\u003C\/em\u003E, migrating authentication is less \u003Cem\u003Eurgent\u003C\/em\u003E than key exchange. This is good, because there are a \u003Ca href=\"https:\/\/dadrian.io\/blog\/posts\/pqc-signatures-2024\/\"\u003Evariety of challenges\u003C\/a\u003E for migrating to post-quantum authentication. Specifically, size.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nPost-quantum cryptography is big compared to the pre-quantum cryptographic algorithms used in HTTPS. A Kyber key exchange is ~1KB transmitted per peer, whereas an X25519 key exchange is only 32 bytes per peer, an over 30x increase. The actual key exchange operation in Kyber is quite fast. Transmitting Kyber keys is quite slow. The extra size from Kyber causes the TLS ClientHello to be split into two packets, resulting in a 4% median latency increase to all TLS handshakes in Chrome on desktop. On desktop platforms, this, with HTTP\/2 and HTTP\/3 connection reuse, is not large enough to be noticeable in \u003Ca href=\"https:\/\/web.dev\/articles\/vitals\"\u003ECore Web Vitals\u003C\/a\u003E. Unfortunately, it is noticeable on Android, where Internet connections are often lower bandwidth and higher latency, and so we have not yet launched on Android.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nThe size issues are even worse for authentication. ML-DSA (Dilithium) keys and signatures are ~40X the size of ECDSA keys and signatures. A typical TLS connection today uses two public keys and five signatures to fulfill all of the authentication requirements. A naive swap to ML-DSA would add ~14KB to the TLS handshake. \u003Ca href=\"https:\/\/blog.cloudflare.com\/pq-2024\"\u003ECloudflare anticipates\u003C\/a\u003E it would increase latency by 20-40%, and we’ve seen that a single kilobyte was already impactful.  Instead, we need alternate approaches to authentication in HTTPS that provide the desired properties and transmit fewer signatures and public keys.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\n\t\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nWe think the important next step for quantum-resistant authentication in HTTPS is to focus on enabling \u003Cem\u003Etrust anchor agility\u003C\/em\u003E. Historically, the public Web PKI could not deploy new algorithms quickly. This is because most site operators typically provision a single certificate for all supported clients and browsers. This certificate must both be issued from a trust hierarchy that is trusted by every browser or client the site operator supports, and the certificate must be compatible with each of these clients.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nThe single certificate model makes it difficult for the Web PKI to evolve. As security requirements change, site operators may find that there is no longer an intersection between certificates trusted by deployed clients, certificates trusted by new clients, algorithms supported by deployed clients, and algorithms supported by new clients (all crossed with every separate browser and root store). These clients may range from different browsers, older versions of those browsers not receiving updates, all the way to applications on smart TVs or payment terminals. As requirements diverge, site operators have to choose between security for new clients, and compatibility with older clients.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nThis conflict, in turn, limits new clients making PKI changes to improve user security, such as transitioning to post-quantum. Under a single-certificate deployment model, the newest clients cannot diverge too far from the oldest clients, or server operators will be left with no way to maintain compatibility. We propose to solve this by moving to a \u003Cem\u003Emulti-certificate deployment model\u003C\/em\u003E, where servers may be provisioned with multiple certificates, and automatically send the correct one to each client.   This enables trust anchor agility, and allows clients to evolve at different rates. Clients who are up to date and reliably receiving updates could access the authentication mechanisms best suited for the Internet as it evolves without being hamstrung by old clients no longer receiving updates. Certification authorities and trust stores could introduce new post-quantum trust anchors without needing to wait for the slowest actor to add support. This would drastically simplify the post-quantum transition since it also enables the seamless addition and removal of hierarchies using experimental post-quantum authentication methods.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nAt first glance, TLS may appear to have trust anchor agility by way of \u003Cem\u003Ecross-signatures\u003C\/em\u003E and \u003Cem\u003Esignature algorithm negotiation\u003C\/em\u003E. However, neither of these mechanisms provide true trust anchor agility, nor were they intended to. \n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nA cross-signature is when a CA creates two different certificates for a single subject and public key pair, but with different issuers and signatures. The first certificate is issued and signed as usual, by the CA itself. The second is issued and signed by a different trust hierarchy, often by a different organization. For example, the original Let’s Encrypt intermediate certificate \u003Ca href=\"https:\/\/letsencrypt.org\/2023\/07\/10\/cross-sign-expiration.html\"\u003Eexisted in two forms\u003C\/a\u003E\u003Csup id=\"fnref3\"\u003E\u003Ca href=\"#fn3\" rel=\"footnote\"\u003E3\u003C\/a\u003E\u003C\/sup\u003E. The “regular” intermediate was signed by the Let’s Encrypt root, whereas the “cross-signed” intermediate was signed by IdenTrust. This approach of cross-signing a new PKI hierarchy with an older, more broadly available PKI hierarchy allows a new CA to bootstrap its trust on old devices, so long as the older devices support the signing algorithm. Cross-signatures, however, rely on significant cooperation among often competing CAs, and may not be suitable for when different clients have different needs. This limits when site operators can use cross-signs. Additionally, devices that do not support a new algorithm will still need to be updated to be able to use the new signing algorithm in the newer certificate, regardless of whether or not it is cross-signed. \n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nSignature algorithm negotiation allows TLS peers to agree on the algorithm to be used for the handshake signature. This algorithm needs to correspond with the key type used in the certificate. Endpoints can infer that if the peer supports an algorithm such as ECDSA for the handshake signature, it must also support ECDSA certificates. This value can be used to multiplex between an RSA-based chain and a smaller ECDSA-based chain. For example, Google’s RSA-based large compatibility chain is four certificates and ~4.1KB, whereas the shortest ECDSA-based chain is three certificates and only ~1.7KB\u003Csup id=\"fnref4\"\u003E\u003Ca href=\"#fn4\" rel=\"footnote\"\u003E4\u003C\/a\u003E\u003C\/sup\u003E. \n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nSignature algorithm negotiation does not provide trust anchor agility. While the signature algorithm information implies algorithm support, it provides no information about what trust anchors a client actually trusts. A client can support ECDSA, but not have the latest ECDSA root certificate from a specific CA. Due to the wide variety of trust stores in use, many organizations may still often need to be conservative in when they serve ECDSA certificates and may need to provide a longer, cross-signed chain for maximum compatibility.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nNeither cross-signatures nor signature algorithm negotiation are solutions to migrating to post-quantum cryptography for authentication. Cross-signatures do not help with new algorithms, and signature algorithm negotiation is solely about negotiating algorithms, not providing information about trust anchors. We expect a gradual transition to post-quantum cryptography. Inferring information about the contents of the trust store from the result of signature algorithm negotiation risks ossifying to a specific version of a specific trust store, rather than purely being used for algorithm negotiation.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nInstead, to introduce agility to TLS we need an explicit mechanism for \u003Cem\u003Etrust anchor negotiation\u003C\/em\u003E, to allow the client and server to efficiently determine which certificate to use.  At the November 2023 IETF meeting in Prague, Chrome proposed “\u003Ca href=\"https:\/\/github.com\/davidben\/tls-trust-expressions\"\u003ETrust Expressions\u003C\/a\u003E” as a mechanism for trust anchor negotiation in TLS. Chrome is currently seeking community input on Trust Expressions via the IETF process. We think the goal of being able to cleanly deploy multiple certificates to handle a range of clients is much more important than the specific mechanisms of the proposal.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nFrom there, we can explore more efficient ways to authenticate servers, such as \u003Ca href=\"https:\/\/github.com\/davidben\/merkle-tree-certs\"\u003EMerkle Tree Certificates\u003C\/a\u003E. We view introducing some mechanism for trust anchor agility as a necessity for efficient post-quantum authentication. Experimentation will be extremely important as proposals are developed. Agility also enables using different solutions in different contexts, rather than sending extra data for the lowest-common denominator— solutions like Merkle Tree Certificates and \u003Ca href=\"https:\/\/www.ietf.org\/archive\/id\/draft-davidben-tls-trust-expr-02.html#name-intermediate-elision\"\u003Eintermediate elision\u003C\/a\u003E require up-to-date clients.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nGiven these constraints, priorities, and \u003Ca href=\"https:\/\/dadrian.io\/blog\/posts\/pqc-not-plaintext\/\"\u003Erisks\u003C\/a\u003E, we think agility is more important than defining exactly what a post-quantum PKI will look like at this time. We recommend against \u003Cem\u003Eimmediately\u003C\/em\u003E standardizing ML-DSA in X.509 for use in the \u003Cem\u003Epublic\u003C\/em\u003E Web PKI via the \u003Ca href=\"https:\/\/cabforum.org\/\"\u003ECA\/Browser Forum\u003C\/a\u003E. We expect that ML-DSA, once NIST completes standardization, will play a part in a post-quantum Web PKI, but we’re focusing on agility first. This does not preclude introducing ML-DSA in X.509 as an option for private PKIs, which may be operating on more strict post-quantum timelines and have fewer constraints around certificate size, handshake latency, issuance transparency, and unmanaged endpoints.\n\n\u003C\/p\u003E\n\n\u003Cp\u003E\n\nUltimately, we think that any approach to post-quantum authentication has the same first requirement—a migration mechanism for clients to opt-in to post-quantum secure authentication mechanisms when servers support it. Post-quantum authentication presents significant challenges to the Web ecosystem, but we believe trust anchor agility will enable us to overcome them and lead to a more secure, robust, and performant post-quantum web.\n\n\u003C\/p\u003E\n\n\n\u003C!--Footnotes themselves at the bottom.--\u003E\n\n\n\u003Ch2\u003ENotes\u003C\/h2\u003E\n\n\u003Cdiv class=\"footnotes\"\u003E\n\n\u003Chr \/\u003E\n\n\u003Col\u003E\u003Cli id=\"fn1\"\u003E\n\n\u003Cp\u003E\n\n     The draft is X25519Kyber768, which is a combination of the pre-quantum algorithm X25519, and the post-quantum algorithm Kyber 768. Kyber is being renamed to ML-KEM, however for the purposes of this post, we will use “Kyber” to refer to the hybrid algorithm defined for TLS.\u0026nbsp;\u003Ca href=\"#fnref1\" rev=\"footnote\"\u003E↩\u003C\/a\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli id=\"fn2\"\u003E\n\n\u003Cp\u003E\n\n     As the standards from NIST and IETF are not yet complete, this will be later removed and replaced with the final versions. At this stage of standardization, we expect only early adopters to use the primitives.\u0026nbsp;\u003Ca href=\"#fnref2\" rev=\"footnote\"\u003E↩\u003C\/a\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli id=\"fn3\"\u003E\n\n\u003Cp\u003E\n\n     It actually exists in considerably more than two forms, but from an organizational perspective, there are versions that signed by other Let’s Encrypt certificates, and a version that is signed by IdenTrust, which is a completely separate certification authority from Let’s Encrypt.\u0026nbsp;\u003Ca href=\"#fnref3\" rev=\"footnote\"\u003E↩\u003C\/a\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli id=\"fn4\"\u003E\n\n\u003Cp\u003E\n\n     The chain length includes the root certificate and leaf certificate. The byte numbers are what is transmitted over the wire, and so they include the leaf certificate but not the root certificate.\u0026nbsp;\u003Ca href=\"#fnref4\" rev=\"footnote\"\u003E↩\u003C\/a\u003E\n\n\u003C\/p\u003E\u003C\/li\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\u003C\/p\u003E\u003C\/ol\u003E\u003C\/div\u003E\n\u003Cp\u003E\u003Ci\u003E\nPosted by David Adrian, Bob Beck, David Benjamin and Devon O'Brien\n\u003C\/i\u003E\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/3770039990353380888"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/3770039990353380888"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/05\/advancing-our-amazing-bet-on-asymmetric.html","title":"Advancing Our Amazing Bet on Asymmetric Cryptography"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-8476093308693996961"},"published":{"$t":"2024-04-29T09:02:00.000-07:00"},"updated":{"$t":"2024-04-29T09:29:39.905-07:00"},"title":{"type":"text","$t":"How Machine Learning improved the Chrome address bar on Windows, Mac and ChromeOS "},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhClkamg6fdrq2ffTZT2aDWBPizrm58hqPyzbqm9TUgytSPgOfdsVMfvAhEZ84pGE0hSWbDGTJAyOwnBy6QjggaL9HjozOup7Ytwylo54W7TWsgv1Z-1WQuQvYsdCanl5Lbf2u1glY7K7SHREWTdQCHUl8EysyG-MuwAL0PHfXM_CEYHU7PNESVPSPWZatg\/s2500\/ML_Scoring_Chromium_Blog_Header.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"938\" data-original-width=\"2500\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhClkamg6fdrq2ffTZT2aDWBPizrm58hqPyzbqm9TUgytSPgOfdsVMfvAhEZ84pGE0hSWbDGTJAyOwnBy6QjggaL9HjozOup7Ytwylo54W7TWsgv1Z-1WQuQvYsdCanl5Lbf2u1glY7K7SHREWTdQCHUl8EysyG-MuwAL0PHfXM_CEYHU7PNESVPSPWZatg\/s16000\/ML_Scoring_Chromium_Blog_Header.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\u003Cp\u003E\nUsed billions of times each day, the Chrome address bar (which we call the “\u003Ca href=\"https:\/\/www.google.com\/url?q=https:\/\/www.google.com\/googlebooks\/chrome\/small_18.html\u0026amp;sa=D\u0026amp;source=docs\u0026amp;ust=1714007392139474\u0026amp;usg=AOvVaw3CEYSj2EfF_qN9qSllH3s7\"\u003Eomnibox\u003C\/a\u003E”) is a powerful tool to make searching the web easier, whether you’re trying to quickly \u003Ca href=\"https:\/\/blog.google\/products\/chrome\/search-your-tabs-bookmarks-and-history-in-the-chrome-address-bar\/\"\u003Efind your tabs or bookmarks\u003C\/a\u003E, return to a web page you \u003Ca href=\"https:\/\/blog.google\/products\/chrome\/chrome-address-bar-updates\/\"\u003Epreviously visited\u003C\/a\u003E, or \u003Ca href=\"https:\/\/blog.google\/products\/chrome\/google-chrome-update-august-2023\/\"\u003Efind information\u003C\/a\u003E.\n\u003C\/p\u003E\n\u003Cp\u003E\nWith the latest release of Chrome (M124), we’re integrating machine learning models to power the Chrome omnibox on desktop, so that web page suggestions are more precise and relevant to you. In the future, these models will also help improve the relevance scoring of search suggestions. Here’s a closer look at some of the important insights that help our team build this integration and where we hope the new model takes us.    \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EHow we got here\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nAs the engineering lead for the team responsible for the omnibox, every launch feels special, but this one is truly near and dear to my heart. When I first started working on the Chrome omnibox, I asked around for ideas on how we could make it better for users. The number one answer I heard was, \"improve the scoring system.\" The issue wasn't that the scoring was bad. In fact, the omnibox often feels magical in its ability to surface the URL or query you want! The issue was that it was \u003Cem\u003Einflexible\u003C\/em\u003E. A set of hand-built and hand-tuned formulas did the job well, but were difficult to improve or to adapt to new scenarios. As a result, the scoring system went largely untouched for a long time.\n\u003C\/p\u003E\n\u003Cp\u003E\nFor most of that time, an ML-trained scoring model was the obvious path forward. But it took many false starts to finally get here. Our inability to tackle this challenge for so long was due to the difficulty of replacing the core mechanism of a feature used literally billions of times every day. Software engineering projects are sometimes described as \"building the plane while flying it.\" This project felt more like \"replacing all the seats in every plane in the world while they're all flying.\" The scale was enormous and the changes are felt directly by every user.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis ambitious undertaking would not have been possible without the work of such a talented and dedicated team. There were bumps in the road, walls we had to break through, and unanticipated issues that slowed us down, but the team was driven by a sincere belief in the impact of getting this right for our users.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EA Surprising Insight\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nOne of the fun things about working with ML systems is that the training considers \u003Cem\u003Eall\u003C\/em\u003E the data at a scale that would be difficult to impossible for any individual person or team. And that can lead to surprising insights. \n\u003C\/p\u003E\n\u003Cp\u003E\nThe coolest example of this phenomenon on this project was when we looked at the scoring curve of one particular signal: time since last navigation. The expectation with this signal is that the smaller it is (the more recently you've navigated to a particular URL), the bigger the contribution that signal should make towards a higher relevance score. \n\u003C\/p\u003E\n\u003Cp\u003E\nAnd that is, in fact, what the model learned. But when we looked closer, we noticed something surprising: when the time since navigation was very low (seconds instead of hours, days or weeks), the model was \u003Cem\u003Edecreasing\u003C\/em\u003E the relevance score. It turns out that the training data reflected a pattern where users sometimes navigate to a URL that was not what they really wanted and then immediately return to the Chrome omnibox and try again. In that case, the URL they just navigated to is almost certainly \u003Cem\u003Enot\u003C\/em\u003E what they want, so it should receive a low relevance score during this second attempt.\n\u003C\/p\u003E\n\u003Cp\u003E\nIn retrospect, this is obvious. And if we had not launched ML scoring, we definitely would have added a new rule to the old system to reflect this scenario. But before the training system observed and learned from this pattern, it never occurred to anyone that this might be happening.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EThe Future\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nWith the new ML models, we believe this will open up many new possibilities to improve the user experience by potentially incorporating new signals, like differentiating between time of the day to improve relevance. We want to explore training specialized versions of the model for particular environments: for example, mobile, enterprise or academic users, or perhaps different locales.\n\u003C\/p\u003E\n\u003Cp\u003E\nAdditionally, we observe that the way users interact with the Chrome omnibox changes over time and we believe the relevance scoring should change with them. With the new scoring system, we can now simply collect fresher signals, re-train, evaluate, and deploy new models periodically over time.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cem\u003E\u003Cspan\u003EBy Justin Donnelly, Chrome software engineer \u003C\/span\u003E\u003C\/em\u003E\n\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/8476093308693996961"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/8476093308693996961"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/04\/how-machine-learning-improved-chrome.html","title":"How Machine Learning improved the Chrome address bar on Windows, Mac and ChromeOS "}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhClkamg6fdrq2ffTZT2aDWBPizrm58hqPyzbqm9TUgytSPgOfdsVMfvAhEZ84pGE0hSWbDGTJAyOwnBy6QjggaL9HjozOup7Ytwylo54W7TWsgv1Z-1WQuQvYsdCanl5Lbf2u1glY7K7SHREWTdQCHUl8EysyG-MuwAL0PHfXM_CEYHU7PNESVPSPWZatg\/s72-c\/ML_Scoring_Chromium_Blog_Header.png","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-2078562971531065043"},"published":{"$t":"2024-04-02T09:06:00.000-07:00"},"updated":{"$t":"2024-04-02T09:06:17.376-07:00"},"title":{"type":"text","$t":"Fighting cookie theft using device bound sessions"},"content":{"type":"html","$t":"\u003Cp\u003E\nCookies – small files created by sites you visit – are fundamental to the modern web. They make your online experience easier by saving browsing information, so that sites can do things like keep you signed in and remember your site preferences. Due to their powerful utility, cookies are also a lucrative target for attackers.\n\u003C\/p\u003E\n\u003Cp\u003E\nMany users across the web are victimized by \u003Ca href=\"https:\/\/blog.google\/threat-analysis-group\/phishing-campaign-targets-youtube-creators-cookie-theft-malware\/\"\u003Ecookie theft malware\u003C\/a\u003E that gives attackers access to their web accounts. Operators of Malware-as-a-Service (MaaS) frequently use social engineering to spread cookie theft malware. These operators even convince users to bypass multiple warnings in order to land the malware on their device. The malware then typically exfiltrates all authentication cookies from browsers on the device to remote servers, enabling the attackers to curate and sell the compromised accounts. Cookie theft like this happens \u003Cem\u003Eafter\u003C\/em\u003E login, so it bypasses two-factor authentication and any other login-time reputation checks. It’s also difficult to mitigate via anti-virus software since the stolen cookies continue to work even after the malware is detected and removed. And because of the way cookies and operating systems interact, primarily on desktop operating systems, Chrome and other browsers cannot protect them against malware that has the same level of access as the browser itself. \n\u003C\/p\u003E\n\u003Cp\u003E\nTo address this problem, we’re prototyping a new web capability called Device Bound Session Credentials (DBSC) that will help keep users more secure against cookie theft. The project is being developed in the open at \u003Ca href=\"https:\/\/github.com\/WICG\/dbsc\"\u003Egithub.com\/WICG\/dbsc\u003C\/a\u003E with the goal of becoming an open web standard. \n\u003C\/p\u003E\n\u003Cp\u003E\nBy binding authentication sessions to the device, DBSC aims to disrupt the cookie theft industry since exfiltrating these cookies will no longer have any value. We think this will substantially reduce the success rate of cookie theft malware. Attackers would be forced to act locally on the device, which makes on-device detection and cleanup more effective, both for anti-virus software as well as for enterprise managed devices.\n\u003C\/p\u003E\n\u003Cp\u003E\nLearning from prior work, our goal is to build a technical solution that’s practical to deploy to all sites large and small, to foster industry support to ensure broad adoption, and to maintain user privacy.\n\u003C\/p\u003E\n\u003Ch2\u003ETechnical solution\u003C\/h2\u003E\n\n\n\u003Cp\u003E\nAt a high level, the DBSC API lets a server start a new session with a specific browser on a device. When the browser starts a new session, it creates a new public\/private key pair locally on the device, and uses the operating system to safely store the private key in a way that makes it hard to export. Chrome will use facilities such as Trusted Platform Modules (TPMs) for key protection, which are becoming more commonplace and are required for Windows 11, and we are looking at supporting \u003Ca href=\"https:\/\/techcommunity.microsoft.com\/t5\/windows-it-pro-blog\/advancing-key-protection-in-windows-using-vbs\/ba-p\/4050988\"\u003Esoftware-isolated solutions\u003C\/a\u003E as well.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe API allows a server to associate a session with this public key, as a replacement or an augmentation to existing cookies, and verify proof-of-possession of the private key throughout the session lifetime. To make this feasible from a latency standpoint and to aid migrations of existing cookie-based solutions, DBSC uses these keys to maintain the freshness of short-lived cookies through a dedicated DBSC-defined endpoint on the website. This happens out-of-band from regular web traffic, reducing the changes needed to legacy websites and apps. This ensures the session is still on the same device, enforcing it at regular intervals set by the server. For current implementation details please see the \u003Ca href=\"https:\/\/github.com\/WICG\/dbsc\/blob\/main\/README.md\"\u003Epublic explainer\u003C\/a\u003E. \n\u003C\/p\u003E\n\u003Ch2\u003EPreserving user privacy\u003C\/h2\u003E\n\n\n\u003Cp\u003E\nEach session is backed by a unique key and DBSC does not enable sites to correlate keys from different sessions on the same device, to ensure there's no persistent user tracking added. The user can delete the created keys at any time by deleting site data in Chrome settings. The out-of-band refresh of short-term cookies is only performed if a user is actively using the session (e.g. browsing the website).\n\u003C\/p\u003E\n\u003Cp\u003E\nDBSC doesn’t leak any meaningful information about the device beyond the fact that the browser thinks it can offer some type of secure storage. The only information sent to the server is the per-session public key which the server uses to certify proof of key possession later. \n\u003C\/p\u003E\n\u003Cp\u003E\nWe expect Chrome will initially support DBSC for roughly half of desktop users, based on the current hardware capabilities of users' machines. We are committed to developing this standard in a way that ensures it will not be abused to segment users based on client hardware. For example, we may consider supporting software keys for all users regardless of hardware capabilities. This would ensure that DBSC will not let servers differentiate between users based on hardware features or device state (i.e. if a device is \u003Ca href=\"https:\/\/www.android.com\/certified\/\"\u003EPlay Protect certified\u003C\/a\u003E or not).\n\u003C\/p\u003E\n\u003Cp\u003E\nDBSC will be fully aligned with \u003Ca href=\"https:\/\/developers.google.com\/privacy-sandbox\/3pcd\"\u003Ethe phase-out of third-party cookies in Chrome\u003C\/a\u003E. In third-party contexts, DBSC will have the same availability and\/or segmentation that third-party cookies will, as set by user preferences and other factors. This is to make sure that DBSC does not become a new tracking vector once third-party cookies are phased out, while also ensuring that such cookies can be fully protected in the meantime. If the user completely opts out of cookies, third-party cookies, or cookies for a specific site, this will disable DBSC in those scenarios as well.\n\u003C\/p\u003E\n\u003Ch2\u003EImproving user protection \u003C\/h2\u003E\n\n\n\u003Cp\u003E\nWe are currently experimenting with a DBSC prototype to protect some Google Account users running Chrome Beta. This is an early initiative to gauge the reliability, feasibility, and the latency of the protocol on a complex site, while also providing meaningful protection to our users. When it’s deployed fully, consumers and enterprise users will get upgraded security for their Google accounts under the hood automatically. We are also working to enable this technology for our Google Workspace and Google Cloud customers to provide another layer of account security.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis prototype is integrated with the way Chrome and Google Accounts work together, but is validating and informing all aspects of the public API we want to build.\n\u003C\/p\u003E\n\u003Ch2\u003EInterest outside Google\u003C\/h2\u003E\n\n\n\u003Cp\u003E\nMany server providers, identity providers (IdPs) such as Okta, and browsers such as Microsoft Edge have expressed interest in DBSC as they want to secure their users against cookie theft. We are engaging with all interested parties to make sure we can present a standard that works for different kinds of websites in a privacy preserving way.\n\u003C\/p\u003E\n\u003Ch2\u003EWhere to follow the progress\u003C\/h2\u003E\n\n\n\u003Cp\u003E\nDevelopment happens on \u003Ca href=\"https:\/\/github.com\/WICG\/dbsc\"\u003EGitHub\u003C\/a\u003E and we have published an \u003Ca href=\"https:\/\/github.com\/WICG\/dbsc\/wiki\/DBSC-timeline\"\u003Eestimated timeline\u003C\/a\u003E. This is where we will post announcements and updates to the expected timelines as needed. Our goal is to allow \u003Ca href=\"https:\/\/developer.chrome.com\/docs\/web-platform\/origin-trials\"\u003Eorigin trials\u003C\/a\u003E for all interested websites by the end of 2024. Please reach out if you'd like to get involved. We welcome feedback from all sources, either by opening a \u003Ca href=\"https:\/\/github.com\/WICG\/dbsc\/issues\"\u003Enew issue\u003C\/a\u003E or \u003Ca href=\"https:\/\/github.com\/WICG\/dbsc\/discussions\"\u003Estarting a discussion\u003C\/a\u003E on GitHub.\n\u003C\/p\u003E\n\u003Cspan class=\"post-author\"\u003EPosted by Kristian Monsen, Chrome Counter Abuse \u003C\/span\u003E\n"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2078562971531065043"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2078562971531065043"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/04\/fighting-cookie-theft-using-device.html","title":"Fighting cookie theft using device bound sessions"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-5329985167455533255"},"published":{"$t":"2024-03-11T09:00:00.000-07:00"},"updated":{"$t":"2024-03-11T09:09:54.039-07:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"Speedometer 3: Building a benchmark that represents the web"},"content":{"type":"html","$t":"\u003Cp style=\"text-align: center;\"\u003E\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiwhyphenhypheng0_39U6yzt-pOO8aVmKnuz6fn2Nk2Vx5Rs-ypGPUDRiOG4v8ItqlD_WLSRfku6utJy6luWI5iDOtwEor5v69en_XiWU-akxtTmCgR8Mm-6NfjW6weeEoXT6msXLmbxGzJ8ZvzKKOEjOv0SZH-RhXHKdHG7I_6TmE5hJq5VFSrXyUV5d8K7zE0KLYJg\/s564\/The%20Fast%20+%20The%20Curious%20Logo_Revised_Header.jpg\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"234\" data-original-width=\"564\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiwhyphenhypheng0_39U6yzt-pOO8aVmKnuz6fn2Nk2Vx5Rs-ypGPUDRiOG4v8ItqlD_WLSRfku6utJy6luWI5iDOtwEor5v69en_XiWU-akxtTmCgR8Mm-6NfjW6weeEoXT6msXLmbxGzJ8ZvzKKOEjOv0SZH-RhXHKdHG7I_6TmE5hJq5VFSrXyUV5d8K7zE0KLYJg\/s16000\/The%20Fast%20+%20The%20Curious%20Logo_Revised_Header.jpg\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp\u003E\n\u003Cem\u003EToday’s The Fast and the Curious post covers the \u003Ca href=\"https:\/\/browserbench.org\/announcements\/speedometer3\/\"\u003Erelease\u003C\/a\u003E of Speedometer 3.0 an upgraded browser benchmarking tool to optimize the performance of Web applications. \u003C\/em\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nIn collaboration with major web browser engines, Blink\/V8, Gecko\/SpiderMonkey, and WebKit\/JavaScriptCore, we’re excited to release \u003Ca href=\"https:\/\/browserbench.org\/Speedometer3.0\/\"\u003ESpeedometer 3.0\u003C\/a\u003E. Benchmarks, like Speedometer, are tools that can help browser vendors find opportunities to improve performance. Ideally, they simulate functionality that users encounter on typical websites, to ensure browsers can optimize areas that are beneficial to users.\n\u003C\/p\u003E\n\u003Cp\u003E\nLet’s dig into the new changes in Speedometer 3.0. \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EApplying a multi-stakeholder governance model\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nSince its initial release in \u003Ca href=\"https:\/\/webkit.org\/blog\/3395\/speedometer-benchmark-for-web-app-responsiveness\/\"\u003E2014\u003C\/a\u003E by the WebKit team, browser vendors have successfully used Speedometer to optimize their engines and improve user experiences on the web. Speedometer 2.0,  a result of a collaboration between Apple and Chrome, followed in \u003Ca href=\"https:\/\/webkit.org\/blog\/8063\/speedometer-2-0-a-benchmark-for-modern-web-app-responsiveness\/\"\u003E2018\u003C\/a\u003E, and it included an updated set of workloads that were more representative of the modern web at that time.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe web has changed a lot since 2018, and so has Speedometer in its latest release, Speedometer 3. This work has been based on a joint \u003Ca href=\"https:\/\/github.com\/WebKit\/Speedometer\/blob\/main\/Governance.md\"\u003Emulti-stakeholder governance model\u003C\/a\u003E to share work, and build a collaborative understanding of performance on the web to help drive browser performance in ways that help users. The goal of this collaborative project is to create a shared understanding of web performance so that improvements can be made to enhance the user experience.  Together, we were able to to improve how Speedometer captures and calculates scores, show more detailed results and introduce an even wider variety of workloads. This cross-browser collaboration introduced more diverse perspectives that enabled clearer insights into a broader set of web users and workflows, ensuring the newest version of Speedometer will help make the web better for everyone, regardless of which browser they use.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EWhy is building workloads challenging?\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nBuilding a reliable benchmark with representative tests and workloads is challenging enough. That task becomes even more challenging if it will be used as a tool to guide optimization of browser engines over multiple years. To develop the  Speedometer 3 benchmark, the \u003Ca href=\"https:\/\/developer.chrome.com\/aurora\"\u003EChrome Aurora\u003C\/a\u003E team, together with colleagues from other participating browser vendors, were tasked with finding new workloads  that accurately reflect what users experience across the vast, diverse and eclectic web of 2024 and beyond. \n\u003C\/p\u003E\n\u003Cp\u003E\nA few tests and workloads can’t simulate the entire web, but while building Speedometer 3 we have established some criteria for selecting ones that are critical to user’s experience. We are now closer to a representative benchmark than ever before. Let’s take a look at how Speedometer workloads evolved\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EHow did the workloads change?\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nSince the goal is to use workloads that are representative of the web today, we needed to take a look at the previous workloads used in Speedometer and determine what changes were necessary. We needed to decide which frameworks are still relevant, which apps needed updating and what types of work we didn’t capture in previous versions. In Speedometer 2, all workloads were variations of a todo app implemented in different JS frameworks. We found that, as the web evolved over the past six years, we missed out on various JavaScript and Browser APIs that became popular, and apps tend to be much larger and more complicated than before. As a result, we made changes to the list of frameworks we included and we added a wider variety of workloads that cover a broader range of APIs and features. \n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EFrameworks\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nTo determine which frameworks to include, we used data from \u003Ca href=\"https:\/\/httparchive.org\/\"\u003EHTTP Archive\u003C\/a\u003E and discussed inclusion with all browser vendors to ensure we cover a good range of implementations. For the initial evaluation, we took a snapshot of the HTTP Archive from March 2023 to determine the top JavaScript UI frameworks currently used to build complex web apps.\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhNL-3EGN3NyWERFEqb-GnA5UnYi_lDkyp1siFYN5X0qj6qAQWpMcwrC7_3Q0PQPeQCsbQf06FDp6e_RaNB-U6nvnf1JxljO1nUeZxSSAoqmyu2-9VNGP1QjNx6krI8W7EhdmDHyg8_kvzPm7Vf0Xjo1uPKl84R-mrDwXqbY1xf0EkMSHvtu2mcMwGCgxZ7\/s1932\/1Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_v2_Pages%20vs.%20Framework.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1351\" data-original-width=\"1932\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhNL-3EGN3NyWERFEqb-GnA5UnYi_lDkyp1siFYN5X0qj6qAQWpMcwrC7_3Q0PQPeQCsbQf06FDp6e_RaNB-U6nvnf1JxljO1nUeZxSSAoqmyu2-9VNGP1QjNx6krI8W7EhdmDHyg8_kvzPm7Vf0Xjo1uPKl84R-mrDwXqbY1xf0EkMSHvtu2mcMwGCgxZ7\/s16000\/1Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_v2_Pages%20vs.%20Framework.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nAnother approach is to determine inclusion based on popularity with developers: Do we need to include frameworks that have “momentum”, where a framework's current usage in production might be low, but we anticipate growth in adoption? This is somewhat hard to determine and might not be the ideal sole indicator for inclusion. One data point to evaluate momentum might be monthly NPM downloads of frameworks. \n\u003C\/p\u003E\n\u003Cp\u003E\nHere are the same 15 frameworks NPM downloads for March 2023:\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhh9SdoPfDPz-wjCUTknvTaTq4D3pRTUDocU7BoUF-y8iePqktwFxZXUgkAkeWF4gG8kJIIXSTJL_-ugHzrW8LnsyFdlCCEz_MleUtADMnyhU6Nlztk_RPw2J9t7dWTtzIad2eB3U9IGOMXMyb-QB4j_26bmL77oUIThz3Otp5FBSPXmn_rG8bumjBpuTj1\/s1932\/2Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_Downloads%20vs.%20Framework.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1360\" data-original-width=\"1932\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhh9SdoPfDPz-wjCUTknvTaTq4D3pRTUDocU7BoUF-y8iePqktwFxZXUgkAkeWF4gG8kJIIXSTJL_-ugHzrW8LnsyFdlCCEz_MleUtADMnyhU6Nlztk_RPw2J9t7dWTtzIad2eB3U9IGOMXMyb-QB4j_26bmL77oUIThz3Otp5FBSPXmn_rG8bumjBpuTj1\/s16000\/2Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_Downloads%20vs.%20Framework.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nWith both data points on hand, we decided on a list that we felt gives us a good representation of frameworks. We kept the list small to allow space for brand new types of workloads, instead of just todo apps. We also selected commonly used versions for each framework, based on the current usage. \n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjWIjTao8HfxmLG3VNzDgwfcu4tHvdY1-Yu1CZxqnmHliA8LjkN4DbQy0uZDeSsdh11c7T53rQruwMoDyfqqcIgXgraNmmZ2rCjDJVCgbm0K4EP087sbjIb2utmxI8xN1OiJ7XG4L7NTYFdcg_DL2S_-kqU5Om46C6vX5dzvXiM8Kw-LJX247jB05iNZprj\/s1932\/3Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_Commonly%20Used%20Versions.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1037\" data-original-width=\"1932\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjWIjTao8HfxmLG3VNzDgwfcu4tHvdY1-Yu1CZxqnmHliA8LjkN4DbQy0uZDeSsdh11c7T53rQruwMoDyfqqcIgXgraNmmZ2rCjDJVCgbm0K4EP087sbjIb2utmxI8xN1OiJ7XG4L7NTYFdcg_DL2S_-kqU5Om46C6vX5dzvXiM8Kw-LJX247jB05iNZprj\/s16000\/3Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_Commonly%20Used%20Versions.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nIn addition, we updated the previous JavaScript implementations and included a new  web-component based version, implemented with vanilla JavaScript.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EMore Workloads\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nA simple Todo-list only tests a subset of functionality. For example: how well do browsers handle complicated flexbox and grid layouts? How can we capture SVG and canvas rendering and how can we include more realistic scenarios that happen on a website?\n\u003C\/p\u003E\n\u003Cp\u003E\nWe collected and categorized areas of interest into DOM, layout, API and patterns, to be able to match them to potential workloads that would allow us to test these areas. In addition we collected user journeys that included the different categories of interest: editing text, rendering charts, navigating a site, and so on. \n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhvvQUbw7sWXJeFdASbV66Nn0mJxLkJtevbcCoy1UhZ9IRQj8tkHg657V31yKBiPd8T71ArAQmSedl9NeoqczYvv49MciBUuyfSg5-zyIOIrae807_5N3hzemRyQuTTHYsTiGZ7qV4ARPrQEO7vWIm9-R3kCaKpQcwRsxYr3NkqProgY-8mSe5PjHUNbSf-\/s1932\/4Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_More%20Workloads.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1321\" data-original-width=\"1932\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhvvQUbw7sWXJeFdASbV66Nn0mJxLkJtevbcCoy1UhZ9IRQj8tkHg657V31yKBiPd8T71ArAQmSedl9NeoqczYvv49MciBUuyfSg5-zyIOIrae807_5N3hzemRyQuTTHYsTiGZ7qV4ARPrQEO7vWIm9-R3kCaKpQcwRsxYr3NkqProgY-8mSe5PjHUNbSf-\/s16000\/4Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_More%20Workloads.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nThere are many more areas that we weren’t able to include, but the final list of workloads presents a larger variety and we hope that future versions of Speedometer will build upon the current list.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EValidation\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nThe Chrome Aurora team worked with the \u003Ca href=\"https:\/\/v8.dev\/\"\u003EChrome V8 team\u003C\/a\u003E to validate our assumptions above. In Chrome, we can use \u003Ca href=\"https:\/\/v8.dev\/docs\/rcs\"\u003Eruntime-call-stats\u003C\/a\u003E to measure time spent in each web API (and additionally many internal components). This allows us to get an insight into how dominant certain APIs are.\n\u003C\/p\u003E\n\u003Cp\u003E\nIf we look at Speedometer 2.1 we see that a disproportionate amount of benchmark time is spent in innerHTML.\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiyW_hT0-7IEsnU0vMSGYepKt3W9atMq1rHRw0hKyQ_8zLozWyM0yILERSynI5j5F4rWM5ZKRaWPgaSanJxzwBZD0aqt_wye9p1yQmOzZaOF7cEXRPeMLTF-MhWJorfg-Q9QEAkP6Y1DKVM5AFUieQoP94Y18TyAWb8g-a3sdz_Tgxk-DMMqs_O7CwI03HA\/s1932\/5Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_v2_Speedometer%202.1%20Chrome%20API%20Usage.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1328\" data-original-width=\"1932\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiyW_hT0-7IEsnU0vMSGYepKt3W9atMq1rHRw0hKyQ_8zLozWyM0yILERSynI5j5F4rWM5ZKRaWPgaSanJxzwBZD0aqt_wye9p1yQmOzZaOF7cEXRPeMLTF-MhWJorfg-Q9QEAkP6Y1DKVM5AFUieQoP94Y18TyAWb8g-a3sdz_Tgxk-DMMqs_O7CwI03HA\/s16000\/5Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_v2_Speedometer%202.1%20Chrome%20API%20Usage.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nWhile \u003Ca href=\"http:\/\/go\/mdn\/API\/Element\/innerHTML\"\u003EinnerHTML\u003C\/a\u003E is an important web API, it's overrepresented in Speedometer 2.1. Doing the same analysis on the new version 3.0  yields a slightly different picture:\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgEdKNUJzhrWhWY8AHHiZYGfTLsF-crQZKcvAGhD_RtAfD0fsRDGuufFew8kCUccNrhcyF17K_cEvyR38nFx2_CgS9ZIE2Z2afe4DXCg6Rou8n_J3iY8Jq0A8lUo0TlzAG5AOmstNzaraw_47S8r_TzS9ZYX4t1Mqf5Wpe3QRissuDEhabmzk_q_7lEmVE3\/s1932\/6Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_Speedometer%203.0%20Chrome%20API%20Usage.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1404\" data-original-width=\"1932\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgEdKNUJzhrWhWY8AHHiZYGfTLsF-crQZKcvAGhD_RtAfD0fsRDGuufFew8kCUccNrhcyF17K_cEvyR38nFx2_CgS9ZIE2Z2afe4DXCg6Rou8n_J3iY8Jq0A8lUo0TlzAG5AOmstNzaraw_47S8r_TzS9ZYX4t1Mqf5Wpe3QRissuDEhabmzk_q_7lEmVE3\/s16000\/6Chrome_Fast%20\u0026amp;%20Curious_Blog%20Assets_Speedometer%203.0_Speedometer%203.0%20Chrome%20API%20Usage.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nWe can see that innerHTML is still present, but its overall contribution shrunk from roughly 14%  down to 4.5%. As a result, we get a better distribution that favors more DOM APIs to be optimized. We can also see that a few Canvas APIs have moved into this list, thanks to the new workloads in v3.0.\n\u003C\/p\u003E\n\u003Cp\u003E\nWhile we will never be able to perfectly represent the whole web in a fast-running and stable benchmark, it is clear that Speedometer 3.0 is a giant step in the right direction.\n\u003C\/p\u003E\n\u003Cp\u003E\nUltimately, we ended up with the following list of workloads presented in the next few sections.\n\u003C\/p\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EWhat workloads are included?\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\n\u003Cstrong\u003E\u003Cem\u003ETodoMVC\u003C\/em\u003E\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nMany developers might recognize the \u003Ca href=\"https:\/\/todomvc.com\/\"\u003ETodoMVC app\u003C\/a\u003E. It’s a popular resource for learning and offers a wide range of TodoMVC implementations with different frameworks. \n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi3uqFby4YGbOdvIEo3mgb6EjFO4q9OtRNagMiDOEcTzVFyzrMeJCKoab-U4fyKVQr7rfbfTzTgCmbNxgy84pl3-bfvsfVmC6mqBYcxNB739yNTlYORwySDsKmNRIjdjwivLcpI6iG6CzGOz7x2Gy0gq1LIgRCgIJi2neq1nQWfo0G07plVTRF3E6nGs_2q\/s842\/1TodoMVC.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"706\" data-original-width=\"842\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi3uqFby4YGbOdvIEo3mgb6EjFO4q9OtRNagMiDOEcTzVFyzrMeJCKoab-U4fyKVQr7rfbfTzTgCmbNxgy84pl3-bfvsfVmC6mqBYcxNB739yNTlYORwySDsKmNRIjdjwivLcpI6iG6CzGOz7x2Gy0gq1LIgRCgIJi2neq1nQWfo0G07plVTRF3E6nGs_2q\/s16000\/1TodoMVC.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nTodoMVC is a to-do application that allows a user to keep track of tasks. The user can enter a new task, update an existing one, mark a task as completed, or delete it. In addition to the basic CRUD operations, the TodoMVC app has some added functionality: filters are available to change the view to “all”, “active” or “completed” tasks and a status text displays the number of active tasks to complete. \n\u003C\/p\u003E\n\u003Cp\u003E\nIn Speedometer, we introduced a local data source for todo items, which we use in our tests to populate the todo apps. This gave us the opportunity to test a larger character set with different languages.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe tests for these apps are all similar and are relatable to typical user journeys with a todo app:\n\u003C\/p\u003E\n\u003Col\u003E\n\n\u003Cli\u003EAdd a task\n\n\u003C\/li\u003E\u003Cli\u003EMark task as complete\n\n\u003C\/li\u003E\u003Cli\u003EDelete task\n\n\u003C\/li\u003E\u003Cli\u003ERepeat steps 1-3 a set amount of times\n\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cp\u003E\nThese tests seem simple, but it lets us benchmark DOM manipulations. Having a variety of framework implementations also cover several different ways how this can be done. \n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003E\u003Cem\u003EComplex DOM \/ TodoMVC\u003C\/em\u003E\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nThe complex DOM workloads embed various TodoMVC implementations in a static UI shell that mimics a complex web page. The idea is to capture the performance impact on executing seemingly isolated actions (e.g. adding\/deleting todo items) in the context of a complex website. Small performance hits that aren’t obvious in an isolated TodoMVC workload are amplified in a larger application and therefore capture more real-world impact.\n\u003C\/p\u003E\n\u003Cp\u003E\nThe tests are similar to the TodoMVC tests, executed in the complex DOM \u0026amp; CSSOM environment.\n\u003C\/p\u003E\n\u003Cp\u003E\nThis introduces an additional layer of complexity that browsers have to be able to handle effortlessly.\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEigyFShRHZAVX8SzN0eRf1XyOPAwT1563BKuuzaOYSlG8-rVaeSqGj88DFM3bsiJmveZ5z-XB-2jaZp8Exz6NTvf1wQbN1vmouCnSbMV8QtXbWpsbbAhEFQOk0zuhTxOkUfbcDadVy6nbQ7HhjgsmQEghoO_v3v8FMnsCB7ZWWzk8YsZXeXZbD8zWbItd33\/s822\/2Complex%20DOM%20%20TodoMVC.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"694\" data-original-width=\"822\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEigyFShRHZAVX8SzN0eRf1XyOPAwT1563BKuuzaOYSlG8-rVaeSqGj88DFM3bsiJmveZ5z-XB-2jaZp8Exz6NTvf1wQbN1vmouCnSbMV8QtXbWpsbbAhEFQOk0zuhTxOkUfbcDadVy6nbQ7HhjgsmQEghoO_v3v8FMnsCB7ZWWzk8YsZXeXZbD8zWbItd33\/s16000\/2Complex%20DOM%20%20TodoMVC.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003E\u003Cem\u003ESingle-page-applications (News Site)\u003C\/em\u003E\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nSingle-page-applications (SPAs) are widely used on the web for streaming, gaming, social media and pretty much anything you can imagine. A SPA lets us capture navigating between pages and interacting with an app. We chose a news site to represent a SPA, since it allows us to capture the main areas of interest in a deterministic way. An important factor was that we want to ensure we are using static local data and that the app doesn’t rely on network requests to present this data to the user.\n\u003C\/p\u003E\n\u003Cp\u003E\nTwo implementations are included: one built with Next.js and the other with Nuxt. This gave us the opportunity to represent applications built with meta frameworks, with the caveat that we needed to ensure to use static outputs.\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgeu13O9BevycHTsDVrYPsWvaM3lJEKPPUz9Ket2PmQLQE3pOpYTE_YNv85egpLFAqW3_5f0c-fHclB283uH7Xh8bTJsxMeFu9ArDW892iBSFNVTrVhqKLw4JN23XrW-zH8BnIdvND1SbC9am0kF16t4DjPuSOoOoF5qqprsyFHiMNOINqpNWZTXsQWtQAE\/s826\/3Single-page-applications%20(News%20Site).png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"690\" data-original-width=\"826\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgeu13O9BevycHTsDVrYPsWvaM3lJEKPPUz9Ket2PmQLQE3pOpYTE_YNv85egpLFAqW3_5f0c-fHclB283uH7Xh8bTJsxMeFu9ArDW892iBSFNVTrVhqKLw4JN23XrW-zH8BnIdvND1SbC9am0kF16t4DjPuSOoOoF5qqprsyFHiMNOINqpNWZTXsQWtQAE\/s16000\/3Single-page-applications%20(News%20Site).png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\nTests for the news site mimic a typical user journey, by selecting a menu item and navigating to another section of the site. \n\u003C\/p\u003E\n\u003Col\u003E\n\n\u003Cli\u003EClick on ‘More’ toggle of the navigation\n\n\u003C\/li\u003E\u003Cli\u003EClick on a navigation button\n\n\u003C\/li\u003E\u003Cli\u003ERepeat steps 1 and 2 a set amount of times\n\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Cp\u003E\nThese tests let us evaluate how well a browser can handle large DOM and CSSOM changes, by changing a large amount of data that needs to be displayed when navigating to a different page.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003E\u003Cem\u003ECharting Apps \u0026amp; Dashboards\u003C\/em\u003E\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nCharting apps allow us to test SVG and canvas rendering by displaying charts in various workloads. \n\u003C\/p\u003E\n\u003Cp\u003E\nThese apps represent popular sites that display financial information, stock charts or dashboards. \n\u003C\/p\u003E\n\u003Cp\u003E\nBoth SVG rendering and the use of the canvas api weren’t represented in previous releases of Speedometer.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EObservable Plot\u003C\/strong\u003E displays a stacked bar chart, as well as a dotted chart. It is based on D3, which is a JavaScript library for visualizing tabular data and outputs SVG elements. It loops through a big dataset to build the source data that D3 needs, using map, filter and flatMap methods. As a result this exercises creation and copying of objects and arrays.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EChart.js\u003C\/strong\u003E is a JavaScript charting library. The included workload displays a scatter graph with the canvas api, both with some transparency and with full opacity. This uses the same data as the previous workload, but with a different preparation phase. In this case it makes a heavy use of trigonometry to compute distances between airports.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EReact Stockcharts\u003C\/strong\u003E displays a dashboard for stocks. It is based on D3 for all computation, but outputs SVG directly using React.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003EWebkit Perf-Dashboard\u003C\/strong\u003E is an application used to track various performance metrics of WebKit. The dashboard uses canvas drawing and web components for its ui.\n\u003C\/p\u003E\n\u003Cp\u003E\nThese workloads test DOM manipulation with SVG or canvas by interacting with charts. For example here are the interactions of the Observable Plot workload:\u003Cbr \/\u003E\n\u003C\/p\u003E\n\u003Col\u003E\n\n\u003Cli\u003EPrepare data: compute the input datasets to output structures that D3 understands.\n\n\u003C\/li\u003E\u003Cli\u003EAdd stacked chart: this draws a chart using SVG elements.\n\n\u003C\/li\u003E\u003Cli\u003EChange input slider to change the computation parameters.\n\n\u003C\/li\u003E\u003Cli\u003ERepeat steps 1 and 2\n\n\u003C\/li\u003E\u003Cli\u003EReset: this clears the view\n\n\u003C\/li\u003E\u003Cli\u003EAdd dotted chart: this draws another type of graph (dots instead of bars) to exercise different drawing primitives. This also uses a power scale.\u003C\/li\u003E\n\u003C\/ol\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi1QH4eW4eb6BhbRSvNOkbrq9HXwSWc53aNbMKuxv5I5Sw2LzMiN5BMVqAwo6GCag4VGThAy9jifHBmc2yVRDxwNFuJo6C-jymDoTfpZqzcmFNOrtWUsHfbUxeQ0cjixXh7WRajjHdj-V_dK-FrQxCEEV5XXDzgKp7Q3xiHrTc9LJcgDaO9Ryg4_KnsYKhN\/s846\/4Webkit%20Perf-Dashboard_1.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"706\" data-original-width=\"846\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEi1QH4eW4eb6BhbRSvNOkbrq9HXwSWc53aNbMKuxv5I5Sw2LzMiN5BMVqAwo6GCag4VGThAy9jifHBmc2yVRDxwNFuJo6C-jymDoTfpZqzcmFNOrtWUsHfbUxeQ0cjixXh7WRajjHdj-V_dK-FrQxCEEV5XXDzgKp7Q3xiHrTc9LJcgDaO9Ryg4_KnsYKhN\/s16000\/4Webkit%20Perf-Dashboard_1.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7BWgJu6HvFqDwADBq9Q0GblZFHIJpp052nYZM0CgRfQbbsAp-VTN8Xpy1o1XbYhIqUKoGg4uELeo6Un2NHFul2qaAzL99Y7vxJqASK8uMXDD8GyX2jIFIAiBl36suwaHO5hGUmvxQMt09mX38Oh5R8hOXckFneevSpQlChMu5qQmcUiKIqoaAQiCxNjrB\/s822\/5Webkit%20Perf-Dashboard_2.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"696\" data-original-width=\"822\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEg7BWgJu6HvFqDwADBq9Q0GblZFHIJpp052nYZM0CgRfQbbsAp-VTN8Xpy1o1XbYhIqUKoGg4uELeo6Un2NHFul2qaAzL99Y7vxJqASK8uMXDD8GyX2jIFIAiBl36suwaHO5hGUmvxQMt09mX38Oh5R8hOXckFneevSpQlChMu5qQmcUiKIqoaAQiCxNjrB\/s16000\/5Webkit%20Perf-Dashboard_2.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cdiv style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/div\u003E\n\u003Cp\u003E\n\u003Cstrong\u003E\u003Cem\u003ECode Editors\u003C\/em\u003E\u003C\/strong\u003E\n\u003C\/p\u003E\n\u003Cp\u003E\nEditors, for example WYSIWYG text and code editors, let us focus on editing live text and capturing form interactions. Typical scenarios are writing an email, logging into a website or filling out an online form.  Although there is some form interaction present in the TodoMVC apps, the editor workloads use a large data set, which lets us evaluate performance more accurately.\n\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiHb9rJqJXZ95LXsDjo8Zd1l2TciE1uFZ5eolDJf3euB5P7C8KwJ27vB-xlCic8R7CHNy7Qxuea9zuCsqbdJ4k6safN5Z7oA6KadxbzYEus6TRmVV0cHZLcJedupQb6R-0DB4YpMagfvjviPhxGfWAIDmxzJ7jBXGzjALxeMmxuEoTACaNMIrDqEnoAMwXA\/s846\/6Code%20Editors.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"708\" data-original-width=\"846\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiHb9rJqJXZ95LXsDjo8Zd1l2TciE1uFZ5eolDJf3euB5P7C8KwJ27vB-xlCic8R7CHNy7Qxuea9zuCsqbdJ4k6safN5Z7oA6KadxbzYEus6TRmVV0cHZLcJedupQb6R-0DB4YpMagfvjviPhxGfWAIDmxzJ7jBXGzjALxeMmxuEoTACaNMIrDqEnoAMwXA\/s16000\/6Code%20Editors.png\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cp style=\"text-align: center;\"\u003E\u003Cbr \/\u003E\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003ECodemirror\u003C\/strong\u003E is a code editor that implements a text input field with support for many editing features. Several languages and frameworks are available and for this workload we used the JavaScript library from Codemirror.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cstrong\u003ETiptap\u003C\/strong\u003E Editor is a headless, framework-agnostic rich text editor that's customizable and extendable. This workload used Tiptap as its basis and added a simple ui to interact with. \n\u003C\/p\u003E\n\u003Cp\u003E\nBoth apps test DOM insertion and manipulation of a large amount of data in the following way:\n\u003C\/p\u003E\n\u003Col\u003E\n\n\u003Cli\u003ECreate an editable element.\n\n\u003C\/li\u003E\u003Cli\u003EInsert a long text.: Codemirror uses the development bundle of React, whileTipTap loads an excerpt of Proust’s Du Côté de Chez Swann.\n\n\u003C\/li\u003E\u003Cli\u003EHighlight text: Codemirror turns on syntax highlighting, while TipTap sets all the text to bold.\n\u003C\/li\u003E\n\u003C\/ol\u003E\n\u003Ch3 style=\"text-align: left;\"\u003E\u003Cstrong\u003EParting words\u003C\/strong\u003E\u003C\/h3\u003E\n\u003Cp\u003E\nBeing able to collaborate with all major browser vendors and having all of us contribute to workloads has been a unique experience and we are looking forward to continuing to collaborate in the browser benchmarking space. \n\u003C\/p\u003E\n\u003Cp\u003E\nDon’t forget to check out the new release of Speedometer and test it out in your favorite browser, dig into the results, check out our repo and feel free to open issues with any improvements or ideas for workloads you would like to see included in the next version. We are aiming for a more frequent release schedule in the future and if you are a framework author and want to contribute, feel free to file an issue on our \u003Ca href=\"https:\/\/github.com\/WebKit\/Speedometer\/issues\"\u003EGithub\u003C\/a\u003E to start the discussion.\n\u003C\/p\u003E\n\u003Cp\u003E\n\u003Cem\u003E\u003Cspan style=\"font-size: x-small;\"\u003EPosted by Thorsten Kober, Chrome Aurora\u003C\/span\u003E\u003C\/em\u003E\n\u003C\/p\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/5329985167455533255"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/5329985167455533255"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/03\/speedometer-3-building-benchmark-that.html","title":"Speedometer 3: Building a benchmark that represents the web"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiwhyphenhypheng0_39U6yzt-pOO8aVmKnuz6fn2Nk2Vx5Rs-ypGPUDRiOG4v8ItqlD_WLSRfku6utJy6luWI5iDOtwEor5v69en_XiWU-akxtTmCgR8Mm-6NfjW6weeEoXT6msXLmbxGzJ8ZvzKKOEjOv0SZH-RhXHKdHG7I_6TmE5hJq5VFSrXyUV5d8K7zE0KLYJg\/s72-c\/The%20Fast%20+%20The%20Curious%20Logo_Revised_Header.jpg","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-6520825526957115198"},"published":{"$t":"2024-02-13T09:00:00.000-08:00"},"updated":{"$t":"2024-02-13T11:07:04.427-08:00"},"title":{"type":"text","$t":"Optimizing Safe Browsing checks in Chrome"},"content":{"type":"html","$t":"\u003Cspan id=\"docs-internal-guid-70d6c0ca-7fff-dc87-8a1c-c7855c824f96\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EBalancing security and usability is always top of mind for us as we strive to stay on top of the constantly evolving threat landscape while building products that are delightful to use. To that end, we'd like to announce a few recent changes to how Chrome works with Google Safe Browsing to keep you safe online while optimizing for smooth and uninterrupted web browsing.\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-family: inherit; font-size: medium;\"\u003EAsynchronous checks\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EToday, Safe Browsing checks are on the blocking path of page loads in Chrome, meaning that users cannot see pages until checks are completed. While this works fine for local-first checks such as those made using \u003C\/span\u003E\u003Ca href=\"https:\/\/developers.google.com\/safe-browsing\/v4\" style=\"text-decoration-line: none;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003ESafe Browsing API v4\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E, it can add latency for checks made directly with the Safe Browsing server. Starting in Chrome 122, we will begin to introduce an asynchronous mechanism which will allow sites to load even while real-time checks with Safe Browsing servers are in progress. We expect this to reduce page load time and improve user experience as real-time server-side checks will no longer block page load, although if a site is found to be dangerous after the page loads then a warning will still be shown.\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EIn addition to the performance boost, this change will let us improve the quality of protection over time. By taking the remote lookup outside of the blocking path of the page load, we're now able to experiment with and deploy novel AI and ML based algorithms to detect and block more phishing and social engineering attacks. It was previously challenging to perform such experimentation because of the potential to delay page loads.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EIn terms of potential risks, we evaluated the following and concluded that sufficient mitigations are in place:\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cspan id=\"docs-internal-guid-9a89d10b-7fff-7a14-97bb-c03f9c6672d0\" style=\"font-family: inherit;\"\u003E\u003Cul style=\"margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003EPhishing and social engineering attacks\u003C\/span\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E: With the move to asynchronous checks, such sites may start to load while server-side Safe Browsing checks are in progress. We have studied the timing data and concluded that it is extremely unlikely a user would have significantly interacted with (e.g. typed in a password) such a site by the time a warning is shown.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"color: #434343; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; vertical-align: baseline; white-space: pre;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003EExploits against the browser\u003C\/span\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E: Chrome maintains a local Safe Browsing list of some sites which are known to deliver browser exploits, and we'll continue to check that synchronously. Besides this, we always recommend \u003C\/span\u003E\u003Ca href=\"https:\/\/support.google.com\/chrome\/answer\/95414\" style=\"text-decoration-line: none;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003Eupdating Chrome\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E as soon as an update is available, to stay protected online.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003C\/span\u003E\u003Cdiv\u003E\u003Cspan face=\"Arial, sans-serif\"\u003E\u003Cspan style=\"font-family: inherit; font-size: 13.3333px; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-family: inherit; font-size: medium;\"\u003ESub-resource checks\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EMost sites we encounter include various sub-resources as a way to render their content. These sub-resources can include images, scripts, and more. Chrome has historically checked both top-level URLs as well as sub-resources with Safe Browsing in order to warn on potentially harmful sites. While the majority of sub-resources are safe, in the past, we'd commonly observe compromised sites embedding sub-resources that were being leveraged by bad actors to distribute malware and exploit browsers at scale.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EIn recent years, we've seen this attacker trend decline –\u0026nbsp;large scale campaigns that exploit sub-resources are no longer common, making sub-resource checks less important. Additionally, our advances in intelligence gathering, threat detection, and Safe Browsing APIs mean that we now have other ways to protect users in real-time without relying on sub-resource checks. For example, Chrome’s client-side visual ML model can spot images used to create phishing pages, regardless of their use of sub-resources.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EAs such, moving forward Chrome will no longer check the URLs of sub-resources with Safe Browsing. This means that Chrome clients now connect to Google less frequently, which reduces unnecessary network bandwidth cost for users. On the Safe Browsing side, the change allows us to drastically simplify detection logic and APIs, which helps improve infrastructure reliability and warning accuracy, thus reducing risk overall.\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-family: inherit; font-size: medium;\"\u003EPDF download checks\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EFinally, we have vastly reduced the frequency with which Chrome contacts Safe Browsing to check PDF downloads.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EIn the past, PDF was a widely exploited file type due to its popularity. As time has passed, thanks in part to the ongoing hardening of PDF viewers (for example, Chrome's PDF viewer is sandboxed), we aren't seeing widespread exploitation of PDF anymore, nor do we hear industry reports about it being a dangerous file type. Even when we have observed malicious PDFs in the wild, they have contained links that redirect users back to Chrome which gives us another chance to protect users.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EAs a result of this change, Chrome is now contacting Safe Browsing billions of times less often each week.\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-family: inherit; font-size: medium;\"\u003EWhat to expect\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-family: inherit; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EThe changes described above, while mostly under the hood, should result in a smoother web browsing experience for Chrome users without a degradation in security posture. We'll continue to monitor trends in the threat landscape, and remain ready to respond to keep you safe online.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-family: inherit;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-family: inherit; font-size: xx-small;\"\u003EPosted by Jasika Bawa, Chrome Security \u0026amp; Jonathan Li, Safe Browsing\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6520825526957115198"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/6520825526957115198"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/02\/optimizing-safe-browsing-checks-in.html","title":"Optimizing Safe Browsing checks in Chrome"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-5564086956427119080"},"published":{"$t":"2024-02-05T08:42:00.000-08:00"},"updated":{"$t":"2024-02-05T09:45:44.450-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"chromium"},{"scheme":"http://www.blogger.com/atom/ns#","term":"issue tracker"}],"title":{"type":"text","$t":"Chromium Issue Tracker migration is complete"},"content":{"type":"html","$t":"\u003Cspan id=\"docs-internal-guid-58c93b83-7fff-adfe-35bb-5d0ea88ea6ae\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003EWe are thrilled to share that Chromium issue tracking has migrated!\u003C\/span\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003E \u003C\/span\u003E\u003Ca href=\"https:\/\/issues.chromium.org\/issues\" style=\"text-decoration: none;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre;\"\u003EAccess the Issue Tracker\u003C\/span\u003E\u003C\/a\u003E\u003Ca href=\"http:\/\/issues.chromium.org\" style=\"text-decoration: none;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre;\"\u003E,\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003E and \u003C\/span\u003E\u003Ca href=\"https:\/\/www.chromium.org\/for-testers\/faq\/\" style=\"text-decoration: none;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"-webkit-text-decoration-skip: none; background-color: transparent; color: #1155cc; font-style: normal; font-variant: normal; font-weight: 400; text-decoration-skip-ink: none; text-decoration: underline; vertical-align: baseline; white-space: pre;\"\u003Esupporting documentation\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: 400; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003E.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003C\/span\u003E\u003Cspan\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cb id=\"docs-internal-guid-f9bdbf0a-7fff-ed49-7993-33f541a95d22\" style=\"font-weight: normal;\"\u003E\u003Cbr \/\u003E\u003C\/b\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cb style=\"font-weight: normal;\"\u003E\u003Cbr \/\u003E\u003C\/b\u003E\u003C\/p\u003E\u003Ch1 dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: #2196f3; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/h1\u003E\u003Ch1 dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: #2196f3; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003EWhy was this done\u003C\/span\u003E\u003C\/h1\u003E\u003C\/span\u003E\u003Cbr \/\u003E\u003Cbr \/\u003EIssue tracking moved from Monorail to the Chromium Issue Tracker (powered by the \u003Ca href=\"https:\/\/developers.google.com\/issue-tracker\"\u003EGoogle Issue Tracker\u003C\/a\u003E) to provide a feature-rich and well-supported issue tracker for Chromium’s ecosystem. Chromium joins other open source projects (Git, Gerrit) on this tooling. \u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: #2196f3; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003EWhat happens moving forward\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003EExisting Monorail issue links will redirect to the migrated issues in the new issue tracker. We will prioritize feedback to continue to improve the issue tracker experience.\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"'Google Sans',sans-serif\" style=\"background-color: transparent; color: #2196f3; font-style: normal; font-variant: normal; font-weight: 700; text-decoration: none; vertical-align: baseline; white-space: pre;\"\u003EHelp \u0026amp; Feedback\u003C\/span\u003E\u003C\/p\u003EYou can reach out at any time to \u003Ca href=\"mailto:issue-tracker-support@chromium.org\"\u003Eissue-tracker-support@chromium.org\u003C\/a\u003E with questions or concerns."},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/5564086956427119080"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/5564086956427119080"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/02\/chromium-issue-tracker-migration-is.html","title":"Chromium Issue Tracker migration is complete"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-2067713460217591741"},"published":{"$t":"2024-02-02T09:02:00.000-08:00"},"updated":{"$t":"2024-02-02T09:02:56.503-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"chromium"},{"scheme":"http://www.blogger.com/atom/ns#","term":"issue tracker"}],"title":{"type":"text","$t":"Chromium Issue Tracker migration beginning Feb 2, 2024 at 5pm PST"},"content":{"type":"html","$t":"\u003Cspan id=\"docs-internal-guid-7712e48b-7fff-c6f2-514d-bbc411672d89\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EAs we shared \u003C\/span\u003E\u003Ca href=\"https:\/\/blog.chromium.org\/2023\/10\/update-to-developers-chromium-issue.html\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003Elast year\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E, Chromium is moving to a different issue tracker to provide a well-supported user experience for the long term. \u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003EMigration is beginning today (February 2, 2024) at 5pm PST.\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E We expect migration will be completed by the end of day (PST) February 4, 2024.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Ch1 dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #2196f3; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWhat’s happening\u003C\/span\u003E\u003C\/h1\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWe will migrate all Chromium issues, including issue history and stars, from Monorail to a different tool: \u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003EChromium Issue Tracker\u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E, powered by the \u003C\/span\u003E\u003Ca href=\"https:\/\/developers.google.com\/issue-tracker\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003EGoogle Issue Tracker\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E. This tooling change will provide a feature-rich and well-supported issue tracker for Chromium’s ecosystem. Chromium will join other open source projects (Git, Gerrit) on this tooling. Existing transparency levels to bugs will be maintained.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #2196f3; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003EPost-Migration\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWe will publish another post once the migration is complete. \u003C\/span\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EOnce the migration completes, existing Monorail issue links will redirect to the migrated issues in the new issue tracker. We will prioritize feedback to continue to improve the issue tracker experience. Documentation on new and common workflows will be added to \u003C\/span\u003E\u003Ca href=\"http:\/\/chromium.org\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003Echromium.org\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E once the migration is complete.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #2196f3; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 12pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003EHelp \u0026amp; Feedback\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EYou can reach out at any time to \u003C\/span\u003E\u003Ca href=\"mailto:issue-tracker-support@chromium.org\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003Eissue-tracker-support@chromium.org\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-family: \u0026quot;Google Sans\u0026quot;, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E with questions or concerns.\u003C\/span\u003E\u003C\/p\u003E\u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2067713460217591741"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/2067713460217591741"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2024\/02\/chromium-issue-tracker-migration.html","title":"Chromium Issue Tracker migration beginning Feb 2, 2024 at 5pm PST"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}]},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-7104353417356799842"},"published":{"$t":"2023-11-08T09:59:00.000-08:00"},"updated":{"$t":"2023-11-08T09:59:07.831-08:00"},"title":{"type":"text","$t":"A new way to seamlessly browse across devices with Chrome on iOS"},"content":{"type":"html","$t":"\u003Cspan id=\"docs-internal-guid-f4180aee-7fff-7fdc-1156-e03b40e39468\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWhether you’re browsing the web on your PC at home or on the go with your phone, we designed Chrome to be simple to use and work great on all platforms. For example, tools like Chrome sync have made it possible for you to access your bookmarks and passwords when switching between all your devices.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EIn the coming weeks we’re making changes to Chrome on iOS to help you get to your most important stuff right away. Instead of having to set up Chrome sync on your device, you can now simply sign in to Chrome to save new things in your Google Account and access what's already there. This may feel familiar to you, as it’s how many Google apps on iOS already work today. Once you’re signed in to Chrome, you’ll be able to save your important stuff to your account, including bookmarks, reading lists, passwords, payment info, addresses and settings. And, you can separately opt in to synchronizing your tabs and browsing history from Chrome on iOS to your Google Account, which can help you pick up browsing where you left off on another device.\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv\u003E\u003Cspan\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjNYAg0TphT2UwYOyritbckc35lBCL21CBc-mPsCQdxoJVR3WUBijbZ5Bj7xq9TeO16qhBlQXJBsmm2gZw-agtWVN0UPGgBAYlbwTPP4SL5X71XO5FVKf0VkytaEnpz52Dwbm7oJvjWOGqRUR53qZzD87PPaHMJ8bqqfFpu-PJD4PibOpwtO79MFtMo1d-Q\/s1624\/SignIn%20(with%20gesture).gif\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"1624\" data-original-width=\"750\" height=\"640\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjNYAg0TphT2UwYOyritbckc35lBCL21CBc-mPsCQdxoJVR3WUBijbZ5Bj7xq9TeO16qhBlQXJBsmm2gZw-agtWVN0UPGgBAYlbwTPP4SL5X71XO5FVKf0VkytaEnpz52Dwbm7oJvjWOGqRUR53qZzD87PPaHMJ8bqqfFpu-PJD4PibOpwtO79MFtMo1d-Q\/w296-h640\/SignIn%20(with%20gesture).gif\" width=\"296\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cspan\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EThese updates are also designed to help you manage your data. When you sign in to Chrome, the browsing data that’s already on your device will be kept separate as local data on your device. You’ll be able to easily distinguish local from account data in settings. And, if you want any local data to be available on your other devices, you can simply go to settings and save it to your account.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003ESigning in to Chrome on iOS remains entirely optional. If you don’t sign in, you can still save your bookmarks, passwords and more, but they will be available only on the device where you saved them. You can also continue to sign in to Google web services like Gmail without signing in to Chrome.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: Arial, sans-serif; font-size: 11pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWe’re hoping these changes make it even easier for you to get the best of Chrome while offering you all the flexibility you need.\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.38; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-family: Arial, sans-serif; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: xx-small;\"\u003EPosted by Nico Jersch, Chrome Product Manager\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003C\/span\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/7104353417356799842"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/7104353417356799842"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2023\/11\/a-new-way-to-seamlessly-browse-across.html","title":"A new way to seamlessly browse across devices with Chrome on iOS"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjNYAg0TphT2UwYOyritbckc35lBCL21CBc-mPsCQdxoJVR3WUBijbZ5Bj7xq9TeO16qhBlQXJBsmm2gZw-agtWVN0UPGgBAYlbwTPP4SL5X71XO5FVKf0VkytaEnpz52Dwbm7oJvjWOGqRUR53qZzD87PPaHMJ8bqqfFpu-PJD4PibOpwtO79MFtMo1d-Q\/s72-w296-h640-c\/SignIn%20(with%20gesture).gif","height":"72","width":"72"}},{"id":{"$t":"tag:blogger.com,1999:blog-2471378914199150966.post-4112552297450954984"},"published":{"$t":"2023-11-07T09:03:00.001-08:00"},"updated":{"$t":"2023-11-07T09:03:15.656-08:00"},"category":[{"scheme":"http://www.blogger.com/atom/ns#","term":"the fast and the curious"}],"title":{"type":"text","$t":"How Core Web Vitals saved users 10,000 years of waiting for web pages to load"},"content":{"type":"html","$t":"\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgmp1qvDcNBZtkhpYpK-Ly3iyOHgmGT9L3c8nQlJFRy6ncMfwdblt0BYX_j3zBBRqSA9wrnKdeth6rOtS325MPGr0CNesGPFa4ZS83FLR0lcxFfKkarvl2OZcOgEb4XloVsDLvr1a3h_5YBQSX4ZdLdx2cuQyUdsbcDp2FYZzjJWGnVdlvEzxxv2asH_yT8\/s400\/Fast%20Curious_image.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"166\" data-original-width=\"400\" height=\"166\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgmp1qvDcNBZtkhpYpK-Ly3iyOHgmGT9L3c8nQlJFRy6ncMfwdblt0BYX_j3zBBRqSA9wrnKdeth6rOtS325MPGr0CNesGPFa4ZS83FLR0lcxFfKkarvl2OZcOgEb4XloVsDLvr1a3h_5YBQSX4ZdLdx2cuQyUdsbcDp2FYZzjJWGnVdlvEzxxv2asH_yT8\/w400-h166\/Fast%20Curious_image.png\" width=\"400\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-style: italic; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003ET\u003C\/span\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-style: italic; white-space-collapse: preserve;\"\u003Eoday’s The Fast and the Curious post explores how Core Web Vitals saved Chrome users more than 10,000 Years of waiting for web pages to load in 2023 (across Chrome desktop and Android) by quantifying the experience of sites and identifying opportunities to make improvements.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EIn 2020, we introduced \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/vitals\/\" style=\"text-decoration-line: none;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWeb Vitals\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E - essential quality signals for webpages to ensure a better user experience. Since then, there has been a massive leap in web performance made possible by our work on Core Web Vitals (CWV) and its broader impact on the web. Today, over 40% of sites pass all of the CWV metrics, leading to pages that load and respond to interactions more quickly. Here’s a closer look at the journey to help improve the performance for sites and some specific work done in the browser and the ecosystem to enable this achievement.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: large;\"\u003EChrome's Quest for Speed\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EThe very essence of the web lies in its ability to provide information and services efficiently and rapidly. This principle is at the heart of Google's business and drives our work on Chrome. However, we noticed an issue with sites over a long time horizon. Even if slow sites improved their performance for a while, it would often decline over time. No matter how fast Google Search might be, the user experience would be subpar if the pages found were slow to load.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWe could not help these sites improve their performance directly, but we wanted users to have a great experience when they moved from Google Search to the individual sites. To tackle the challenge of improving the user experience while simultaneously providing unified guidance to developers, teams from Search and Chrome collaborated to address the issue of slow web pages.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: large;\"\u003EDefining the Fast Web\u0026nbsp;\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EWe examined millions of pages to define a public standard for a fast, user-friendly web page (initially published in \u003C\/span\u003E\u003Ca href=\"https:\/\/blog.chromium.org\/2020\/05\/the-science-behind-web-vitals.html\" style=\"text-decoration-line: none;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003EThe Science Behind Web Vitals\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E). We published our specifications and data to the open ecosystem and took note of\u0026nbsp; the feedback we received. The introduction of CWV metrics such as \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/articles\/lcp\" style=\"text-decoration-line: none;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003ELCP\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E (Largest Contentful Paint) was groundbreaking because it allowed us to measure when the user actually sees the content. The ability to measure the actual user experience at scale has been foundational to the improvements that we will discuss in this blog post.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003ENext, we updated Google's search ranking algorithms in August 2021 to consider, among other factors, whether a page met the speed and usability standards established as part of CWV.\u0026nbsp; Today, it remains \u003C\/span\u003E\u003Ca href=\"https:\/\/developers.google.com\/search\/docs\/appearance\/page-experience#core-web-vitals\" style=\"text-decoration-line: none;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline; white-space-collapse: preserve;\"\u003Ehighly recommended\u003C\/span\u003E\u003C\/a\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E for site owners to achieve good Core Web Vitals for success with Search and to ensure a great user experience generally.\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: large;\"\u003EExponential Impact of Small Changes\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003EThe results we saw after these changes were significant. The average page load in Chrome is now 166 ms faster. That might seem like a minor improvement, but small changes can accumulate to create a substantial impact on the web.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003ESo far in 2023, this project saved users over 10,000 years of waiting for web pages to load and over 1,200 years of waiting for web pages to respond to user input. And the web continues to get faster. We also tracked improvements in how many navigations meet Core Web Vitals (CWV). The current figures stand at 64.45% for mobile (up from 64%) and 68.39% for desktop (up from 67%). The Chrome Data team projects a ~69% pass rate by the end of the year.\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhJXlVkkM1NpqQVv72HdG9lqOx0BNVa0zA8ALsBeqZI5ZRB-WQt4MDj3SMPDkwFBQt8J8Y3d6f2TaWpz_9dHjdNUNTTaNIduP5aD-y1_c_c980qRKByLSQDcZ8RVx6v3YwE__etQlQAUwTKaJJKhYQZYpyewk-QBA5apndz0w6jjdPsWhANwHhQxOYXML1r\/s954\/Screenshot%202023-11-06%20at%209.45.17%E2%80%AFAM.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"536\" data-original-width=\"954\" height=\"360\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhJXlVkkM1NpqQVv72HdG9lqOx0BNVa0zA8ALsBeqZI5ZRB-WQt4MDj3SMPDkwFBQt8J8Y3d6f2TaWpz_9dHjdNUNTTaNIduP5aD-y1_c_c980qRKByLSQDcZ8RVx6v3YwE__etQlQAUwTKaJJKhYQZYpyewk-QBA5apndz0w6jjdPsWhANwHhQxOYXML1r\/w640-h360\/Screenshot%202023-11-06%20at%209.45.17%E2%80%AFAM.png\" title=\"Caption: Our savings for LCP translate into 8,000 years saved for users waiting for pages to load on Android and 2,000 years in 2023 so far. On INP, we have saved users 800 years on Android and 450 years on Windows so far in 2023.\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan id=\"docs-internal-guid-d3bb3188-7fff-d2e6-9ed6-dd110b96dabe\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Ci\u003E\u003Cspan id=\"docs-internal-guid-ec2eec2f-7fff-9721-9c42-de5217fb0a87\"\u003E\u003C\/span\u003E\u003C\/i\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Ci\u003ECaption: Our savings for LCP translate into 8,000 years saved for users waiting for pages to load on Android and 2,000 years in 2023 so far. On INP, we have saved users 800 years on Android and 450 years on Windows so far in 2023.\u003C\/i\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cspan style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" style=\"font-family: Arial, sans-serif; font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003ENext, let’s look at some recent updates from both the Chrome team and the wider developer ecosystem, demonstrating how our joint efforts are speeding up the web.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"font-family: Arial, sans-serif; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;\"\u003E\u003Cspan style=\"font-size: large;\"\u003EChrome’s Core Web Vitals Achievements\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"font-family: Arial, sans-serif; font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EWe’re proud to highlight numerous ways we’ve optimized performance.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cul style=\"font-family: Arial, sans-serif; font-size: 10pt; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; white-space-collapse: preserve;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EThe \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/articles\/bfcache\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003EBack\/forward cache\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E (bfcache) is designed to improve browsing experience by enabling instant back and forward navigation. BFCache’s hit rate has improved month-over-month on both Android (3.6%) and Desktop (1.8%).\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cul style=\"font-family: Arial, sans-serif; font-size: 10pt; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; white-space-collapse: preserve;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EAnother example of a particularly impactful optimization is our PreconnectOnAnchorInteraction feature which connects to origins on pointer-down rather than pointer-up. This fully launched feature led to a 6\/10ms (0.4\/1%) median LCP improvement on Android\/Desktop, and an improvement in cross-origin LCP by ~60ms on both Android and Desktop. The launch also resulted in a 0.08% Content Ad revenue increase, underlining the significant impact of performance optimizations on user engagement and ecosystem health.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cul style=\"font-family: Arial, sans-serif; font-size: 10pt; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; white-space-collapse: preserve;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EWe also introduced \u003C\/span\u003E\u003Ca href=\"https:\/\/developer.chrome.com\/blog\/prerender-pages\/\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003Eprerendering\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E, which makes pages load instantly by rendering them before the user actually visits. Page loads via typing URLs directly in the omnibox get a 500-700ms (14-25%) median LCP improvement when prerendered, depending on the platform, moving global median LCP across all navigations by 6.4ms. We're currently rolling out prerendering of omnibox-initiated searches.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cul style=\"font-family: Arial, sans-serif; font-size: 10pt; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; white-space-collapse: preserve;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EChrome has been working hard to keep background tabs out of your way. Implementing \u003C\/span\u003E\u003Ca href=\"https:\/\/blog.chromium.org\/2020\/11\/tab-throttling-and-more-performance.html\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003Etab throttling for background tabs\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E running at EcoQOS on Windows 11 and Task Role and QoS Adjustments on macOS have led to improvements in Largest Contentful Paint (\u003C\/span\u003E\u003Ca href=\"http:\/\/web.dev\/lcp\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003ELCP\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E) and Interaction to Next Paint (\u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/articles\/inp\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003EINP\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E). \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EThe web’s modern ability to run all types of applications also comes with a mandate to manage the workload that this encurs. We have been optimizing Chrome under mutliple active tabs\u0026nbsp; and are happy to report improvements to scheduling and contention which improve INP by 5% and LCP by 2% in the last 6 months.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cul style=\"font-family: Arial, sans-serif; font-size: 10pt; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; white-space-collapse: preserve;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EWe have made targeted improvements to the page loading code in Chrome in 2022. These resulted in LCP improving by 10% on Android, and CWV pass rate improving by 1.5%.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003Cspan face=\"Arial, sans-serif\" style=\"font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cul style=\"font-family: Arial, sans-serif; font-size: 10pt; margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px; white-space-collapse: preserve;\"\u003E\u003Cli aria-level=\"1\" dir=\"ltr\" style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EChrome's renderer has also seen some improvements. The renderer's main thread includes task queues for JavaScript, rendering, and image loading. Some changes that alter the priority of these tasks for optimal CWV include.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cul style=\"margin-bottom: 0px; margin-top: 0px; padding-inline-start: 48px;\"\u003E\u003Cli aria-level=\"2\" dir=\"ltr\" style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003EHigh priority image loading: \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EHistorically, image-loading had the same or lower priority than rendering. However, an experiment showed that between an image load task and a rendering task, choosing the image load task first can prevent layout shift of an intermediate frame that doesn't have the image and also improves LCP. The improvement on Android at the 75th percentile was \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003E-6.66%\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E for CLS and \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003E-0.82%\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E for LCP, improving the CWV pass rate on Android by \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003E+0.24%.\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E A similar experiment that boosted the loading priority to \"medium\" of the first five images parsed from the HTML (for non-icon-sized images) showed an improvement on Android at the 75th percentile of \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003E-6.08%\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E for CLS and \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003E-0.53%\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E for LCP. A combined experiment showed the effects of both changes were largely independent.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli aria-level=\"2\" dir=\"ltr\" style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003EPrioritize compositing after delay: \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003EIf it has been more than 100ms since the last \u003C\/span\u003E\u003Ca href=\"https:\/\/developer.chrome.com\/blog\/inside-browser-part3\/#what-is-compositing\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; text-wrap: wrap; vertical-align: baseline;\"\u003Ecompositing\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E task run, elevate the priority of any queued compositing task so that it will preempt normal-priority work. This produced an improvement of \u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003E-0.27%\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E for CLS on Android and Windows at the 95th percentile.\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003Cli aria-level=\"2\" dir=\"ltr\" style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; list-style-type: disc; text-wrap: nowrap; vertical-align: baseline;\"\u003E\u003Cp dir=\"ltr\" role=\"presentation\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; text-wrap: wrap; vertical-align: baseline;\"\u003ESVG Raster Optimizations\u003C\/span\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-wrap: wrap; vertical-align: baseline;\"\u003E: Another SVG drawing optimization improved INP pass rates on desktops by -2.28% for MacOS at the 75th percentile.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003C\/li\u003E\u003C\/ul\u003E\u003C\/ul\u003E\u003Cdiv style=\"font-family: Arial, sans-serif; font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"color: #0e101a;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cdiv class=\"separator\" style=\"clear: both; font-family: Arial, sans-serif; font-size: 10pt; text-align: center; white-space-collapse: preserve;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiKRmZM0AQmYrx8wvUc0LqtpIwpGOgGPcPGqTeezyXUM0q1WY_TP_AN9UJno42Eutj7xBDlzFUCN0yM_MItJU_hb4fqPl2LCQVR66p6lHoGqRjiEAh1R39eFrSgwZW9uNmIsxWmtl-9SEQyQxb51x_XD1vwLi1JhI3eIa5uCMvxXbRj5WQDrIERvHwGkL-V\/s816\/video.gif\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"312\" data-original-width=\"816\" height=\"244\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiKRmZM0AQmYrx8wvUc0LqtpIwpGOgGPcPGqTeezyXUM0q1WY_TP_AN9UJno42Eutj7xBDlzFUCN0yM_MItJU_hb4fqPl2LCQVR66p6lHoGqRjiEAh1R39eFrSgwZW9uNmIsxWmtl-9SEQyQxb51x_XD1vwLi1JhI3eIa5uCMvxXbRj5WQDrIERvHwGkL-V\/w640-h244\/video.gif\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003Cspan style=\"color: #0e101a;\"\u003E\u003Ci\u003E\u003Cspan face=\"Arial, sans-serif\"\u003E\u003Cspan style=\"font-size: 13.3333px; white-space-collapse: preserve;\"\u003ECaption: An example of Chrome’s new prioritized loading of the first five images parsed from the HTML. This improved LCP from 3.1s to 2.5s.\u003C\/span\u003E\u003C\/span\u003E\u003C\/i\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cbr \/\u003E\u003C\/div\u003E\u003Cdiv style=\"font-family: Arial, sans-serif; font-size: 10pt; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"color: #0e101a;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cdiv\u003E\u003Cspan face=\"Arial, sans-serif\" id=\"docs-internal-guid-834c64f4-7fff-cc90-0d9c-3e0473aa2cc9\" style=\"white-space-collapse: preserve;\"\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;\"\u003E\u003Cspan style=\"font-size: large;\"\u003EEcosystem Core Web Vitals Achievements\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EThe broader developer ecosystem has also achieved remarkable results by focusing on Core Web Vitals. \u003C\/span\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EThe most significant achievement was the performance improvement on WordPress - the Content Management System that powers over a third of the web: \"\u003C\/span\u003E\u003Ca href=\"https:\/\/make.wordpress.org\/core\/2023\/08\/07\/wordpress-6-3-performance-improvements\/\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #4a6ee0; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003EWordPress 6.3\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E loads 27% faster for block themes and 18% faster for classic themes, compared to WordPress 6.2, based on the \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/articles\/lcp\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003ELargest Contentful Paint (LCP)\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E metric\".\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cspan id=\"docs-internal-guid-16173b3d-7fff-b359-9440-045d3b2d504d\"\u003E\u003Cspan style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003ESome parts of the WordPress ecosystem are going even further. Prerendering some links via the \u003C\/span\u003E\u003Ca href=\"https:\/\/developer.chrome.com\/blog\/prerender-pages\/\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003Especulation rules API\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E, \u003C\/span\u003E\u003Ca href=\"https:\/\/nitropack.io\/\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003ENitroPack\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E's prerendered page loads have seen an 80% LCP improvement and 55% INP improvement compared to those without any speculative loading.\u003C\/span\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cspan\u003E\u003Cspan style=\"color: black; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"color: #0e101a; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cspan\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv class=\"separator\" style=\"clear: both; text-align: center;\"\u003E\u003Ca href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjxjcDZR8KcnwqG2wWjgsZP6vE1uCcUGuNCMCjORJUjoFBe2PBclSgQfNz4S21j4H7d8snA6gQUwewxoSjJEDK76Yt1NAaXjYnvmAYa9HI-P_pn6Ue7hN321LQsiPldKNt1DUz8nwqMX6AXb1GNRlHR_xOLnwfbDjSn6w0EszDNYU0F4miZnva8h-l75z4O\/s984\/Screenshot%202023-11-06%20at%209.48.00%E2%80%AFAM.png\" style=\"margin-left: 1em; margin-right: 1em;\"\u003E\u003Cimg border=\"0\" data-original-height=\"620\" data-original-width=\"984\" height=\"404\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjxjcDZR8KcnwqG2wWjgsZP6vE1uCcUGuNCMCjORJUjoFBe2PBclSgQfNz4S21j4H7d8snA6gQUwewxoSjJEDK76Yt1NAaXjYnvmAYa9HI-P_pn6Ue7hN321LQsiPldKNt1DUz8nwqMX6AXb1GNRlHR_xOLnwfbDjSn6w0EszDNYU0F4miZnva8h-l75z4O\/w640-h404\/Screenshot%202023-11-06%20at%209.48.00%E2%80%AFAM.png\" width=\"640\" \/\u003E\u003C\/a\u003E\u003C\/div\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 13.3333px; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline; white-space-collapse: preserve;\"\u003E\u003Cspan face=\"Arial, sans-serif\"\u003E\u003Ci\u003ECaption: The percentage of origins passing all three Core Web Vitals (LCP, FID, CLS) with a \"good\" experience (Source: \u003Ca href=\"https:\/\/httparchive.org\/reports\/chrome-ux-report#cruxPassesCWV\"\u003EHTTP Archive\u003C\/a\u003E)\n\u003C\/i\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cdiv style=\"font-family: Arial, sans-serif; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/div\u003E\u003Cp dir=\"ltr\" style=\"font-family: Arial, sans-serif; font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt; white-space-collapse: preserve;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EThe JavaScript framework community has also seen Core Web Vital gains. Over the past few years, \u003C\/span\u003E\u003Ca href=\"https:\/\/developers.chrome.com\/aurora\" style=\"font-size: 10pt; text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003EChrome Aurora\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E has collaborated with Next.js, Angular, and Nuxt to release performance-focused features like the \u003C\/span\u003E\u003Ca href=\"https:\/\/nextjs.org\/docs\/app\/building-your-application\/optimizing\/scripts\" style=\"font-size: 10pt; text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003Enext\/script component\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E, \u003C\/span\u003E\u003Ca href=\"https:\/\/angular.io\/guide\/image-directive\" style=\"font-size: 10pt; text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003ENgOptimizedImage\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E, and \u003C\/span\u003E\u003Ca href=\"https:\/\/google-fonts.nuxtjs.org\/\" style=\"font-size: 10pt; text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003Enuxt\/google-fonts\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E. In 2022, Next.js pass rates increased from 20.4% to 27.3%, Angular pass rates increased from 7.6% to 13.2%, and Nuxt pass rates increased from 15.8% to 20.2%. Enterprise partners who tried our features have seen wins in LCP. For example, after switching to NgOptimizedImage, Land's End saw a 40% LCP improvement on mobile in Lighthouse lab tests and a 75% improvement in LCP on desktop. In similar tests, CareerKarma's LCP reduced 24% when switching to next\/script's web worker mode.\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003C\/div\u003E\u003Cdiv style=\"font-family: Arial, sans-serif; white-space-collapse: preserve;\"\u003E\u003Cspan id=\"docs-internal-guid-9f3dc149-7fff-0670-014d-856f9e066f27\"\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EIn the business world, performance optimization has led to remarkable growth. For instance, RedBus improved INP and observed a \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/case-studies\/redbus-inp\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003E7%\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E increase in conversion rates. Economic Times improved INP and saw a \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/case-studies\/economic-times-inp\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003E42%\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E rise in page views and a 49% reduction in bounce rate. Meesho successfully brought LCP down from 6.9s to 2.5s, resulting in a 16.6% reduction in bounce rate and a 3% increase in conversions.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EMajor web platforms have also seen significant improvements. Amazon has leveraged the bfcache change introduced on Chrome and saw a 22.7 percentage point (pp) improvement in bfcache hit rate with Chrome's latest version (M112). Cricbuzz experienced an even higher increase, with a 31.40 pp improvement.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-weight: 700; vertical-align: baseline;\"\u003E\u003Cspan style=\"font-size: large;\"\u003EPartnering for a Better Web\u0026nbsp;\u003C\/span\u003E\u003C\/span\u003E\u003C\/p\u003E\u003Cbr \/\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EThese performance improvements aren't just statistics – they represent real-world improvements in user experience (and hence \u003C\/span\u003E\u003Ca href=\"https:\/\/web.dev\/case-studies\/terra-prefetching-case-study\" style=\"text-decoration-line: none;\"\u003E\u003Cspan style=\"color: #1155cc; font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; text-decoration-line: underline; text-decoration-skip-ink: none; vertical-align: baseline;\"\u003Ebusiness metrics\u003C\/span\u003E\u003C\/a\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E) as well as developer experience.\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003E\u0026nbsp;\u003C\/span\u003E\u003C\/p\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003ECrucially, we have managed to achieve these speed boosts without impacting developer satisfaction, which remains high at 90% overall. Through our developer satisfaction studies, we also found that about half (~51%) of developers are monitoring CWV and are either already optimizing for them or planning to do so. Furthermore, a significant majority (78%) of developers optimizing for CWV report seeing notable improvements in their scores.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EOur aim is always to create a better web experience for all users, so we're excited to see the web getting faster. But we also understand that maintaining developer satisfaction is crucial to sustaining these improvements. As developers continue to monitor and optimize for CWV, we are optimistic about the future of web performance.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"font-size: 10pt; line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: 10pt; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EOn behalf of the Chrome team, we want to thank the developer community for their incredible work. By focusing on Core Web Vitals, we've made the web a significantly faster and more enjoyable place to be. We look forward to continuing this journey together, making the web better for everyone, everywhere.\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003Cp dir=\"ltr\" style=\"line-height: 1.2; margin-bottom: 0pt; margin-top: 0pt;\"\u003E\u003Cspan style=\"font-size: xx-small; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; vertical-align: baseline;\"\u003EPosted by Addy Osmani, Annie Sullivan and Kouhei Ueno, Software Engineers for Chrome\u003C\/span\u003E\u003C\/p\u003E\u003Cspan style=\"font-size: 10pt;\"\u003E\u003Cbr \/\u003E\u003C\/span\u003E\u003C\/span\u003E\u003C\/div\u003E\u003C\/span\u003E\u003C\/div\u003E"},"link":[{"rel":"edit","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/4112552297450954984"},{"rel":"self","type":"application/atom+xml","href":"http:\/\/www.blogger.com\/feeds\/2471378914199150966\/posts\/default\/4112552297450954984"},{"rel":"alternate","type":"text/html","href":"http:\/\/blog.chromium.org\/2023\/11\/how-core-web-vitals-saved-users-10000.html","title":"How Core Web Vitals saved users 10,000 years of waiting for web pages to load"}],"author":[{"name":{"$t":"Chromium Blog"},"uri":{"$t":"http:\/\/www.blogger.com\/profile\/06394244468194711527"},"email":{"$t":"noreply@blogger.com"},"gd$image":{"rel":"http://schemas.google.com/g/2005#thumbnail","width":"32","height":"32","src":"\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiuHqPlIlihZahPYa7DCmhCdZyzl_OcCdGhJ0gJx5h_yrYbOUMG4rz1TPs9Tf6TfsPVv3JgeAqie3EJCs75WNwiciRevTYyEV-pcfgq2CXMIuuzVnGwAdlMZjDlh973iwvfQ-3OlXF3RWy49cpYJFz5PMH88qLjD1tbMn5pHNC7HX4\/s220\/icon-chromium-256.png"}}],"media$thumbnail":{"xmlns$media":"http://search.yahoo.com/mrss/","url":"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgmp1qvDcNBZtkhpYpK-Ly3iyOHgmGT9L3c8nQlJFRy6ncMfwdblt0BYX_j3zBBRqSA9wrnKdeth6rOtS325MPGr0CNesGPFa4ZS83FLR0lcxFfKkarvl2OZcOgEb4XloVsDLvr1a3h_5YBQSX4ZdLdx2cuQyUdsbcDp2FYZzjJWGnVdlvEzxxv2asH_yT8\/s72-w400-h166-c\/Fast%20Curious_image.png","height":"72","width":"72"}}]}}