A curated list of Web Performance Optimization. Everyone can contribute here!
:memo: Awesome WPO / Articles
:newspaper: Awesome WPO / Blogs
:books: Awesome WPO / Books
:book: Awesome WPO / Docs
:calendar: Awesome WPO / Events
:busts_in_silhouette: Awesome WPO / People
:movie_camera: Awesome WPO / Talks
Table of Contents
- Analyzers API
- Bundle Analyzer
- Benchmark - CSS
- Benchmark - JS
- Benchmark - PHP
- CDN - Monitor
- CDN - Utilities
- Image Optimizers
- Metrics Monitor
- Minifiers HTML
- Minifiers JS & CSS
- Sprite Generators
- Web Components
- Web server Benchmarks
- Web server Modules
- Other Awesome Lists
Go to ARTICLES.md.
Go to BLOGS.
Best books about WPO
- HTTP/2 in Action by Barry Pollard - Barry Pollard
- Web Performance in Action by Jeremy Wagner - Jeremy L. Wagner
- Book of Speed - Stoyan Stefanov
- Designing for Performance: Weighing Aesthetics and Speed - Lara Callender Hogan
- Even Faster Web Sites: Performance Best Practices for Web Developers - Steve Souders
- High Performance Browser Networking: What every web developer should know about networking and web performance - Ilya Grigorik
- High Performance Web Sites: Essential Knowledge for Front-End Engineers - Steve Souders
- High Performance Responsive Design: Building Faster Sites Across Devices – Tom Barker
- Lean Websites – Barbara Bermes
- Time Is Money: The Business Value of Web Performance – Tammy Everts
- Using WebPagetest - Rick Viscomi, Andy Davies, Marcel Duran
- Web Page Size, Speed, and Performance - Terrence Dorsey
- Web Performance Daybook Volume 2 - Stoyan Stefanov
- Web Performance Tuning - Patrick Killelea
- You Don't Know JS: Async & Performance - Kyle Simpson
- Linux, Apache, MySQL, PHP Performance End to End - Colin McKinnon
- Web Components in Action - Ben Farrell
- WPOStats - Case studies and experiments demonstrating the impact of web performance optimization (WPO) on user experience and business metrics.
- Browser Diet - A collaborative guide about front-end performance.
- PageSpeed Insights Rules - A guide created by PageSpeed Team. Deprecated. This is deprecated and will be shut down in May 2019. Version 5 is the latest and provides both real-world data from the Chrome User Experience Report and lab data from Lighthouse.
- Best Practices for Speeding Up Your Web Site - The list includes 35 best practices divided into 7 categories, created by Yahoo! Exceptional Performance team.
Go to PEOPLE.md.
Because community matters!
- Velocity – At Velocity, web operations, performance, and DevOps professionals learn to build fast, resilient, and highly available websites and apps.
They are categorized into MEETUPS.md.
They are categorized into TALKS.md.
- Web.dev - Get the web's modern capabilities on your own sites and apps with useful guidance and analysis from web.dev.
- Confess - Uses PhantomJS to headlessly analyze web pages and generate manifests.
- DebugBear - DebugBear is a website monitoring tool based on Lighthouse. See how your scores and metrics changed over time, with a focus on understanding what caused each change. DebugBear is a paid product with a free 30-day trial.
- Page Speed - The PageSpeed family of tools is designed to help you optimize the performance of your website. PageSpeed Insights products will help you identify performance best practices that can be applied to your site, and PageSpeed optimization tools can help you automate the process.
- Lighthouse - Auditing and performance metrics tool for Progressive Web Applications.
- YSlow - YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages.
- YSlow for PhantomJS - YSlow for PhantomJS also introduces new output formats for automated test frameworks: TAP (Test Anything Protocol) and JUnit.
- Grunt-WebPageTest - Grunt plugin for continuously measurement of WebPageTest. (Demo)
- Grunt-yslow - Grunt task for testing page performance using PhantomJS, a headless WebKit browser.
- Grunt-perfbudget - A Grunt.js task for enforcing a performance budget (more on performance budgets).
- Web Tracing Framework - Web Tracing Framework is a set of libraries, tools, and visualizers for the tracing and investigation of complex web applications
- HP LoadRunner - An automated performance and test automation product from Hewlett-Packard for application load testing: examining system behavior and performance, while generating actual load.
- Yandex.Tank - An extensible open source load testing tool for advanced linux users which is especially good as a part of an automated load testing suite.
- Pagelocity - A web performance optimization and analysis tool.
- Varvy - Test your site to see if it follows the Google guidelines for speed.
- Web Bloat Score Calculator - Compare size of a page to a compressed image of the same page
- Speed Racer - Collect performance metrics for your library/application using Chrome headless.
- Speedrank - Speedrank monitors the performance of your website in the background. It displays Lighthouse reports over time and delivers recommendations for improvement. Speedrank is a paid product with 14-day-trial.
Analyzers - API
- Node-yslowjs - YSlow.js on Node.js is a simple Node.js wrapper for programmatically running phantomjs yslow.js.
- PSI - PageSpeed Insights for Node - with reporting.
- Bundlesize - Keep your bundle size in check.
- source-map-explorer - Analyze and debug bundle space usage through source maps.
- Bundlephobia - Helps you find the performance impact of adding a npm package to your front-end bundle.
- Webpack bundle analyzer - Webpack plugin and CLI utility that represents bundle content as convenient interactive zoomable treemap.
- Disc - Visualise the module tree of browserify project bundles and track down bloat.
- Lasso-analyzer - analyze and Visualise project bundles created by Lasso.
- Packtracker.io - Check your webpack bundle stats on every pull request, and track them over time.
- Compression webpack plugin - Prepare compressed versions of assets to serve them with Content-Encoding.
Benchmark - CSS
- CSS-perf - Completely unscientific way of testing CSS performance. Most of these tests will revolve around methodologies and techniques for determining effective CSS architecture. Put another way, I want to know what works best given a particular comparison of CSS strategies.
- Matcha - Matcha allow you to design experiments that will measure the performance of your code. It is recommended that each bench focus on a specific point of impact in your application.
- Timing.js - Timing.js is a small set of helpers for working with the Navigation Timing API to identify where your application is spending its time. Useful as a standalone script, DevTools Snippet or bookmarklet.
- Stats.js - This class provides a simple info box that will help you monitor your code performance.
- Memory-stats.js - minimal monitor for JS Heap Size via performance memory.
Benchmark - PHP
- PHPench - PHPench creates a graphical output for a PHP benchmark. Plot the runtime of any function in realtime with GnuPlot and create an image out of the result.
- php-bench - Benchmark and profile PHP code blocks whilst measuring the performance footprint.
- Yahoo YSlow for Mobile/Bookmarklet - YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages.
- PageSpeed [Deprecated] - PageSpeed Insights is available as an open-source browser extension for Google Chrome. Webmasters and web developers can use PageSpeed Insights to evaluate the performance of their web pages and to get suggestions on how to improve them - Workaround by @Kiquenet - https://gist.github.com/davidsonfellipe/f8e3723b4dc0aaf9f6d4.
- PerfMap - A bookmarklet to create a front-end performance heatmap of resources loaded in the browser using the Resource Timing API.
- DOM Monster - A cross-platform, cross-browser bookmarklet that will analyze the DOM & other features of the page you're on, and give you its bill of health.
- CSS Stress - CSS Stress is a Testing and Performance Profiling.
- Performance-Bookmarklet - Analyze the current page through the Resource Timing API, Navigation Timing API and User-Timing - Sort of a light live WebPageTest. As Chrome Extension and Firefox Add-on under the name Performance-Analyser.
A content delivery network or content distribution network (CDN) is a large distributed system of servers deployed in multiple data centers across the Internet. The goal of a CDN is to serve content to end-users with high availability and high performance. See a large list of CDN in Wikipedia.
- PageCDN - A state of the art opensource CDN with aggressive content optimization using brotli-11 compression, HTTP/2 server push, better HTTP/2 multiplexing, and more. Supports 100s of libraries and 2000+ WordPress themes already. Easy to use, easy to link and very fast.
- jsDelivr - Similar to Google Hosted Libraries, jsDelivr is an open source CDN that allows developers to host their own projects and anyone to link to our hosted files on their websites.
- jQuery - jQuery CDN – Latest Stable Versions, powered by MaxCDN.
- :cn: UpYun CDN - CDN provided by upyun.
- :cn: Bootstrap中文网开放CDN服务 - Bootstrap Chinese net open CDN service (only HTTP).
To find useful more information for you make the right choice between paid CDNs, please visit CDNPlanet.
CDN - Monitor
CDN - Utilities
- Cdnex - Prepends asset urls with custom CDN urls.
- Gulp-google-cdn - Replaces script references with Google CDN ones.
- Browser Calories - The easiest way to measure your performance budget.
How to remove all this unnecessary data and give you a file without degrading quality.
- Grunt-smushit - Grunt plugin to remove unnecessary bytes of PNG and JPG using Yahoo Smushit.
- Gulp-smushit - Gulp plugin to optimize PNG and JPG using Yahoo Smushit. Made on top of smosh.
- Smush it - Smush it uses optimization techniques specific to image format to remove unnecessary bytes from image files. It is a "lossless" tool, which means it optimizes the images without changing their look or visual quality.
- Imagemin - Minify images seamlessly with Node.js.
- Sharp - The typical use case for this high speed Node.js module is to convert large images of many formats to smaller, web-friendly JPEG, PNG and WebP images of varying dimensions.
- Gm - GraphicsMagick and ImageMagick for node.
- Exexif - Pure elixir library to extract tiff and exif metadata from jpeg files.
- OptiPNG - OptiPNG is a PNG optimizer that recompresses image files to a smaller size, without losing any information.
- Grunt-contrib-imagemin - Minify PNG and JPEG images for Grunt.
- Gulp-imagemin - Minify PNG, JPEG, GIF and SVG images with imagemin for Gulp.
- Grunt-WebP - Convert your images to WebP format.
- Gulp-WebP - Convert images to WebP for Gulp.
- Imageoptim - Free app that makes images take up less disk space and load faster, without sacrificing quality. It optimizes compression parameters, removes junk metadata and unnecessary color profiles.
- Grunt-imageoptim - Make ImageOptim, ImageAlpha and JPEGmini part of your automated build process.
- ImageOptim-CLI - Automates ImageOptim, ImageAlpha, and JPEGmini for Mac to make batch optimization of images part of your automated build process.
- Tinypng - Advanced lossy compression for PNG images that preserves full alpha transparency.
- Kraken Web-interface - Optimize your images and will be available for download for 12 hours.
- Compressor - Online image compressor for JPG, PNG, SVG and GIF.
- Shrinkray - One-click optimization for images in your Github repos
- mozjpeg - Improved JPEG encoder.
- Jpegoptim - Utility to optimize/compress JPEG files.
- ZopfliPNG - A command line program to optimize PNG images.
- AdvPNG - Recompress png files to get the smallest possible size.
- Leanify - Lightweight lossless file minifier/optimizer.
- Trimage - A cross-platform tool for losslessly optimizing PNG and JPG files.
- ImageEngine - Cloud service for optimizing, resizing and caching images on the fly with great mobile support.
- lozad.js - Highly performant, light ~0.9kb and configurable lazy loader in pure JS with no dependencies for responsive images, iframes and more
- HeadJS- The only script in your HEAD. for Responsive Design, Feature Detections, and Resource Loading.
- Defer.js - Async Everything: Make the meat of your pages load faster with this JS morsel.
- InstantClick - InstantClick makes following links in your website instant.
- JIT - A JIT (Just In Time) plugin loader for Grunt. Load time of Grunt does not slow down even if there are many plugins.
- Phantomas - PhantomJS-based web performance metrics collector and monitoring tool.
- Showslow - open source tool that helps monitor various website performance metrics over time. It captures the results of YSlow, Page Speed Insights, WebPageTest and dynaTrace AJAX Edition.
- Bench - Using Phantomas (a PhantomJS backed client performance metrics scrapper). Benchmark a page, store results in MongoDB and display result via the built in server.
- Keepfast - Tool to monitor indicators related to performance of a web page.
- GTmetrix - GTmetrix uses Google Page Speed and Yahoo! YSlow to grade your site's performance and provides actionable recommendations to fix these issues.
- Pingbreak.com - Free Website and SSL Monitoring with response time alerting (on Slack, Twitter, Mattermost, Discord or custom Webhook).
- Pingdom Website Speed Test - Test the load time of that page, analyze it and find bottlenecks.
- Dotcom-tools - analyze your website's speed in real browsers from 20 locations worldwide.
- WebPageTest - Run a free website speed test from multiple locations around the globe using real browsers (IE and Chrome) and at real consumer connection speeds. You can run simple tests or perform advanced testing including multi-step transactions, video capture, content blocking and much more. Your results will provide rich diagnostic information including resource loading waterfall charts, Page Speed optimization checks and suggestions for improvements.
- Sitespeed.io - Sitespeed.io is an open source tool that will check your site against web performance best practice rules and use the Navigation Timing API to collect metrics. It will create XML & HTML output of the result.
- Grunt-phantomas - Grunt plugin wrapping phantomas to measure frontend performance.
- Perfjankie - Runtime Browser Performance regression suite (Demo).
- BrowserView Monitoring - Continually checks web page load times in Internet Explorer, Chrome and Firefox from multiple points around the world.
- New Relic Browser Monitoring - Monitor your browser-side applications in real time, with a focus on real end users’ experiences.
- DareBoost - Real Browser Monitoring. Offers complete reports about web performance and quality using YSlow, Page Speed and numerous custom tips.
Metrics Monitor - API
- WebPageTest API Wrapper for NodeJS - WebPageTest API Wrapper is a NPM package that wraps WebPageTest API for NodeJS as a module and a command-line tool.
Minifiers - HTML
- HTMLCompressor - HtmlCompressor is a small, fast and very easy to use Java library that minifies given HTML or XML source by removing extra whitespaces, comments and other unneeded characters without breaking the content structure. As a result page become smaller in size and load faster. A command-line version of the compressor is also available.
- Django-htmlmin - django-html in an HTML minifier for Python with full support for HTML 5. It supports Django, Flask and any other Python web framework. It also provides a command line tool that can be used for static websites or deployment scripts.
- Grunt-contrib-htmlmin - A grunt plugin to minify HTML that uses HTMLMinifier.
- Gulp-htmlmin - A gulp plugin to minify HTML that uses HTMLMinifier.
- Grunt-htmlcompressor - Grunt plugin for html compression, using htmlcompressor.
- HTML_minifier - Ruby wrapper for kangax html-minifier.
- HTML_press - Ruby gem for compressing html, that removes all whitespace junk, and leaves only HTML.
- Koa HTML Minifier - Middleware that minifies your HTML responses using html-minifier. It uses html-minifier's default options which are all turned off by default, so you have to set the options otherwise it's not going to do anything.
- HTML Minifier Online - A HTML min tool by kangax (HTMLMinifier Creator).
- Minimize - Minimize is a HTML minifier based on the node-htmlparser,currently, HTML minifier is only usuable server side. Client side minification will be added in a future release.
- Html-minifier - A simple Windows command line tool to minify your HTML, Razor views & Web Forms views
Minifiers - JS & CSS
- CSSO - CSS minimizer unlike others. In addition to usual minification techniques it can perform structural optimization of CSS files, resulting in smaller file size compared to other minifiers.
- Grunt-contrib-concat - A Grunt plugin to concatenate files.
- Clean-css - A fast, efficient, and well tested CSS minifier for node.js.
- JSCompress - The most minimalistic online JS Compress tool.
- CSSshrink - Because CSS is ospon the critical path to rendering pages. It must be small! Or else!
- Grunt-cssshrink - This is just a grunt wrapper for CSS Shrink.
- Gulp-cssshrink - Shrinks CSS files using cssshrink for Gulp.
- Prettyugly - Uglify (strip spaces) or prettify (add consistent spaces) CSS code.
- Grunt-contrib-cssmin - CSS Minifier for Grunt.
- Gulp-cssmin - CSS Minifier for Gulp.
- Grunt-uncss - A grunt task for removing unused CSS from your projects.
- Gulp-uncss - A gulp task for removing unused CSS from your projects.
- Socialite.js - Socialite provides a very easy way to implement and activate a plethora of social sharing buttons — any time you wish. On document load, on article hover, on any event.
- uCSS - uCSS is made for crawling (large) websites to find unused CSS selectors, but not remove unused CSS.
- HTTPinvoke- A no-dependencies HTTP client library for browsers and Node.js with a promise-based or Node.js-style callback-based API to progress events, text and binary file upload and download, partial response body, request and response headers, status code.
- Critical - Extract & Inline Critical-path CSS in HTML pages (alpha).
- Csscolormin - Utility that minifies CSS colors, example: min("white"); // minifies to "#fff".
- StyleStats - StyleStats is a Node.js library to collect CSS statistics.
- Perf-Tooling - Perf Tooling is a shared resource to keep track of new and existent performance tools.
- TMI - TMI (Too Many Images) - discover your image weight on the web.
- Glue - Glue is a simple command line tool to generate sprites:
- Pitomba-spriter - Spriter is a simple and flexible dynamic sprite generator for CSS, using Python. It can process CSS both synchronous and asynchronous as it provides classes to be used in your python code and also a watcher that listens to your filesystem and changes CSS and sprite as soon as a static is changed.
- Grunt-spritesmith - Grunt task for converting a set of images into a spritesheet and corresponding CSS variables.
- Grunt-sprite-css-replace - Grunt task that generates a sprite from images referenced in a stylesheet and then updates the references with the new sprite image and positions.
- Grunt-svg-sprite - SVG sprites & stacks galore — Grunt plugin wrapping around svg-sprite that reads in a bunch of SVG files, optimizes them and creates SVG sprites and CSS resources in various flavours.
- Gulp-sprite - gulp task for creating an image sprite and the corresponding stylesheets for Gulp.
- Gulp-svg-sprites - gulp task for creating svg sprites.
- SvgToCSS - Optimizes and renders SVG files in css / sass sprites.
- Assetgraph-sprite - Assetgraph transform for auto generating sprites based on the CSS dependency graph.
- Sprite Cow - Sprite Cow helps you get the background-position, width and height of sprites within a spritesheet as a nice bit of copyable css.
- Spriteme - Create, integrate, and maintain CSS sprites with ease.
- ZeroSprites - ZeroSprites is a CSS sprites generator aimed at area minimization using algorithms used in the field of VLSI floorplanning.
- CSS Sprite Generator - CSS sprites allow you to combine multiple images into a single file.
- Sprity - A modular image sprite generator with a lot of features: supports retina sprites, supports different output formats, generates sprites and proper style files out of a directory of images, etc...
- Sprite Factory - The sprite factory is a ruby library that can be used to generate CSS sprites. It combines individual image files from a directory into a single unified sprite image and creates an appropriate CSS stylesheet for use in your web application.
- SVGO - SVGO is a Nodejs-based tool for optimizing SVG vector graphics files.
- SVG OMG - SVGOMG is SVGO's Missing GUI, aiming to expose the majority, if not all the configuration options of SVGO.
- Grunt-svgmin - Minify SVG using SVGO for Grunt.
- Gulp-svgmin - Minify SVG with SVGO for Gulp.
- Scour - Scour is an open-source Python script that aggressively cleans SVG files, removing a lot of 'cruft' that certain tools or authors embed into their documents.
- SVG Cleaner - SVG Cleaner could help you to clean up your SVG files from unnecessary data. It has a lot of options for cleanup and optimization, works in batch mode, provides threaded processing on the multicore processors.
- Polymer Bundler - Polymer-bundler is a library for packaging project assets for production to minimize network round-trips.
- Gulp-vulcanize - Concatenate a set of Web Components into one file that use Vulcanize.
Web server Benchmarks
- HTTPerf - httperf is a tool for measuring web server performance. It provides a flexible facility for generating various HTTP workloads and for measuring server performance.
- Apache JMeter - Open source load testing tool: It is a Java platform application.
- Locust - An open source load testing tool. Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
- Autoperf - Autoperf is a ruby driver for httperf, designed to help you automate load and performance testing of any web application - for a single end point, or through log replay.
- HTTPerf.rb - Simple Ruby interface for httperf, written in Ruby.
- PHP-httperf - PHP Port of HTTPerf.rb.
- HTTPerf.js - JS Port of HTTPerf.rb.
- HTTPerf.py - Python Port of HTTPerf.rb.
- Gohttperf - Go Port of HTTPerf.rb.
- wrk - A HTTP benchmarking tool (with optional Lua scripting for request generation, response processing, and custom reporting)
- beeswithmachineguns - A utility for arming (creating) many bees (micro EC2 instances) to attack (load test) targets (web applications).
- k6 - An open source load testing tool built for developers. Easy to integrate into CI pipelines. Tests are written in ES6 JS and you can test APIs, microservices and websites using HTTP/1.1, HTTP/2 and WebSocket.
Web server Modules
- WebP-detect - WebP with Accept negotiation.
- Web Performance Working Group - The mission of the Web Performance Working Group, part of the Rich Web Client Activity, is to provide methods to measure aspects of application performance of user agent features and APIs.
- Page Visibility - This specification defines a means for site developers to programmatically determine the current visibility state of the page in order to develop power and CPU efficient web applications.
- Navigation Timing - This specification defines a unified interface to store and retrieve high resolution performance metric data related to the navigation of a document.
- Resource Timing - This specification defines an interface for web applications to access the complete timing information for resources in a document.
- User Timing - This specification defines an interface to help web developers measure the performance of their applications by giving them access to high precision timestamps.
- Performance Timeline - This specification defines a unified interface to store and retrieve performance metric data. This specification does not cover individual performance metric interfaces.
- CSS will-change - This specification defines the
will-changeCSS property which allows an author to declare ahead-of-time what properties are likely to change in the future, so the UA can set up the appropriate optimizations some time before they’re needed. This way, when the actual change happens, the page updates in a snappy manner.
- Resource Hints - This specification defines the dns-prefetch, preconnect, prefetch, and prerender relationships of the HTML Link Element (<link>). These primitives enable the developer, and the server generating or delivering the resources, to assist the user agent in the decision process of which origins it should connect to, and which resources it should fetch and preprocess to improve page performance.
- HTTP Archive - It's a permanent repository of web performance information such as size of pages, failed requests, and technologies utilized. This performance information allows us to see trends in how the Web is built and provides a common data set from which to conduct web performance research.