# Philip Walton

Thoughts on web development, open source, software architecture, and the future.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Using modern-web-types to add newer web API types to TypeScript

DevFeed: [Using modern-web-types to add newer web API types to TypeScript](<https://devfeed.tech/articles/modern-web-types-29516.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/modern-web-types/>)

Published: 2026-09-14T07:22:45Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [TypeScript](<https://devfeed.tech/topics/typescript.md>), [Web](<https://devfeed.tech/topics/web.md>), [Code](<https://devfeed.tech/topics/code.md>), [Library](<https://devfeed.tech/topics/library.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [view transitions](<https://devfeed.tech/topics/view-transitions.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [library](<https://devfeed.tech/tags/library.md>), [typescript](<https://devfeed.tech/tags/typescript.md>), [view-transitions](<https://devfeed.tech/tags/view-transitions.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

The article explains why TypeScript reports errors for newer web APIs that are available in Chrome: its built-in web API libraries require support from at least two browser engines. It introduces modern-web-types, a drop-in replacement using a single-engine support threshold, and describes how to install it for web and worker projects.

### Source excerpt

If you've ever written code against a new web API in TypeScript, you've probably seen an error telling you the thing you're using doesn't exist. Turns out, TypeScript intentionally doesn't support all new APIs, but there's an easy fix.

## The State of ES5 on the Web

DevFeed: [The State of ES5 on the Web](<https://devfeed.tech/articles/the-state-of-es5-on-the-web-29530.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/the-state-of-es5-on-the-web/>)

Author: For library authors

Published: 2024-09-08T15:18:32Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [legacy](<https://devfeed.tech/topics/legacy.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [polyfill](<https://devfeed.tech/topics/polyfill.md>), [Code](<https://devfeed.tech/topics/code.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [browser](<https://devfeed.tech/tags/browser.md>), [build-tools](<https://devfeed.tech/tags/build-tools.md>), [code](<https://devfeed.tech/tags/code.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [developers](<https://devfeed.tech/tags/developers.md>), [es2015](<https://devfeed.tech/tags/es2015.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [legacy](<https://devfeed.tech/tags/legacy.md>), [polyfill](<https://devfeed.tech/tags/polyfill.md>), [recommendations](<https://devfeed.tech/tags/recommendations.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

This article examines whether web developers and JavaScript library authors still need to transpile code to ES5. It uses data about browser support, popular libraries, tools, and websites to offer production recommendations, while discussing the bundle-size costs of transpilation and polyfills.

### Source excerpt

Should web developers and JavaScript library authors still transpile their code to ES5? This post looks at what the data suggests based on what popular libraries, tools, and websites are doing

## Dynamic LCP Priority: Learning from Past Visits

DevFeed: [Dynamic LCP Priority: Learning from Past Visits](<https://devfeed.tech/articles/dynamic-lcp-priority-learning-from-past-visits-29499.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/dynamic-lcp-priority/>)

Published: 2022-12-28T20:43:44Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Chrome](<https://devfeed.tech/topics/chrome.md>), [Workers](<https://devfeed.tech/topics/workers.md>), [API](<https://devfeed.tech/topics/api.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [browser](<https://devfeed.tech/tags/browser.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [cloudflare-workers](<https://devfeed.tech/tags/cloudflare-workers.md>), [code](<https://devfeed.tech/tags/code.md>), [data](<https://devfeed.tech/tags/data.md>), [javascript](<https://devfeed.tech/tags/javascript.md>)

### AI overview

This tutorial explains how to dynamically set LCP priority on complex or personalized pages when the LCP element cannot be known in advance. It describes collecting LCP data from previous visitors, storing it, and using that data on later requests, with an implementation based on Cloudflare Workers, Worker KV, and the Worker HTMLRewriter API.

### Source excerpt

Earlier this year, Chrome shipped the new Priority Hints API, which lets developers inform the browser which resources are the most important, such as the LCP image. There's just one small problem

## Performant A/B Testing with Cloudflare Workers

DevFeed: [Performant A/B Testing with Cloudflare Workers](<https://devfeed.tech/articles/performant-a-b-testing-with-cloudflare-workers-29520.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/performant-a-b-testing-with-cloudflare-workers/>)

Published: 2021-12-20T14:01:14Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [A/B Testing](<https://devfeed.tech/topics/a-b-testing.md>), [Cloudflare Workers](<https://devfeed.tech/topics/cloudflare-workers.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [inlining](<https://devfeed.tech/topics/inlining.md>)

Tags: [a-b-testing](<https://devfeed.tech/tags/a-b-testing.md>), [cloudflare-workers](<https://devfeed.tech/tags/cloudflare-workers.md>), [edge-computing](<https://devfeed.tech/tags/edge-computing.md>), [inlining](<https://devfeed.tech/tags/inlining.md>), [performance](<https://devfeed.tech/tags/performance.md>)

### AI overview

This tutorial explains how to run performant A/B tests with Cloudflare Workers at the edge. It discusses the performance costs of client-side and origin-based server-side testing and introduces a cookie-based approach for assigning users to experiment groups.

### Source excerpt

I think there's a perception in our industry that A/B testing is super complicated and you really need a tool or service to do it right. And while I'm sure some aspects of A/B are quite complex

## My Challenge to the Web Performance Community

DevFeed: [My Challenge to the Web Performance Community](<https://devfeed.tech/articles/my-challenge-to-the-web-performance-community-29517.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/my-challenge-to-the-web-performance-community/>)

Published: 2021-10-06T07:18:38Z

Content type: opinion

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [performance-optimization](<https://devfeed.tech/topics/performance-optimization.md>), [Core Web Vitals](<https://devfeed.tech/topics/core-web-vitals.md>), [real user monitoring](<https://devfeed.tech/topics/real-user-monitoring.md>), [Chrome](<https://devfeed.tech/topics/chrome.md>), [User Experience](<https://devfeed.tech/topics/user-experience.md>), [Website](<https://devfeed.tech/topics/website.md>)

Tags: [chrome](<https://devfeed.tech/tags/chrome.md>), [core-web-vitals](<https://devfeed.tech/tags/core-web-vitals.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-optimization](<https://devfeed.tech/tags/performance-optimization.md>), [synthetic](<https://devfeed.tech/tags/synthetic.md>), [user-experience](<https://devfeed.tech/tags/user-experience.md>), [web-performance](<https://devfeed.tech/tags/web-performance.md>)

### AI overview

The article argues that web performance optimization should focus on users' real-world experience rather than solely on synthetic tool scores. It explains that Lighthouse is useful for testing and optimization but does not guarantee good field performance: research found that almost half of pages scoring 100 on Lighthouse failed to meet recommended Core Web Vitals thresholds, while some pages with poor Lighthouse scores met those thresholds.

### Source excerpt

Performance optimization should be about making your users happy, not about making your tools happy. And if we really believe that, we should lead by example.

## Smaller HTML Payloads with Service Workers

DevFeed: [Smaller HTML Payloads with Service Workers](<https://devfeed.tech/articles/smaller-html-payloads-with-service-workers-29523.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/smaller-html-payloads-with-service-workers/>)

Published: 2020-01-07T08:02:37Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Web Development](<https://devfeed.tech/topics/web-development.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Single-page application (SPA)](<https://devfeed.tech/topics/spa.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [developers](<https://devfeed.tech/tags/developers.md>), [html](<https://devfeed.tech/tags/html.md>), [offline](<https://devfeed.tech/tags/offline.md>), [performance](<https://devfeed.tech/tags/performance.md>), [server](<https://devfeed.tech/tags/server.md>)

### AI overview

The article explains how service workers can reduce HTML payloads by requesting only page content and combining it with cached common elements to generate complete documents. On the author's site, this approach is reported to have reduced network payloads by 47.6% and improved median First Contentful Paint by 52.3% over the stated 30-day period.

### Source excerpt

Many developers know that you can use service workers to cache web pages (and their sub-resources) in order to serve those pages to users when they're offline. And while this is true, it's far from the only thing that service workers can do to improve the performance and reliability of a website. A lesser known capability of service workers is that you can programmatically generate your responses--you aren't limited to just fetching from the network or reading from the cache.

## Cascading Cache Invalidation

DevFeed: [Cascading Cache Invalidation](<https://devfeed.tech/articles/cascading-cache-invalidation-29492.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/cascading-cache-invalidation/>)

Published: 2019-10-09T08:26:44Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Caching](<https://devfeed.tech/topics/caching.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [cache](<https://devfeed.tech/tags/cache.md>), [caching](<https://devfeed.tech/tags/caching.md>), [code-splitting](<https://devfeed.tech/tags/code-splitting.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [hash](<https://devfeed.tech/tags/hash.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [production](<https://devfeed.tech/tags/production.md>)

### AI overview

The article examines how revision-hashed JavaScript filenames interact with code splitting and dependency imports. It finds that changing a vendor chunk can alter its filename, forcing importing chunks to change as well and reducing the effectiveness of long-term caching.

### Source excerpt

For several years now, pretty much every article published on caching best practices has recommended the following two things for deploying JavaScript code in production: Add revision information to the filenames of your assets (usually content hashes)

## Using Native JavaScript Modules in Production Today

DevFeed: [Using Native JavaScript Modules in Production Today](<https://devfeed.tech/articles/using-native-javascript-modules-in-production-today-29532.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/using-native-javascript-modules-in-production-today/>)

Published: 2019-08-20T07:20:17Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [modules](<https://devfeed.tech/topics/modules.md>), [Transpilers](<https://devfeed.tech/topics/transpilers.md>), [browsers](<https://devfeed.tech/topics/browsers.md>)

Tags: [browsers](<https://devfeed.tech/tags/browsers.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [modules](<https://devfeed.tech/tags/modules.md>), [performance](<https://devfeed.tech/tags/performance.md>), [transpilers](<https://devfeed.tech/tags/transpilers.md>)

### AI overview

The article argues that, with current bundler advances, production applications can use optimized ES2015 JavaScript modules with static and dynamic imports. It revisits earlier research that favored bundling and explains why that research did not compare optimized module deployments with optimized classic scripts.

### Source excerpt

Two years ago I wrote about a technique--now commonly referred to as the module/nomodule pattern--that allows you to write ES2015+ JavaScript and then use bundlers and transpilers to generate two versions of your codebase, one with modern syntax (loaded via ) and one with ES5 syntax (loaded via ). The technique allows you to ship significantly less code to module-supporting browsers, and it's now supported by most web frameworks and CLIs.

## KV Storage: the Web's First Built-in Module

DevFeed: [KV Storage: the Web's First Built-in Module](<https://devfeed.tech/articles/kv-storage-the-web-s-first-built-in-module-29512.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/kv-storage-the-webs-first-built-in-module/>)

Published: 2019-03-12T05:27:02Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Chrome](<https://devfeed.tech/topics/chrome.md>), [modules](<https://devfeed.tech/topics/modules.md>), [import](<https://devfeed.tech/topics/import.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Web](<https://devfeed.tech/topics/web.md>), [Web platform](<https://devfeed.tech/topics/web-platform.md>), [Demo](<https://devfeed.tech/topics/demo.md>)

Tags: [browsers](<https://devfeed.tech/tags/browsers.md>), [chrome](<https://devfeed.tech/tags/chrome.md>), [demo](<https://devfeed.tech/tags/demo.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [import](<https://devfeed.tech/tags/import.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [modules](<https://devfeed.tech/tags/modules.md>), [web-platform](<https://devfeed.tech/tags/web-platform.md>)

### AI overview

This article introduces Chrome's experimental Built-in Modules and Import Maps, focusing on KV Storage, an asynchronous key/value storage API built on IndexedDB. It explains how to use these APIs and demonstrates deploying them on the web with fallbacks for browser compatibility.

### Source excerpt

Chrome is experimenting with two new features that I firmly believe will completely change how we bundle and deploy JavaScript applications in the future (for the better): Built-in Modules and Import Maps.

## The Idle Until Urgent Strategy for Improving First Input Delay

DevFeed: [The Idle Until Urgent Strategy for Improving First Input Delay](<https://devfeed.tech/articles/idle-until-urgent-29508.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/idle-until-urgent/>)

Published: 2018-09-20T07:25:36Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [benchmarking](<https://devfeed.tech/topics/benchmarking.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Webpack](<https://devfeed.tech/topics/webpack.md>), [Babel](<https://devfeed.tech/topics/babel.md>)

Tags: [analytics](<https://devfeed.tech/tags/analytics.md>), [babel](<https://devfeed.tech/tags/babel.md>), [blog](<https://devfeed.tech/tags/blog.md>), [browser](<https://devfeed.tech/tags/browser.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [network](<https://devfeed.tech/tags/network.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-metrics](<https://devfeed.tech/tags/performance-metrics.md>), [trace](<https://devfeed.tech/tags/trace.md>), [webpack](<https://devfeed.tech/tags/webpack.md>)

### AI overview

This tutorial examines a blog's unexpectedly high first input delay and explains how to diagnose the cause with performance traces. It introduces the idle until urgent strategy as a way to improve responsiveness without removing site functionality.

### Source excerpt

A few weeks ago I was looking at some of the performance metrics for my site. Specifically, I wanted to see how I was doing on our newest metric, first input delay (FID). My site is just a blog (and doesn't run much JavaScript), so I expected to see pretty good results.

## Page Lifecycle API

DevFeed: [Page Lifecycle API](<https://devfeed.tech/articles/page-lifecycle-api-29519.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/page-lifecycle-api/>)

Published: 2018-07-24T18:41:57Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [API](<https://devfeed.tech/topics/api.md>), [browsers](<https://devfeed.tech/topics/browsers.md>), [Web](<https://devfeed.tech/topics/web.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [battery](<https://devfeed.tech/tags/battery.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [cpu](<https://devfeed.tech/tags/cpu.md>), [memory](<https://devfeed.tech/tags/memory.md>), [testing](<https://devfeed.tech/tags/testing.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

The Page Lifecycle API brings mobile-app-like lifecycle behavior to web pages, allowing browsers to manage tab resources more efficiently. The article explains lifecycle states and events and provides advice and best practices based on research and cross-browser testing.

### Source excerpt

If you're like me, it's not uncommon for you to have so many tabs open in your browser that you can't even read all their titles. The problem with this, of course, is all these tabs consume system resources (memory, battery, and CPU), and if you never end up going back to them again (which, let's be honest, happens more often than not) those resources were consumed for nothing.

## First Input Delay

DevFeed: [First Input Delay](<https://devfeed.tech/articles/first-input-delay-29502.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/first-input-delay/>)

Published: 2018-05-10T19:15:30Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Web](<https://devfeed.tech/topics/web.md>), [browser](<https://devfeed.tech/topics/browser.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [library](<https://devfeed.tech/tags/library.md>), [metric](<https://devfeed.tech/tags/metric.md>), [performance](<https://devfeed.tech/tags/performance.md>), [time](<https://devfeed.tech/tags/time.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

The article introduces First Input Delay, a performance metric that measures the time between a user's first interaction with a site and the browser's ability to respond. It also mentions a JavaScript library for measuring the metric.

### Source excerpt

On the web, a good first impression can make the difference between someone becoming a loyal user and them leaving and never coming back. One of the key ways a site shapes our first impression is what happens when we first try to interact with it.

## Responsive Components: a Solution to the Container Queries Problem

DevFeed: [Responsive Components: a Solution to the Container Queries Problem](<https://devfeed.tech/articles/responsive-components-a-solution-to-the-container-queries-problem-29521.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/responsive-components-a-solution-to-the-container-queries-problem/>)

Published: 2018-02-27T08:12:12Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Responsive Design](<https://devfeed.tech/topics/responsive-design.md>), [CSS](<https://devfeed.tech/topics/css.md>), [Web APIs](<https://devfeed.tech/topics/web-apis.md>), [Document Object Model (DOM)](<https://devfeed.tech/topics/dom.md>), [web design](<https://devfeed.tech/topics/web-design.md>)

Tags: [components](<https://devfeed.tech/tags/components.md>), [css](<https://devfeed.tech/tags/css.md>), [demo](<https://devfeed.tech/tags/demo.md>), [developer](<https://devfeed.tech/tags/developer.md>), [responsive-design](<https://devfeed.tech/tags/responsive-design.md>), [web-apis](<https://devfeed.tech/tags/web-apis.md>), [web-developers](<https://devfeed.tech/tags/web-developers.md>)

### AI overview

This article explains how to build responsive components that adapt to their containing environment without waiting for CSS container queries. It proposes using currently available web APIs as a progressive enhancement, with generic base styles and environment-specific overrides that continue to work when JavaScript or newer browser features are unavailable.

### Source excerpt

Container queries is a proposal that would allow web developers to style DOM elements based on the size of a containing element rather than the size of the browser viewport. If you're a web developer, you've probably heard about container queries before. For about as long as we've had responsive web design, we've had developers asking for them (initially element queries, then changing to container queries).

## Why Web Developers Need to Care about Interactivity

DevFeed: [Why Web Developers Need to Care about Interactivity](<https://devfeed.tech/articles/why-web-developers-need-to-care-about-interactivity-29536.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/why-web-developers-need-to-care-about-interactivity/>)

Published: 2017-12-19T17:25:23Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [interactive website](<https://devfeed.tech/topics/interactive-website.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Document Object Model (DOM)](<https://devfeed.tech/topics/dom.md>), [browser](<https://devfeed.tech/topics/browser.md>)

Tags: [browser](<https://devfeed.tech/tags/browser.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [main-thread](<https://devfeed.tech/tags/main-thread.md>), [technical](<https://devfeed.tech/tags/technical.md>), [time-to-interactive](<https://devfeed.tech/tags/time-to-interactive.md>), [web-developers](<https://devfeed.tech/tags/web-developers.md>)

### AI overview

The article explains web interactivity as a page's ability to respond quickly to user input. It identifies delayed JavaScript loading and a busy browser main thread as the two primary causes of poor responsiveness, while focusing mainly on main-thread work.

### Source excerpt

Anyone who's browsed the web on their phone has, at one point or another, experienced this situation: You open a web page and click on something, but nothing happens. You click on it again--still nothing.

## Deploying ES2015+ Code in Production Today

DevFeed: [Deploying ES2015+ Code in Production Today](<https://devfeed.tech/articles/deploying-es2015-code-in-production-today-29497.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/deploying-es2015-code-in-production-today/>)

Published: 2017-09-13T19:23:12Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [JavaScript](<https://devfeed.tech/topics/javascript.md>), [es2015](<https://devfeed.tech/topics/es2015.md>), [browsers](<https://devfeed.tech/topics/browsers.md>), [Babel](<https://devfeed.tech/topics/babel.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [apis](<https://devfeed.tech/tags/apis.md>), [async](<https://devfeed.tech/tags/async.md>), [await](<https://devfeed.tech/tags/await.md>), [babel](<https://devfeed.tech/tags/babel.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [classes](<https://devfeed.tech/tags/classes.md>), [es2015](<https://devfeed.tech/tags/es2015.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [webpack](<https://devfeed.tech/tags/webpack.md>)

### AI overview

The article explains how to deploy ES2015+ JavaScript to production by serving a modern bundle to browsers that support the relevant syntax and retaining an ES5 fallback for older browsers. It discusses feature detection, polyfills, module bundlers, and Babel configuration.

### Source excerpt

Most web developers I talk to these days love writing JavaScript with all the newest language features--async/await, classes, arrow functions, etc. However, despite the fact that all modern browsers can run ES2015+ code and natively support the features I just mentioned, most developers still transpile their code to ES5 and bundle it with polyfills to accommodate the small percentage of users still on older browsers.

## Why Traditional Pageview Tracking Fails for Modern Web Applications

DevFeed: [Why Traditional Pageview Tracking Fails for Modern Web Applications](<https://devfeed.tech/articles/how-we-track-pageviews-is-all-wrong-29507.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/how-we-track-pageviews-is-all-wrong/>)

Published: 2017-04-11T17:46:25Z

Content type: opinion

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Web](<https://devfeed.tech/topics/web.md>), [Single-page application (SPA)](<https://devfeed.tech/topics/spa.md>), [PWA](<https://devfeed.tech/topics/pwa.md>), [browser](<https://devfeed.tech/topics/browser.md>), [data](<https://devfeed.tech/topics/data.md>)

Tags: [analytics](<https://devfeed.tech/tags/analytics.md>), [browser](<https://devfeed.tech/tags/browser.md>), [data](<https://devfeed.tech/tags/data.md>), [patterns](<https://devfeed.tech/tags/patterns.md>), [pwa](<https://devfeed.tech/tags/pwa.md>), [web-app](<https://devfeed.tech/tags/web-app.md>)

### AI overview

The article argues that traditional analytics tools produce unrealistic pageview data for modern websites because they equate pageviews with full page loads. It examines Gmail, single-page applications, and progressive web apps as examples where users can interact with changing or offline content without reloading the page.

### Source excerpt

All analytics tools I know of track pageviews in a way that--to put it bluntly--simply doesn't work for a growing number of websites today and is completely incompatible with the direction the web is heading.

## The Google Analytics Setup I Use on Every Site I Build

DevFeed: [The Google Analytics Setup I Use on Every Site I Build](<https://devfeed.tech/articles/the-google-analytics-setup-i-use-on-every-site-i-build-29529.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/the-ga-setup-i-use-on-every-site-i-build/>)

Published: 2017-02-08T18:45:45Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Google Analytics](<https://devfeed.tech/topics/google-analytics.md>), [Web](<https://devfeed.tech/topics/web.md>), [Code](<https://devfeed.tech/topics/code.md>), [async](<https://devfeed.tech/topics/async.md>), [Script](<https://devfeed.tech/topics/script.md>), [HTTP](<https://devfeed.tech/topics/http.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [code](<https://devfeed.tech/tags/code.md>), [google-analytics](<https://devfeed.tech/tags/google-analytics.md>), [http](<https://devfeed.tech/tags/http.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [web-developers](<https://devfeed.tech/tags/web-developers.md>)

### AI overview

A practical guide to configuring Google Analytics for web developers, covering how developers can use analytics to understand site usage and how to load analytics.js asynchronously without degrading user experience or blocking critical resources.

### Source excerpt

Google Analytics is a powerful yet quite complicated tool. And unfortunately, the truth is most people who use it don't reap its full benefits. There's a lot of excellent and free content out there that explains how to use Google Analytics, but most of it is rather narrowly focused on use cases that primarily apply to marketers and advertisers; very little is geared toward web developers who simply want to better understand how people are using the sites they build.

## The Dark Side of Polyfilling CSS

DevFeed: [The Dark Side of Polyfilling CSS](<https://devfeed.tech/articles/the-dark-side-of-polyfilling-css-29527.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/the-dark-side-of-polyfilling-css/>)

Published: 2016-12-22T18:18:08Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [polyfill](<https://devfeed.tech/topics/polyfill.md>), [modern web development](<https://devfeed.tech/topics/modern-web-development.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [css](<https://devfeed.tech/tags/css.md>), [polyfill](<https://devfeed.tech/tags/polyfill.md>)

### AI overview

This article explains why polyfilling CSS is difficult by building a polyfill for a hypothetical CSS keyword that returns a random number between 0 and 1. It contrasts CSS with JavaScript polyfills and explains how Houdini APIs could make CSS polyfilling possible in ways that are not currently available.

### Source excerpt

Earlier this year I wrote an article for Smashing Magazine about Houdini, and I called it the "most exciting development in CSS you've never heard of". In the article I argue that Houdini APIs will (among other things) make it possible to polyfill CSS features in a way that simply cannot be done today.

## Loading Polyfills Only When Needed

DevFeed: [Loading Polyfills Only When Needed](<https://devfeed.tech/articles/loading-polyfills-only-when-needed-29514.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/loading-polyfills-only-when-needed/>)

Published: 2016-09-27T22:41:26Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [polyfill](<https://devfeed.tech/topics/polyfill.md>), [browser](<https://devfeed.tech/topics/browser.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [HTML](<https://devfeed.tech/topics/html.md>)

Tags: [browsers](<https://devfeed.tech/tags/browsers.md>), [html](<https://devfeed.tech/tags/html.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [performance](<https://devfeed.tech/tags/performance.md>), [polyfill](<https://devfeed.tech/tags/polyfill.md>)

### AI overview

The article explains why loading all polyfills for every user can penalize users on modern browsers, then presents the author's approach to conditionally loading polyfills only when needed. It notes tradeoffs involving feature detection, deprecated libraries, and user-agent-based services such as Polyfill Service.

### Source excerpt

New JavaScript and HTML features are being introduced all the time that make our lives as developers easier. In many cases, these new features are so helpful we choose to use them on production websites before they're fully implemented in all browsers. To not break the experience for users on older browsers, we of course include polyfills for any not-fully-supported features.

## Untangling Deeply-Nested Promise Chains

DevFeed: [Untangling Deeply-Nested Promise Chains](<https://devfeed.tech/articles/untangling-deeply-nested-promise-chains-29531.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/untangling-deeply-nested-promise-chains/>)

Published: 2016-08-17T14:53:31Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Promise](<https://devfeed.tech/topics/promise.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Refactoring](<https://devfeed.tech/topics/refactoring.md>), [Web APIs](<https://devfeed.tech/topics/web-apis.md>), [async](<https://devfeed.tech/topics/async.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [async](<https://devfeed.tech/tags/async.md>), [best-practices](<https://devfeed.tech/tags/best-practices.md>), [cache](<https://devfeed.tech/tags/cache.md>), [caching](<https://devfeed.tech/tags/caching.md>), [callback](<https://devfeed.tech/tags/callback.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [refactoring](<https://devfeed.tech/tags/refactoring.md>), [tutorials](<https://devfeed.tech/tags/tutorials.md>)

### AI overview

The article examines how promise-based Service Worker code can become deeply nested and difficult to understand, despite promises being intended to improve on callback-heavy code. It discusses a network-first strategy with cache fallback for offline support and presents refactoring strategies, software development practices, and async functions to improve readability and maintainability.

### Source excerpt

If you've been writing JavaScript for a while, you've probably heard terms like callback hell or the pyramid of doom. When promises were added to JavaScript a few years ago, I remember reading a lot of blog posts claiming that these problems would be solved; unfortunately, that was a little too optimistic. With more and more web APIs becoming promise-based, we've proven that even promises don't prevent us from writing overly-nested, hard-to-read code.

## Learning How to Set Up Automated, Cross-browser JavaScript Unit Testing

DevFeed: [Learning How to Set Up Automated, Cross-browser JavaScript Unit Testing](<https://devfeed.tech/articles/learning-how-to-set-up-automated-cross-browser-javascript-unit-testing-29513.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/learning-how-to-set-up-automated-cross-browser-javascript-unit-testing/>)

Published: 2016-07-11T06:48:41Z

Content type: tutorial

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [JavaScript](<https://devfeed.tech/topics/javascript.md>), [Automation](<https://devfeed.tech/topics/automation.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>), [Mocha](<https://devfeed.tech/topics/mocha.md>), [Node.js](<https://devfeed.tech/topics/node-js.md>), [Puppeteer](<https://devfeed.tech/topics/puppeteer.md>)

Tags: [automated](<https://devfeed.tech/tags/automated.md>), [browser](<https://devfeed.tech/tags/browser.md>), [browsers](<https://devfeed.tech/tags/browsers.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [javascript](<https://devfeed.tech/tags/javascript.md>), [node-js](<https://devfeed.tech/tags/node-js.md>), [testing](<https://devfeed.tech/tags/testing.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>), [web-development](<https://devfeed.tech/tags/web-development.md>)

### AI overview

A tutorial on understanding and building automated cross-browser JavaScript unit testing. It explains the manual testing workflow first, then shows how automation can handle repetitive steps while preserving an understanding of how the process works.

### Source excerpt

We all know how important it is to test our code in multiple browsers. And I think for the most part, we in the web development community do a pretty good job at this--at least when first releasing a project.

## CSS Houdini Task Force and Its Significance for Web Styling

DevFeed: [CSS Houdini Task Force and Its Significance for Web Styling](<https://devfeed.tech/articles/houdini-maybe-the-most-exciting-development-in-css-you-ve-never-heard-of-29503.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/houdini-maybe-the-most-exciting-development-in-css-youve-never-heard-of/>)

Published: 2016-03-24T22:43:07Z

Content type: article

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [web-standards](<https://devfeed.tech/topics/web-standards.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [css](<https://devfeed.tech/tags/css.md>), [standards](<https://devfeed.tech/tags/standards.md>), [web-developers](<https://devfeed.tech/tags/web-developers.md>)

### AI overview

The article introduces the CSS Houdini Task Force, explains its connection to browser rendering engines and the web standards process, and discusses why web developers should care about it.

### Source excerpt

Earlier this year I had the privileged of attending the CSS Houdini Task Force face-to-face meeting in Sydney, Australia. While there I got to meet many of the Houdini members (most of whom work on browser rendering engines), and I got to see a bit of how the standards process works.

## Why I'm Excited About Native CSS Variables

DevFeed: [Why I'm Excited About Native CSS Variables](<https://devfeed.tech/articles/why-i-m-excited-about-native-css-variables-29535.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/why-im-excited-about-native-css-variables/>)

Published: 2015-12-06T20:43:53Z

Content type: opinion

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [Web platform](<https://devfeed.tech/topics/web-platform.md>), [Chrome Canary](<https://devfeed.tech/topics/chrome-canary.md>), [Sass](<https://devfeed.tech/topics/sass.md>), [Chrome](<https://devfeed.tech/topics/chrome.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [chrome-canary](<https://devfeed.tech/tags/chrome-canary.md>), [css](<https://devfeed.tech/tags/css.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [feature](<https://devfeed.tech/tags/feature.md>), [platform](<https://devfeed.tech/tags/platform.md>), [sass](<https://devfeed.tech/tags/sass.md>), [web](<https://devfeed.tech/tags/web.md>), [web-platform](<https://devfeed.tech/tags/web-platform.md>)

### AI overview

The article argues that native CSS Custom Properties are fundamentally different from Sass variables. It explains that Custom Properties are dynamic CSS properties scoped to the DOM, enabling capabilities and design patterns that preprocessors cannot provide, while suggesting that developers may use both approaches together.

### Source excerpt

A few weeks ago CSS variables--more accurately known as CSS Custom Properties--shipped in Chrome Canary behind the Experimental Web Platform Features flag.[1] When Chrome engineer Addy Osmani first tweeted about the release, he was met with a surprising amount of negativity, hostility, and skepticism. At least, it was surprising to me, given how excited I am about this feature.

## Do We Actually Need Specificity In CSS?

DevFeed: [Do We Actually Need Specificity In CSS?](<https://devfeed.tech/articles/do-we-actually-need-specificity-in-css-29498.md>)

Original publisher: [Read original article](<https://philipwalton.com/articles/do-we-actually-need-specificity-in-css/>)

Published: 2015-11-01T22:37:42Z

Content type: opinion

Language: en

Sources: [Philip Walton](<https://devfeed.tech/sources/philip-walton.md>)

Topics: [CSS](<https://devfeed.tech/topics/css.md>), [Web Development](<https://devfeed.tech/topics/web-development.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [css](<https://devfeed.tech/tags/css.md>), [web-development](<https://devfeed.tech/tags/web-development.md>)

### AI overview

This opinion article questions whether CSS specificity is necessary. It explains that specificity can be unintuitive and explores whether it is possible to prevent specificity from affecting the CSS cascade.

### Source excerpt

Okay, before I start, I want to get one thing out of the way upfront. This article is not a rant about how much I hate specificity. If you want to read an article like that, I'm sure you can find dozens elsewhere online.

[Next page](<https://devfeed.tech/sources/philip-walton.md?cursor=WyIyMDE1LTExLTAxVDIyOjM3OjQyKzAwOjAwIiwgIjk0ZWNhYTRiLTFiNmYtNGQ4Mi1iODkzLTRlZGIyN2NiNmU2ZiJd>)