├── .circleci └── config.yml ├── .github └── PULL_REQUEST_TEMPLATE.md ├── CODE_OF_CONDUCT.md ├── COURSES.md ├── LICENSE ├── README.md ├── content ├── ARTICLES.md ├── BLOGS.md ├── MEETUPS.md ├── README.md └── TALKS.md ├── package.json ├── website ├── .gitignore ├── .prettierignore ├── .prettierrc ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── package.json ├── src │ ├── components │ │ ├── Footer.js │ │ ├── Header.js │ │ ├── Hello.js │ │ ├── ItemDate.js │ │ ├── Layout.js │ │ ├── Link.js │ │ ├── PostContent.js │ │ ├── PostLink.js │ │ ├── SEO.js │ │ ├── Section.js │ │ ├── Text.js │ │ ├── Title.js │ │ └── layout.css │ ├── images │ │ ├── gatsby-icon.jpg │ │ └── profile.jpg │ ├── pages │ │ ├── 404.js │ │ └── page.js │ ├── styles │ │ ├── screen.js │ │ └── theme.js │ └── templates │ │ └── blogTemplate.js └── yarn.lock └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2.1 2 | orbs: 3 | node: circleci/node@1.1.6 4 | jobs: 5 | build-and-test: 6 | executor: 7 | name: node/default 8 | steps: 9 | - checkout 10 | - node/with-cache: 11 | steps: 12 | - run: yarn 13 | - run: yarn lint 14 | workflows: 15 | build-and-test: 16 | jobs: 17 | - build-and-test 18 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Change 2 | _Choose one_ 3 | - Tool 4 | - Case studies 5 | - Books 6 | - Conferences 7 | - Tutorials 8 | - Meetups 9 | 10 | ## Description of changes 11 | 12 | - _Please describe your changes_ 13 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | email@fellipe.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /COURSES.md: -------------------------------------------------------------------------------- 1 | ## Courses on Website Performance Optimization (WPO) 2 | 3 | If you want to master the art of Website Performance Optimization (WPO), check out these courses from reputable platforms: 4 | 5 | ### [Pluralsight] 6 | 7 | 1. [Website Performance](https://www.pluralsight.com/courses/website-performance) 8 | 2. [Web Performance](https://www.pluralsight.com/courses/web-performance) 9 | 3. [Using Google PageSpeed Insights](https://www.pluralsight.com/courses/google-pagespeed-insights-web-performance) 10 | 4. [A Web Developer's Guide to Images](https://www.pluralsight.com/courses/dev-guide-to-images) 11 | 5. [Responsive Web Images](https://www.pluralsight.com/courses/responsive-web-images) 12 | 6. [Tracking Real World Web Performance](https://www.pluralsight.com/courses/web-performance-tracking) 13 | 14 | ### [LinkedIn Learning] 15 | 16 | 1. [Designing Websites for Performance](https://www.linkedin.com/learning/designing-websites-for-performance) 17 | 2. [HTTP/2: Developing for Performance](https://www.linkedin.com/learning/http-2-developing-for-performance) 18 | 19 | These courses cover a range of essential topics to optimize your website's performance. Whether you're interested in speed optimization, image handling, or monitoring real-world web performance, these courses have got you covered. Happy learning! 20 | 21 | Note: This listing has no affiliation with the companies and teachers of the courses. -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Davidson Fellipe 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Awesome WPO [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome) 2 | 3 | [![GitHub contributors](https://img.shields.io/github/contributors/davidsonfellipe/awesome-wpo.svg)](https://github.com/davidsonfellipe/awesome-wpo/graphs/contributors) 4 | [![MIT license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat)](https://davidsonfellipe.mit-license.org/) 5 | 6 | Welcome to the curated list of Web Performance Optimization resources. This repository aims to gather the best tools, articles, blogs, books, and talks related to optimizing website performance. Whether you're a developer, designer, or performance enthusiast, you'll find valuable content here to supercharge your web projects. 7 | 8 | ## Categories 9 | 10 | :memo: [Awesome WPO / Articles](#articles) 11 | 12 | :newspaper: [Awesome WPO / Blogs](#blogs) 13 | 14 | :books: [Awesome WPO / Books](#books) 15 | 16 | :book: [Awesome WPO / Docs](#documentation) 17 | 18 | :calendar: [Awesome WPO / Events](#events) 19 | 20 | :movie_camera: [Awesome WPO / Talks](#talks) 21 | 22 | ## Table of Contents 23 | 24 | Here's a quick overview of the categories covered in this collection: 25 | 26 | - [Analyzers](#analyzers) 27 | - [Analyzers API](#analyzers---api) 28 | - [Application Performance Monitoring](#application-performance-monitoring) 29 | - [Bundle Analyzer](#bundle-analyzer) 30 | - [Benchmark - CSS](#benchmark---css) 31 | - [Benchmark - JS](#benchmark---javascript) 32 | - [Benchmark - PHP](#benchmark---php) 33 | - [Bookmarklets](#bookmarklets) 34 | - [CDN](#cdn) 35 | - [CDN - Monitor](#cdn---monitor) 36 | - [CDN - Utilities](#cdn---utilities) 37 | - [Extensions](#extensions) 38 | - [Image Optimizers](#image-optimizers) 39 | - [Generators](#generators) 40 | - [Lazyloaders](#lazyloaders) 41 | - [Loaders](#loaders) 42 | - [Metrics Monitor](#metrics-monitor) 43 | - [Minifiers HTML](#minifiers---html) 44 | - [Minifiers JS & CSS](#minifiers---js--css) 45 | - [Miscellaneous](#miscellaneous) 46 | - [SVG](#svg) 47 | - [Web Components](#web-components) 48 | - [Web server Benchmarks](#web-server-benchmarks) 49 | - [Web server Modules](#web-server-modules) 50 | - [Specs](#specs) 51 | - [Stats](#stats) 52 | - [Other Awesome Lists](#other-awesome-lists) 53 | - [Contributing](#contributing) 54 | 55 | ## Articles 56 | 57 | > Go to [ARTICLES.md](content/ARTICLES.md). 58 | 59 | ## Blogs 60 | 61 | > Go to [BLOGS](content/BLOGS.md). 62 | 63 | ## Books 64 | 65 | > Best books about WPO 66 | 67 | - [HTTP/2 in Action by Barry Pollard](https://www.manning.com/books/http2-in-action) - Barry Pollard 68 | - [Web Performance in Action by Jeremy Wagner](https://www.manning.com/books/web-performance-in-action) - Jeremy L. Wagner 69 | - [Book of Speed](https://www.bookofspeed.com/) - Stoyan Stefanov 70 | - [Designing for Performance: Weighing Aesthetics and Speed](http://designingforperformance.com/) - Lara Callender Hogan 71 | - [Even Faster Web Sites: Performance Best Practices for Web Developers](http://shop.oreilly.com/product/9780596522315.do) - Steve Souders 72 | - [High Performance Browser Networking: What every web developer should know about networking and web performance](http://shop.oreilly.com/product/0636920028048.do) - Ilya Grigorik 73 | - [High Performance JavaScript](http://shop.oreilly.com/product/9780596802806.do) - Nicholas C. Zakas 74 | - [High Performance Web Sites: Essential Knowledge for frontend Engineers](http://books.google.de/books/about/High_Performance_Web_Sites.html?id=jRVlgNDOr60C&redir_esc=y) - Steve Souders 75 | - [High Performance Responsive Design: Building Faster Sites Across Devices](http://shop.oreilly.com/product/0636920033103.do) – Tom Barker 76 | - [Lean sites](https://www.sitepoint.com/premium/books/lean-websites) – Barbara Bermes 77 | - [Time Is Money: The Business Value of Web Performance](http://shop.oreilly.com/product/0636920041450.do) – Tammy Everts 78 | - [Using WebPagetest](http://shop.oreilly.com/product/0636920033592.do) - Rick Viscomi, Andy Davies, Marcel Duran 79 | - [Web Page Size, Speed, and Performance](http://www.oreilly.com/webops-perf/free/webpage-size-speed-perf.csp) - Terrence Dorsey 80 | - [Web Performance Daybook Volume 2](https://www.amazon.com/Web-Performance-Daybook-Stoyan-Stefanov-ebook/dp/B008CQA8BA/) - Stoyan Stefanov 81 | - [Web Performance Tuning](http://shop.oreilly.com/product/9780596001728.do) - Patrick Killelea 82 | - [You Don't Know JS: Async & Performance](https://www.oreilly.com/library/view/you-dont-know/9781491905197/) - Kyle Simpson 83 | - [Linux, Apache, MySQL, PHP Performance end-to-end](https://play.google.com/store/books/details/Colin_McKinnon_Linux_Apache_MySQL_PHP_Performance?id=Z3ciBgAAQBAJ) - Colin McKinnon 84 | - [Web Components in Action](https://www.manning.com/books/web-components-in-action) - Ben Farrell 85 | - [Image Optimization](https://www.smashingmagazine.com/printed-books/image-optimization/) - Addy Osmani 86 | 87 | ## Case studies 88 | 89 | - [WPOStats](https://wpostats.com/) - Case studies and experiments demonstrating the impact of web performance optimization (WPO) on user experience and business metrics. 90 | - [Google Developers Case Studies](https://developers.google.com/web/showcase) - Learn why and how other developers have used the web to create amazing web experiences for their users. 91 | 92 | ## Documentation 93 | 94 | - [Browser Diet](https://browserdiet.com/en/) - A collaborative guide about frontend performance. 95 | - [PageSpeed Insights Rules](https://developers.google.com/speed/docs/insights/rules) - A guide created by PageSpeed Team. 96 | 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. 97 | - [Best Practices for Speeding Up Your site](https://developer.yahoo.com/performance/rules.html) - The list includes 35 best practices divided into 7 categories, created by Yahoo! Exceptional Performance team. 98 | 99 | ## Events 100 | 101 | > Because community matters! 102 | 103 | ### Conferences 104 | 105 | - [We Love Speed](https://www.welovespeed.com/) – We Love Speed ​​was born from the desire to share knowledge and experiences in web performance as widely as possible. 106 | - [PWA Summit](https://pwasummit.org/) – A free, online, single-track conference focused on helping everyone succeed with Progressive Web Apps. 107 | - [Velocity](http://conferences.oreilly.com/velocity) – At Velocity, web operations, performance, and DevOps professionals learn to build fast, resilient, and highly available sites and apps. 108 | - [performance.now()](https://perfnow.nl/) – The performance.now() conference will return to Amsterdam! We're a single-track conference with fourteen world-class speakers, covering today’s most important web performance insights. 109 | - [#PerfMatters](https://perfmattersconf.com/) – #PerfMatters Conference is the ONLINE web performance conference by internationally renowned performance developers. 110 | 111 | ### Meetups 112 | 113 | > They are categorized into [content/MEETUPS.md](content/MEETUPS.md). 114 | 115 | ## Talks 116 | 117 | > They are categorized into [content/TALKS.md](content/TALKS.md). 118 | 119 | # Tools 120 | 121 | ## Analyzers 122 | 123 | - [Web.dev](https://web.dev/) - Get the web's modern capabilities on your own sites and apps with useful guidance and analysis from web.dev. 124 | - [Confess](https://github.com/jamesgpearce/confess) - Uses PhantomJS to headlessly analyze web pages and generate manifests. 125 | - [DebugBear](https://www.debugbear.com/) - DebugBear is a site 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. 126 | - [Page Speed](https://developers.google.com/speed/pagespeed/) - The PageSpeed family of tools is designed to help you optimize the performance of your site. 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. 127 | - [Lighthouse](https://github.com/GoogleChrome/lighthouse) - Auditing and performance metrics tool for Progressive Web Applications. 128 | - [Screpy](https://screpy.com) - AI-Based SEO Analysis & Monitoring Tool 129 | - [YSlow](https://github.com/marcelduran/yslow) - YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high-performance web pages. 130 | - [YSlow for PhantomJS](http://yslow.org/phantomjs/) - YSlow for PhantomJS also introduces new output formats for automated test frameworks: TAP (Test Anything Protocol) and JUnit. 131 | - [Grunt-WebPageTest](https://github.com/sideroad/grunt-wpt) - Grunt plugin for continuous measurement of WebPageTest. ([Demo](http://sideroad.github.io/sample-wpt-page/)) 132 | - [Grunt-yslow](https://github.com/andyshora/grunt-yslow) - Grunt task for testing page performance using PhantomJS, a headless WebKit browser. 133 | - [Grunt-perfbudget](https://github.com/tkadlec/grunt-perfbudget) - A Grunt.js task for enforcing a performance budget ([more on performance budgets](https://timkadlec.com/2013/01/setting-a-performance-budget/)). 134 | - [Web Tracing Framework](https://github.com/google/tracing-framework) - Web Tracing Framework is a set of libraries, tools, and visualizers for the tracing and investigation of complex web applications 135 | - [Yandex.Tank](https://github.com/yandex/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. 136 | - [Yellow Lab Tools](http://yellowlab.tools) - Online quick and easy tool that audits frontend bad practices, reveals performance issues, and profiles JavaScript. 137 | - [Pagelocity](http://pagelocity.com/) - A web performance optimization and analysis tool. 138 | - [Varvy](https://varvy.com/pagespeed/) - Test your site to see if it follows the Google guidelines for speed. 139 | - [Web Bloat Score Calculator](http://www.webbloatscore.com/) - Compare size of a page to a compressed image of the same page 140 | - [Speed Racer](https://github.com/ngryman/speedracer) - Collect performance metrics for your library/application using Chrome headless. 141 | - [Speedrank](https://speedrank.app/) - Speedrank monitors the performance of your site in the background. It displays Lighthouse reports over time and delivers recommendations for improvement. Speedrank is a paid product with 14-day-trial. 142 | - [Lightest App](https://lightest.app/) - Webpage load time is extremely important for conversion and revenue. Visualize web performance against competitors. 143 | 144 | ## Analyzers - API 145 | 146 | - [Node-yslowjs](https://github.com/jmervine/node-yslowjs) - YSlow.js on Node.js is a simple Node.js wrapper for programmatically running phantomjs yslow.js. 147 | - [PSI](https://github.com/addyosmani/psi) - PageSpeed Insights for Node.js - with reporting. 148 | 149 | # Application Performance Monitoring 150 | 151 | - [Datadog APM](https://www.datadoghq.com/product/apm/) - End-to-end distributed tracing and APM at scale, correlated to all telemetry. 152 | - [BetterUptime](https://betteruptime.com) - A good website monitoring tool (bundling status page, incident notification) 153 | - [Pingdom](https://pingdom.com) - A tool to get the uptime of your website (with probes from different locations) 154 | - [UptimeRobot](https://uptimerobot.com) - Another uptime monitoring tool (with a generous free plan) 155 | - [RoboMiri](https://robomiri.com) - RoboMiri is a stable Uptime Monitor that offers a wide range of monitors: cronjob, keyword, website, port, ping. 25 uptime checks with 3 minutes interval checks for free. Alerts via Phone Call, SMS, Email, and WebHook. 156 | - [StatusList](https://statuslist.app) - Uptime, performance monitoring with debug details, and hosted status page in one simple dashboard. 157 | 158 | ## Bundle Analyzer 159 | 160 | - [Bundlesize](https://github.com/siddharthkp/bundlesize) - Keep your bundle size in check. 161 | - [source-map-explorer](https://github.com/danvk/source-map-explorer) - Analyze and debug bundle space usage through source maps. 162 | - [Bundlephobia](https://bundlephobia.com/) - Helps you find the performance impact of adding an npm package to your frontend bundle. 163 | - [Webpack bundle analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) - webpack plugin and CLI utility that represents bundle content as a convenient interactive zoomable treemap. 164 | - [Disc](http://hughsk.io/disc/) - Visualise the module tree of browserify project bundles and track down bloat. 165 | - [Lasso-analyzer](https://github.com/ajay2507/lasso-analyzer) - analyze and Visualise project bundles created by Lasso. 166 | - [Packtracker.io](https://packtracker.io) - Check your webpack bundle stats on every pull request, and track them over time. 167 | - [Compression webpack plugin](https://github.com/webpack-contrib/compression-webpack-plugin) - Prepare compressed versions of assets to serve them with Content-Encoding. 168 | - [BundleStats](https://github.com/relative-ci/bundle-stats) - Generate bundle report(bundle size, assets, modules, packages) and compare the results between different builds 169 | 170 | ## Benchmark - CSS 171 | 172 | - [CSS-perf](https://github.com/mdo/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. 173 | 174 | ## Benchmark - JavaScript 175 | 176 | > A set of tools for creating test cases and comparing different implementations in JavaScript. 177 | 178 | - [JSPerf](http://jsperf.com/) - jsPerf aims to provide an easy way to create and share test cases, comparing the performance of different JavaScript snippets by running benchmarks. `Temporarily out, follow this issue for updates: https://github.com/jsperf/jsperf.com/issues/537` 179 | - [Benchmark.js](http://benchmarkjs.com/) - A robust benchmarking library that works on nearly all JavaScript platforms, supports high-resolution timers, and returns statistically significant results. 180 | - [JSlitmus](https://github.com/broofa/jslitmus) - JSLitmus is a lightweight tool for creating ad-hoc JavaScript benchmark tests. 181 | - [Matcha](https://github.com/logicalparadox/matcha) - Matcha allows 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. 182 | - [Timing.js](https://github.com/addyosmani/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. 183 | - [Stats.js](https://github.com/mrdoob/stats.js) - This class provides a simple info box that will help you monitor your code performance. 184 | - [PerfTests](https://github.com/kogarashisan/PerfTests) - Performance tests of JavaScript inheritance models. 185 | - [Memory-stats.js](https://github.com/paulirish/memory-stats.js) - minimal monitor for JS Heap Size via performance memory. 186 | 187 | ## Benchmark - PHP 188 | 189 | - [PHPench](https://github.com/mre/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. 190 | - [php-bench](https://github.com/jacobbednarz/php-bench) - Benchmark and profile PHP code blocks whilst measuring the performance footprint. 191 | 192 | ## Bookmarklets 193 | 194 | - [Yahoo YSlow for Mobile/Bookmarklet](https://developer.yahoo.com/yslow/) - YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high-performance web pages. 195 | - [PerfMap](https://github.com/zeman/perfmap) - A bookmarklet to create a frontend performance heatmap of resources loaded in the browser using the Resource Timing API. 196 | - [DOM Monster](https://github.com/madrobby/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. 197 | - [CSS Stress](http://andy.edinborough.org/CSS-Stress-Testing-and-Performance-Profiling) - CSS Stress is a Testing and Performance Profiling. 198 | - [Performance-Bookmarklet](https://github.com/micmro/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](https://chrome.google.com/webstore/detail/performance-analyser/djgfmlohefpomchfabngccpbaflcahjf?hl=en) and [Firefox Add-on](https://addons.mozilla.org/en-us/firefox/addon/performance-analyser/?src=cb-dl-created) under the name Performance-Analyser. 199 | 200 | ## CDN 201 | 202 | > 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](http://en.wikipedia.org/wiki/Content_delivery_network#Notable_content_delivery_service_providers). 203 | 204 | - [Cloudflare CDN](https://www.cloudflare.com/cdn/) - A content delivery network that uses next-gen tech to deliver fast, reliable, CDN services 205 | - [PageCDN](https://pagecdn.com/lib) - 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. 206 | - [jsDelivr](https://github.com/jsdelivr/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 sites. 207 | - [Google Hosted Libraries](https://developers.google.com/speed/libraries/) - Google Hosted Libraries is a content distribution network for the most popular, open-source JavaScript libraries. 208 | - [CDNjs](https://cdnjs.com/) - An open-source CDN for JavaScript and CSS sponsored by CloudFlare that hosts everything from jQuery and Modernizr to Bootstrap. 209 | - [Amazon CloudFront](https://aws.amazon.com/cloudfront/) - A content delivery network by Amazon that integrates nicely with other Amazon services or can be used standalone. 210 | - [jQuery](http://code.jquery.com/) - jQuery CDN – Latest Stable Versions, powered by MaxCDN. 211 | - :cn: [UpYun CDN](http://jscdn.upai.com/) - CDN provided by upyun. 212 | - :cn: [Bootstrap 中文网开放 CDN 服务](http://www.bootcdn.cn/) - Bootstrap Chinese net open CDN service (only HTTP). 213 | - :ru: [Yandex CDN](https://tech.yandex.ru/jslibs/) - Yandex Content Delivery Network hosts popular third-party JavaScript and CSS libraries (best for use in Russia). 214 | 215 | > To find useful more information for you to make the right choice between paid CDNs, please visit [CDNPlanet](http://www.cdnplanet.com/). 216 | 217 | ## CDN - Monitor 218 | 219 | - [CDNperf](http://www.cdnperf.com/) - finds you fast and reliable JavaScript CDNs that make your sites snappy and happy. 220 | 221 | ## CDN - Utilities 222 | 223 | - [Gulp-google-cdn](https://github.com/sindresorhus/gulp-google-cdn) - Replaces script references with Google CDN ones. 224 | 225 | ## Extensions 226 | 227 | - [Browser Calories](https://github.com/zenorocha/browser-calories-chrome) - The easiest way to measure your performance budget. 228 | 229 | ## Generators 230 | 231 | - [AtBuild](https://github.com/jarred-sumner/atbuild) - JavaScript code generation tool that lets you write JavaScript that outputs JavaScript. Good for unrolling loops and writing libraries that compile away the runtime 232 | - [Glue](https://github.com/jorgebastida/glue) - Glue is a simple command-line tool to generate sprites: 233 | - [Pitomba-spriter](https://github.com/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. 234 | - [Grunt-spritesmith](https://github.com/Ensighten/grunt-spritesmith) - Grunt task for converting a set of images into a sprite sheet and corresponding CSS variables. 235 | - [Grunt-sprite-css-replace](https://www.npmjs.com/package/grunt-sprite-css-replace) - Grunt task that generates a sprite from images referenced in a style sheet and then updates the references with the new sprite image and positions. 236 | - [Grunt-svg-sprite](https://www.npmjs.com/package/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 flavors. 237 | - [Gulp-sprite](https://github.com/aslansky/gulp-sprite) - gulp task for creating an image sprite and the corresponding style sheets for Gulp. 238 | - [Gulp-svg-sprites](https://github.com/shakyShane/gulp-svg-sprites) - gulp task for creating SVG sprites. 239 | - [SvgToCSS](https://github.com/kajyr/SvgToCSS) - Optimizes and renders SVG files in CSS / Sass sprites. 240 | - [Assetgraph-sprite](https://github.com/assetgraph/assetgraph-sprite) - Assetgraph transform for auto-generating sprites based on the CSS dependency graph. 241 | - [Sprite Cow](http://www.spritecow.com/) - Sprite Cow helps you get the background-position, width, and height of sprites within a spritesheet as a nice bit of copyable CSS. 242 | - [ZeroSprites](http://zerosprites.com/) - ZeroSprites is a CSS sprites generator aimed at area minimization using algorithms used in the field of VLSI floorplanning. 243 | - [CSS Sprite Generator](http://css.spritegen.com/) - CSS sprites allow you to combine multiple images into a single file. 244 | - [Sprity](https://github.com/sprity/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... 245 | - [Sprite Factory](https://github.com/jakesgordon/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 style sheet for use in your web application. 246 | 247 | ## Image Optimizers 248 | 249 | > How to remove all this unnecessary data and give you a file without degrading quality. 250 | 251 | - [Shortpixel](https://shortpixel.com/online-image-compression) - Compress Your Image by removing unnecessary bytes of the image and Convert it into WebP/AVIF 252 | - [Grunt-smushit](https://github.com/heldr/grunt-smushit) - Grunt plugin to remove unnecessary bytes of PNG and JPG using Yahoo Smushit. 253 | - [Gulp-smushit](https://github.com/heldr/gulp-smushit) - Gulp plugin to optimize PNG and JPG using Yahoo Smushit. Made on top of smosh. 254 | - [Smush it](http://www.imgopt.com/) - 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. 255 | - [Imagemin](https://github.com/imagemin/imagemin) - Minify images seamlessly with Node.js. 256 | - [Sharp](https://github.com/lovell/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. 257 | - [Gm](https://github.com/aheckmann/gm) - GraphicsMagick and ImageMagick for Node.js. 258 | - [Exexif](https://github.com/h4cc/awesome-elixir) - Pure elixir library to extract tiff and exif metadata from JPEG files. 259 | - [ExifCleaner](https://exifcleaner.com) - GUI app to remove EXIF metadata from images and video files with drag and drop. Free and open source. 260 | - [OptiPNG](http://optipng.sourceforge.net/) - OptiPNG is a PNG optimizer that recompresses image files to a smaller size, without losing any information. 261 | - [Grunt-contrib-imagemin](https://github.com/gruntjs/grunt-contrib-imagemin) - Minify PNG and JPEG images for Grunt. 262 | - [Gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) - Minify PNG, JPEG, GIF and SVG images with imagemin for Gulp. 263 | - [Grunt-WebP](https://github.com/somerandomdude/grunt-webp) - Convert your images to WebP format. 264 | - [Gulp-WebP](https://github.com/sindresorhus/gulp-webp) - Convert images to WebP for Gulp. 265 | - [Imageoptim](https://imageoptim.com/) - Free app that makes images take up less disk space and load faster, without sacrificing quality. It optimizes compression parameters, and removes junk metadata and unnecessary color profiles. 266 | - [Grunt-imageoptim](https://github.com/JamieMason/grunt-imageoptim) - Make ImageOptim, ImageAlpha, and JPEGmini part of your automated build process. 267 | - [ImageOptim-CLI](https://github.com/JamieMason/ImageOptim-CLI) - Automates ImageOptim, ImageAlpha, and JPEGmini for Mac to make batch optimization of images part of your automated build process. 268 | - [Tapnesh-CLI](https://github.com/JafarAkhondali/Tapnesh) - Tapnesh is a CLI tool that will optimize all your images in parallel easily and efficiently! 269 | - [Tinypng](https://tinypng.com/) - Advanced lossy compression for PNG images that preserves full alpha transparency. 270 | - [Kraken Web-interface](https://kraken.io/web-interface) - Optimize your images and will be available for download for 12 hours. 271 | - [Compressor](https://compressor.io/) - Online image compressor for JPG, PNG, SVG and GIF. 272 | - [Shrinkray](https://shrinkray.io) - One-click optimization for images in your GitHub repos 273 | - [mozjpeg](https://github.com/mozilla/mozjpeg) - Improved JPEG encoder. 274 | - [Jpegoptim](https://github.com/tjko/jpegoptim) - Utility to optimize/compress JPEG files. 275 | - [ZopfliPNG](https://github.com/google/zopfli) - A command-line program to optimize PNG images. 276 | - [AdvPNG](http://www.advancemame.it/doc-advpng.html) - Recompress PNG files to get the smallest possible size. 277 | - [Leanify](https://github.com/JayXon/Leanify) - Lightweight lossless file minifier/optimizer. 278 | - [Trimage](http://trimage.org/) - A cross-platform tool for losslessly optimizing PNG and JPG files. 279 | - [ImageEngine](https://imageengine.io) - Cloud service for optimizing, resizing and caching images on the fly with great mobile support. 280 | - [ImageKit.io](https://imagekit.io) - Intelligent real-time image optimizations, image transformations with a global delivery network and storage. 281 | - [Optimizt](https://github.com/343dev/optimizt) - CLI image optimization tool. It can compress PNG, JPEG, GIF and SVG lossy and lossless, and also create AVIF and WebP versions for raster images. 282 | - [ResponsiveImage](https://responsive-image.dev/) - Generate optimized images (WebP, AVIF) and LQIP placeholders using Vite or webpack plugins and render responsive image markup with an image component for multiple frameworks. 283 | 284 | ## Lazyloaders 285 | 286 | - [lazyload](https://github.com/vvo/lazyload) - Lazyload images, iframes, widgets with a standalone JavaScript lazyloader ~1kb 287 | - [lozad.js](https://github.com/ApoorvSaxena/lozad.js) - Highly performant, light ~0.9kb, and configurable lazy loader in pure JS with no dependencies for responsive images, iframes, and more 288 | 289 | ## Loaders 290 | 291 | - [HeadJS](https://github.com/headjs/headjs)- The only script in your HEAD. for Responsive Design, Feature Detections, and Resource Loading. 292 | - [RequireJS](http://requirejs.org/) - RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node.js. 293 | - [Labjs](http://labjs.com/) - is an open-source (MIT license) project supported by Getify Solutions. The core purpose of LABjs is to be an all-purpose, on-demand JavaScript loader, capable of loading any JavaScript resource, from any location, into any page, at any time. 294 | - [Defer.js](https://github.com/wessman/defer.js) - Async Everything: Make the meat of your pages load faster with this JS morsel. 295 | - [InstantClick](https://github.com/dieulot/instantclick) - InstantClick makes the following links in your site instant. 296 | - [JIT](https://github.com/shootaroo/jit-grunt) - A JIT (Just In Time) plugin loader for Grunt. The load time of Grunt does not slow down even if there are many plugins. 297 | 298 | ## Metrics Monitor 299 | 300 | - [Phantomas](https://github.com/macbre/phantomas) - PhantomJS-based web performance metrics collector and monitoring tool. 301 | - [Showslow](http://www.showslow.com/) - open source tool that helps monitor various site performance metrics over time. It captures the results of YSlow, Page Speed Insights, WebPageTest and dynaTrace Ajax Edition. 302 | - [Bench](https://github.com/jmervine/bench) - Using Phantomas (a PhantomJS-backed client performance metrics scrapper). Benchmark a page, store results in MongoDB, and display results via the built-in server. 303 | - [Keepfast](https://github.com/keepfast/keepfast) - Tool to monitor indicators related to the performance of a web page. 304 | - [GTmetrix](https://gtmetrix.com/) - GTmetrix uses Google Page Speed and Yahoo! YSlow to grade your site's performance and provides actionable recommendations to fix these issues. 305 | - [Pingbreak.com](https://pingbreak.com/) - Free site and SSL Monitoring with response time alerting (on Slack, Twitter, Mattermost, Discord or custom Webhook). 306 | - [Pingdom site Speed Test](http://tools.pingdom.com/fpt/) - Test the load time of that page, analyze it, and find bottlenecks. 307 | - [Dotcom-tools](https://www.dotcom-tools.com/website-speed-test.aspx) - analyze your website's speed in real browsers from 20 locations worldwide. 308 | - [WebPageTest](http://www.webpagetest.org/) - Run a free site 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. 309 | - [Sitespeed.io](https://www.sitespeed.io/documentation/) - 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. 310 | - [Grunt-phantomas](https://github.com/stefanjudis/grunt-phantomas) - Grunt plugin wrapping phantomas to measure frontend performance. 311 | - [Perfjankie](https://www.npmjs.com/package/perfjankie) - Runtime Browser Performance regression suite ([Demo](https://github.com/asciidisco/perfjankie-test)). 312 | - [BrowserView Monitoring](https://www.dotcom-monitor.com/website-monitor/website-speed-monitoring/) - Continually checks web page load times in Internet Explorer, Chrome and Firefox from multiple points around the world. 313 | - [New Relic Browser Monitoring](http://newrelic.com/browser-monitoring) - Monitor your browser-side applications in real time, with a focus on real end users’ experiences. 314 | - [DareBoost](https://www.dareboost.com/) - Real Browser Monitoring. Offers complete reports about web performance and quality using YSlow, Page Speed and numerous custom tips. 315 | - [Bytes Matter Real User Monitoring](https://www.bytesmatter.io) - Full featured Real User Monitoring solution. Free tier for smaller sites. Includes monitoring for Google's Core Web Vitals. 316 | 317 | ## Metrics Monitor - API 318 | 319 | - [WebPageTest API Wrapper for Node.js](https://github.com/marcelduran/webpagetest-api) - WebPageTest API Wrapper is an npm package that wraps WebPageTest API for Node.js as a module and a command-line tool. 320 | 321 | ## Metrics Monitor - EMAIL 322 | 323 | - [WebPerformance Report](https://webperformancereport.com/) - Web performance report every week in your inbox. Get a Personalized Report on the Status of the E-commerce or Website that you want to monitor in terms of Web performance and Web optimization, Core Web Vitals are included. 324 | 325 | ## Minifiers - HTML 326 | 327 | - [HTMLCompressor](https://code.google.com/archive/p/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. 328 | - [Django-htmlmin](https://github.com/cobrateam/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 sites or deployment scripts. 329 | - [HTMLMinifier](https://github.com/kangax/html-minifier) - HTMLMinifier is a highly configurable, well-tested, Javascript-based HTML minifier, with lint-like capabilities. 330 | - [Grunt-contrib-htmlmin](https://github.com/gruntjs/grunt-contrib-htmlmin) - A grunt plugin to minify HTML that uses HTMLMinifier. 331 | - [Gulp-htmlmin](https://github.com/jonschlinkert/gulp-htmlmin) - A gulp plugin to minify HTML that uses HTMLMinifier. 332 | - [Grunt-htmlcompressor](https://github.com/jney/grunt-htmlcompressor) - Grunt plugin for HTML compression, using htmlcompressor. 333 | - [HTML_minifier](https://github.com/stereobooster/html_minifier) - Ruby wrapper for kangax html-minifier. 334 | - [HTML_press](https://github.com/stereobooster/html_press) - Ruby gem for compressing html, that removes all whitespace junk, and leaves only HTML. 335 | - [Koa HTML Minifier](https://github.com/koajs/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. 336 | - [HTML Minifier Online](http://kangax.github.io/html-minifier/) - A HTML min tool by kangax (HTMLMinifier Creator). 337 | - [Minimize](https://github.com/Swaagie/minimize) - Minimize is an HTML minifier based on the node-htmlparser,currently, HTML minifier is only usable server-side. Client-side minification will be added in a future release. 338 | - [Html-minifier](https://github.com/deanhume/html-minifier) - A simple Windows command-line tool to minify your HTML, Razor views & Web Forms views 339 | 340 | ## Minifiers - JS & CSS 341 | 342 | - [YUI Compressor](https://github.com/yui/yuicompressor) - JavaScript compressor which, in addition to removing comments and white-spaces, obfuscates local variables using the smallest possible variable name. This obfuscation is safe, even when using constructs such as 'eval' or 'with' (although the compression is not optimal is those cases) Compared to jsmin, the average savings is around 20%. 343 | - [UglifyJS2](https://github.com/mishoo/UglifyJS2) - UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit, written in JavaScript. 344 | - [CSSO](https://github.com/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. 345 | - [CSSmin.js](https://github.com/stoyan/yuicompressor/blob/master/ports/js/cssmin.js) - cssmin.js is a JavaScript port of YUICompressor's CSS minifier. 346 | - [Grunt-contrib-concat](https://github.com/gruntjs/grunt-contrib-concat) - A Grunt plugin to concatenate files. 347 | - [Grunt-contrib-uglify](https://github.com/gruntjs/grunt-contrib-uglify) - A Grunt plugin to concatenate and minify JavaScript files. 348 | - [Clean-css](https://github.com/jakubpawlowicz/clean-css) - A fast, efficient, and well-tested CSS minifier for node.js. 349 | - [Django-compressor](https://github.com/django-compressor/django-compressor) - Compresses linked and inline JavaScript or CSS into a single cached file. 350 | - [Django-pipeline](https://github.com/cyberdelia/django-pipeline) - Pipeline is an asset packaging library for Django, providing both CSS and JavaScript concatenation and compression, built-in JavaScript template support, and optional data-URI image and font embedding. 351 | - [JShrink](https://github.com/tedious/JShrink) - JShrink is a PHP class that minifies JavaScript so that it can be delivered to the client quicker. 352 | - [JSCompress](http://jscompress.com/) - The most minimalistic online JS Compress tool. 353 | - [CSSshrink](https://github.com/stoyan/cssshrink) - Because CSS is ospon the critical path to rendering pages. It must be small! Or else! 354 | - [Grunt-cssshrink](https://github.com/JohnCashmore/grunt-cssshrink) - This is just a grunt wrapper for CSS Shrink. 355 | - [Gulp-cssshrink](https://github.com/torrottum/gulp-cssshrink) - Shrinks CSS files using cssshrink for Gulp. 356 | - [Prettyugly](https://github.com/stoyan/prettyugly) - Uglify (strip spaces) or prettify (add consistent spaces) CSS code. 357 | - [Grunt-contrib-cssmin](https://github.com/gruntjs/grunt-contrib-cssmin) - CSS Minifier for Grunt. 358 | - [Grunt-uncss](https://github.com/addyosmani/grunt-uncss) - A grunt task for removing unused CSS from your projects. 359 | - [Gulp-uncss](https://github.com/ben-eb/gulp-uncss) - A gulp task for removing unused CSS from your projects. 360 | 361 | ## Miscellaneous 362 | 363 | - [Socialite.js](http://socialitejs.com/) - 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. 364 | - [uCSS](https://github.com/oyvindeh/ucss) - uCSS is made for crawling (large) sites to find unused CSS selectors, but not remove unused CSS. 365 | - [HTTPinvoke](https://github.com/jakutis/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. 366 | - [Critical](https://github.com/addyosmani/critical) - Extract & Inline Critical-path CSS in HTML pages (alpha). 367 | - [Csscolormin](https://github.com/stoyan/csscolormin) - Utility that minifies CSS colors, example: min("white"); // minifies to "#fff". 368 | - [Lazysizes](https://github.com/aFarkas/lazysizes) - High-performance lazy loader for images (responsive and normal), iframes, and scripts, that detects any visibility changes triggered through user interaction, CSS or JavaScript without configuration. 369 | - [Perf-Tooling](http://perf-tooling.today/) - Perf Tooling is a shared resource to keep track of new and existing performance tools. 370 | - [TMI](https://github.com/addyosmani/tmi) - TMI (Too Many Images) - discover your image weight on the web. 371 | 372 | ## SVG 373 | 374 | - [SVGO](https://github.com/svg/svgo) - SVGO is a Nodejs-based tool for optimizing SVG vector graphics files. 375 | - [SVG OMG](https://jakearchibald.github.io/svgomg/) - SVGOMG is SVGO's Missing GUI, aiming to expose the majority, if not all the configuration options of SVGO. 376 | - [Grunt-svgmin](https://github.com/sindresorhus/grunt-svgmin) - Minify SVG using SVGO for Grunt. 377 | - [Gulp-svgmin](https://www.npmjs.com/package/gulp-svgmin) - Minify SVG with SVGO for Gulp. 378 | - [Scour](http://www.codedread.com/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. 379 | - [SVG Cleaner](https://github.com/RazrFalcon/SVGCleaner) - 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, and provides threaded processing on multicore processors. 380 | 381 | ## Web Components 382 | 383 | - [Polymer Bundler](https://github.com/Polymer/tools/tree/master/packages/bundler) - Polymer-bundler is a library for packaging project assets for production to minimize network round-trips. 384 | - [Gulp-vulcanize](https://github.com/sindresorhus/gulp-vulcanize) - Concatenate a set of Web Components into one file that use Vulcanize. 385 | 386 | ## Web server Benchmarks 387 | 388 | - [HTTPerf](https://github.com/httperf/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. 389 | - [Apache JMeter](http://jmeter.apache.org/download_jmeter.cgi) - Open source load testing tool: It is a Java platform application. 390 | - [Locust](http://locust.io) - An open-source load testing tool. Define user behaviour with Python code, and swarm your system with millions of simultaneous users. 391 | - [Autoperf](https://github.com/igrigorik/autoperf) - Autoperf is a ruby driver for httperf, designed to help you automate load and performance testing of any web application - for a single endpoint, or through log replay. 392 | - [HTTPerf.rb](https://github.com/jmervine/httperfrb) - Simple Ruby interface for httperf, written in Ruby. 393 | - [PHP-httperf](https://github.com/jmervine/php-httperf) - PHP Port of HTTPerf.rb. 394 | - [HTTPerf.js](https://github.com/jmervine/httperfjs) - JS Port of HTTPerf.rb. 395 | - [HTTPerf.py](https://github.com/jmervine/httperfpy) - Python Port of HTTPerf.rb. 396 | - [Gohttperf](https://github.com/jmervine/gohttperf) - Go Port of HTTPerf.rb. 397 | - [wrk](https://github.com/wg/wrk) - A HTTP benchmarking tool (with optional Lua scripting for request generation, response 398 | processing, and custom reporting) 399 | - [beeswithmachineguns](https://github.com/newsapps/beeswithmachineguns) - A utility for arming (creating) many bees (micro EC2 instances) to attack (load test) targets (web applications). 400 | - [k6](https://k6.io/) - 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 sites using HTTP/1.1, HTTP/2 and WebSocket. 401 | 402 | ## Web server Modules 403 | 404 | - [PageSpeed Module](https://developers.google.com/speed/pagespeed/module/download) - PageSpeed speeds up your site and reduces page load time. This open-source web server module automatically applies web performance best practices to pages and associated assets (CSS, JavaScript, images) without requiring that you modify your existing content or workflow. PageSpeed is available as a module for Apache 2.x and Nginx 1.x. 405 | - [WebP-detect](https://github.com/igrigorik/webp-detect) - WebP with Accept negotiation. 406 | 407 | # Specs 408 | 409 | - [Web Performance Working Group](http://www.w3.org/2010/webperf/) - 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. 410 | - [Page Visibility](http://www.w3.org/TR/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. 411 | - [Navigation Timing](https://w3c.github.io/navigation-timing/) - This specification defines a unified interface to store and retrieve high resolution performance metric data related to the navigation of a document. 412 | - [Resource Timing](http://www.w3.org/TR/resource-timing/) - This specification defines an interface for web applications to access the complete timing information for resources in a document. 413 | - [User Timing](http://www.w3.org/TR/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. 414 | - [Performance Timeline](http://www.w3.org/TR/performance-timeline/) - This specification defines a unified interface to store and retrieve performance metric data. This specification does not cover individual performance metric interfaces. 415 | - [CSS will-change](https://drafts.csswg.org/css-will-change/) - This specification defines the `will-change` CSS 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. 416 | - [Resource Hints](http://www.w3.org/TR/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. 417 | 418 | # Stats 419 | 420 | - [HTTP Archive](http://httparchive.org/index.php) - 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. 421 | 422 | # Other Awesome Lists 423 | 424 | - [iamakulov/awesome-webpack-perf](https://github.com/iamakulov/awesome-webpack-perf) - A curated list of webpack tools for web performance 425 | - [bayandin/awesome-awesomeness](https://github.com/bayandin/awesome-awesomeness). 426 | - [sindresorhus/awesome](https://github.com/sindresorhus/awesome). 427 | - [imteekay/web-performance-research](https://github.com/imteekay/web-performance-research) - Research in Web Performance 428 | 429 | # Contributing 430 | 431 | For contributing, [open an issue](https://github.com/davidsonfellipe/awesome-wpo/issues) and/or a [pull request](https://github.com/davidsonfellipe/awesome-wpo/pulls). 432 | -------------------------------------------------------------------------------- /content/ARTICLES.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Articles 3 | author: Davidson Fellipe 4 | layout: post 5 | path: /articles/ 6 | --- 7 | 8 | # Articles 9 | 10 | > Articles about Web Performance Optimization 11 | 12 | - [10 JavaScript Performance Boosting Tips](http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas) - _by Nicholas C. Zakas_ 13 | - [Getting started with the Picture Element](http://deanhume.com/getting-started-with-the-picture-element/) - _by Dean Hume_ 14 | - [Improve Page Load Times With DNS Prefetching](http://www.deanhume.com/improve-page-load-times-with-dns-prefetching/) - _by Dean Hume_ 15 | - [Jank Busting for Better Rendering Performance](https://www.html5rocks.com/en/tutorials/speed/rendering/) - _by Tom Wiltzius_ 16 | - [JavaScript Memory Profiling](https://developers.google.com/web/tools/chrome-devtools/memory-problems?utm_campaign=2016q3&utm_medium=redirect&utm_source=dcc) - _by Google_ 17 | - [Loading webfonts with high performance on responsive sites](http://bdadam.com/blog/loading-webfonts-with-high-performance.html) - _by Adam Beres-Deak_ 18 | - [Performance As Design](https://bradfrost.com/blog/post/performance-as-design/) - _by Brad Frost_ 19 | - [Preventing 'layout thrashing'](http://wilsonpage.co.uk/preventing-layout-thrashing/) - _by Wilson Page_ 20 | - [Scrolling Performance](https://www.html5rocks.com/en/tutorials/speed/scrolling/) - _by Paul Lewis_ 21 | - [Total deferring of JavaScript Parsing](https://varvy.com/pagespeed/defer-loading-javascript.html) - _by Patrick Sexton_ 22 | - [Web Fonts Performance: Making Pretty, Fast](https://www.igvita.com/2012/09/12/web-fonts-performance-making-pretty-fast/) - _by Ilya Grigorik_ 23 | - [Web Page Performance - Profiling paint times](http://www.deanhume.com/web-page-performance-profiling-paint-times/) - _by Dean Hume_ 24 | - [Forget Google and Use These Hosted JavaScript Libraries in China](https://chineseseoshifu.com/blog/china-hosted-javascript-libraries-jquery-dojo-boostrap.html) - _by Ryan_ 25 | - [Idle Until Urgent](https://philipwalton.com/articles/idle-until-urgent/) - _by Philip Walton_ 26 | - [Measure Performance in JavaScript](https://medium.com/@prasanna18101994/measure-performance-in-javascript-254ad738669c) - _by Prasanna Brabourame_ 27 | - [How to run a WebPageTest test](https://nooshu.github.io/blog/2020/12/31/how-to-run-a-webpagetest-test/) - _by Matt Hobbs_ 28 | - [How to read a WebPageTest Waterfall View chart](https://nooshu.github.io/blog/2019/10/02/how-to-read-a-wpt-waterfall-chart/) - _by Matt Hobbs_ 29 | - [How to read a WebPageTest Connection View chart](https://nooshu.github.io/blog/2019/12/30/how-to-read-a-wpt-connection-view-chart/) - _by Matt Hobbs_ 30 | - [WebPageTest comparison URL generator](https://nooshu.github.io/blog/2020/04/22/webpagetest-comparison-url-generator/) - _by Matt Hobbs_ 31 | 32 | # Contributing 33 | 34 | For contributing, [open an issue](https://github.com/davidsonfellipe/awesome-wpo/issues) and/or a [pull request](https://github.com/davidsonfellipe/awesome-wpo/pulls). 35 | -------------------------------------------------------------------------------- /content/BLOGS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Articles 3 | author: Davidson Fellipe 4 | layout: post 5 | path: /blogs/ 6 | --- 7 | 8 | # Blogs 9 | 10 | > Some blogs about Web Performance Optimization 11 | 12 | - 🇺🇸 **Performance Calendar** _by Stoyan Stefanov_ ~ [https://calendar.perfplanet.com/](https://calendar.perfplanet.com/) 13 | 14 | # Contributing 15 | 16 | For contributing, [open an issue](https://github.com/davidsonfellipe/awesome-wpo/issues) and/or a [pull request](https://github.com/davidsonfellipe/awesome-wpo/pulls). 17 | -------------------------------------------------------------------------------- /content/MEETUPS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Articles 3 | author: Davidson Fellipe 4 | layout: post 5 | path: /meetups/ 6 | --- 7 | 8 | # Meetups 9 | 10 | > Meetups about Web Performance Optimization 11 | 12 | - [Atlanta Web Performance Group](https://www.meetup.com/Atlanta-Web-Performance-Group/) – Atlanta, USA 🇺🇸 13 | - [Barcelona Web Performance Group](https://www.meetup.com/Barcelona-Web-Performance/) – Barcelona, Spain 🇪🇸 14 | - [Berlin Web Performance Group](https://www.meetup.com/Berlin-Web-Performance-Group/) – Berlin, Germany 🇩🇪 15 | - [Boston Web Performance Group](https://www.meetup.com/Web-Performance-Boston/) – Boston, USA 🇺🇸 16 | - [Bristol Web Performance Group](https://www.meetup.com/bristolwebperf/) – Bristol, UK 🇬🇧 17 | - [Cologne Web Performance Group](https://www.meetup.com/cologne-germany-high-performance-website-optimization-group/) – Cologne, Germany 🇩🇪 18 | - [Dutch Web Performance & Operations Meetup](https://www.meetup.com/Dutch-Web-Operations-Meetup/) – Amsterdam, Netherlands 🇳🇱 19 | - [Hamburg Web Performance Group](https://www.meetup.com/Hamburg-Web-Performance-Group/) – Hamburg, Germany 🇩🇪 20 | - [Indianapolis Web Performance Group](https://www.meetup.com/IndyWebPerf/) – Carmel, USA 🇺🇸 21 | - [Karlsruhe Web Performance Group](https://www.meetup.com/Karlsruhe-Web-Performance-Group/) – Karlsruhe, Germany 🇩🇪 22 | - [London Web Performance Group](https://www.meetup.com/London-Web-Performance-Group/) – London, UK 🇬🇧 23 | - [Manchester Web Performance Group](https://www.meetup.com/Manchester-Web-Performance-Group/) – Manchester, UK 🇬🇧 24 | - [Munich Web Performance Group](https://www.meetup.com/Munchen-Web-Performance-Group/) – Munich, Germany 🇩🇪 25 | - [New York Web Performance Group](https://www.meetup.com/Web-Performance-NY/) – New York City, USA 🇺🇸 26 | - [San Diego Web Performance Group](https://www.meetup.com/Web-Performance-SanDiego/) – San Diego, USA 🇺🇸 27 | - [San Francisco & Silicon Valley Web Performance Group](https://www.meetup.com/SF-Web-Performance-Group/) – San Francisco, USA 🇺🇸 28 | - [Santa Cruz Web Performance Meetup](https://www.meetup.com/Santa-Cruz-Web-Performance-Meetup/) – Santa Cruz, USA 🇺🇸 29 | - [Seattle Web Performance Group](https://www.meetup.com/Seattle-Web-Performance-Group/) – Seattle, USA 🇺🇸 30 | - [Toronto Web Performance Group](https://www.meetup.com/Toronto-Web-Performance-Group/) – Toronto, Canada 🇨🇦 31 | - [Turin Web Performance Group](https://www.meetup.com/Turin-Web-Performance-Group/) – Turin, Italy 🇮🇹 32 | - [Vancouver Web Performance Group](https://www.meetup.com/Vancouver-Web-Performance/) – Vancouver, Canada 🇨🇦 33 | - [Vienna Web Performance Group](https://www.meetup.com/Vienna-Web-Performance-Group/) – Vienna, Austria 🇦🇹 34 | - [Warsaw Web Performance Group](https://www.meetup.com/Warsaw-Web-Performance-Group/) – Warsaw, Poland 🇵🇱 35 | 36 | Full list on meetup.com: [Web Performance Meetup Groups](https://www.meetup.com/topics/web-performance/) 37 | -------------------------------------------------------------------------------- /content/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Awesome WPO 3 | author: Davidson Fellipe 4 | layout: post 5 | path: / 6 | --- 7 | 8 | A curated list of Web Performance Optimization. Everyone can contribute here! 9 | 10 | ## Books 11 | 12 | - [HTTP/2 in Action by Barry Pollard](https://www.manning.com/books/http2-in-action) - Barry Pollard 13 | - [Web Performance in Action by Jeremy Wagner](https://www.manning.com/books/web-performance-in-action) - Jeremy L. Wagner 14 | - [Book of Speed](https://www.bookofspeed.com/) - Stoyan Stefanov 15 | - [Designing for Performance: Weighing Aesthetics and Speed](http://designingforperformance.com/) - Lara Callender Hogan 16 | - [Even Faster Web Sites: Performance Best Practices for Web Developers](http://shop.oreilly.com/product/9780596522315.do) - Steve Souders 17 | - [High Performance Browser Networking: What every web developer should know about networking and web performance](http://shop.oreilly.com/product/0636920028048.do) - Ilya Grigorik 18 | - [High Performance JavaScript](http://shop.oreilly.com/product/9780596802806.do) - Nicholas C. Zakas 19 | - [High Performance Web Sites: Essential Knowledge for frontend Engineers](http://books.google.de/books/about/High_Performance_Web_Sites.html?id=jRVlgNDOr60C&redir_esc=y) - Steve Souders 20 | - [High Performance Responsive Design: Building Faster Sites Across Devices](http://shop.oreilly.com/product/0636920033103.do) – Tom Barker 21 | - [Lean sites](https://www.sitepoint.com/premium/books/lean-websites) – Barbara Bermes 22 | - [Time Is Money: The Business Value of Web Performance](http://shop.oreilly.com/product/0636920041450.do) – Tammy Everts 23 | - [Using WebPagetest](http://shop.oreilly.com/product/0636920033592.do) - Rick Viscomi, Andy Davies, Marcel Duran 24 | - [Web Page Size, Speed, and Performance](http://www.oreilly.com/webops-perf/free/webpage-size-speed-perf.csp) - Terrence Dorsey 25 | - [Web Performance Daybook Volume 2](https://www.amazon.com/Web-Performance-Daybook-Stoyan-Stefanov-ebook/dp/B008CQA8BA/) - Stoyan Stefanov 26 | - [Web Performance Tuning](http://shop.oreilly.com/product/9780596001728.do) - Patrick Killelea 27 | - [You Don't Know JS: Async & Performance](https://www.oreilly.com/library/view/you-dont-know/9781491905197/) - Kyle Simpson 28 | - [Linux, Apache, MySQL, PHP Performance end-to-end](https://play.google.com/store/books/details/Colin_McKinnon_Linux_Apache_MySQL_PHP_Performance?id=Z3ciBgAAQBAJ) - Colin McKinnon 29 | - [Web Components in Action](https://www.manning.com/books/web-components-in-action) - Ben Farrell 30 | 31 | ## Case studies 32 | 33 | - [WPOStats](https://wpostats.com/) - Case studies and experiments demonstrating the impact of web performance optimization (WPO) on user experience and business metrics. 34 | 35 | ## Documentation 36 | 37 | - [PageSpeed Insights Rules](https://developers.google.com/speed/docs/insights/rules) - A guide created by PageSpeed Team. 38 | 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. 39 | - [Best Practices for Speeding Up Your site](https://developer.yahoo.com/performance/rules.html) - The list includes 35 best practices divided into 7 categories, created by Yahoo! Exceptional Performance team. 40 | 41 | ## Events 42 | 43 | ### Conferences 44 | 45 | - [Velocity](http://conferences.oreilly.com/velocity) – At Velocity, web operations, performance, and DevOps professionals learn to build fast, resilient, and highly available sites and apps. 46 | 47 | # Tools 48 | 49 | ## Analyzers 50 | 51 | - [Web.dev](https://web.dev/) - Get the web's modern capabilities on your own sites and apps with useful guidance and analysis from web.dev. 52 | - [Confess](https://github.com/jamesgpearce/confess) - Uses PhantomJS to headlessly analyze web pages and generate manifests. 53 | - [DebugBear](https://www.debugbear.com/) - DebugBear is a site 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. 54 | - [Page Speed](https://developers.google.com/speed/pagespeed/) - The PageSpeed family of tools is designed to help you optimize the performance of your site. 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. 55 | - [Lighthouse](https://github.com/GoogleChrome/lighthouse) - Auditing and performance metrics tool for Progressive Web Applications. 56 | - [YSlow](https://github.com/marcelduran/yslow) - YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages. 57 | - [YSlow for PhantomJS](http://yslow.org/phantomjs/) - YSlow for PhantomJS also introduces new output formats for automated test frameworks: TAP (Test Anything Protocol) and JUnit. 58 | - [Grunt-WebPageTest](https://github.com/sideroad/grunt-wpt) - Grunt plugin for continuously measurement of WebPageTest. ([Demo](http://sideroad.github.io/sample-wpt-page/)) 59 | - [Grunt-yslow](https://github.com/andyshora/grunt-yslow) - Grunt task for testing page performance using PhantomJS, a headless WebKit browser. 60 | - [Grunt-perfbudget](https://github.com/tkadlec/grunt-perfbudget) - A Grunt.js task for enforcing a performance budget ([more on performance budgets](https://timkadlec.com/2013/01/setting-a-performance-budget/)). 61 | - [Web Tracing Framework](https://github.com/google/tracing-framework) - Web Tracing Framework is a set of libraries, tools, and visualizers for the tracing and investigation of complex web applications 62 | - [Yandex.Tank](https://github.com/yandex/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. 63 | - [Yellow Lab Tools](http://yellowlab.tools) - Online quick and easy tool that audits frontend bad practices, reveals performance issues and profiles JavaScript. 64 | - [Pagelocity](http://pagelocity.com/) - A web performance optimization and analysis tool. 65 | - [Varvy](https://varvy.com/pagespeed/) - Test your site to see if it follows the Google guidelines for speed. 66 | - [Web Bloat Score Calculator](http://www.webbloatscore.com/) - Compare size of a page to a compressed image of the same page 67 | - [Speed Racer](https://github.com/ngryman/speedracer) - Collect performance metrics for your library/application using Chrome headless. 68 | - [Lightest App](https://lightest.app/) - Webpage load time is extremely important for conversion and revenue. Visualize web performance against competitors. 69 | 70 | ## Analyzers - API 71 | 72 | - [Node-yslowjs](https://github.com/jmervine/node-yslowjs) - YSlow.js on Node.js is a simple Node.js wrapper for programmatically running phantomjs yslow.js. 73 | - [PSI](https://github.com/addyosmani/psi) - PageSpeed Insights for Node.js - with reporting. 74 | 75 | ## Bundle Analyzer 76 | 77 | - [Bundlesize](https://github.com/siddharthkp/bundlesize) - Keep your bundle size in check. 78 | - [source-map-explorer](https://github.com/danvk/source-map-explorer) - Analyze and debug bundle space usage through source maps. 79 | - [Bundlephobia](https://bundlephobia.com/) - Helps you find the performance impact of adding an npm package to your frontend bundle. 80 | - [Webpack bundle analyzer](https://github.com/webpack-contrib/webpack-bundle-analyzer) - webpack plugin and CLI utility that represents bundle content as convenient interactive zoomable treemap. 81 | - [Disc](http://hughsk.io/disc/) - Visualise the module tree of browserify project bundles and track down bloat. 82 | - [Lasso-analyzer](https://github.com/ajay2507/lasso-analyzer) - analyze and Visualise project bundles created by Lasso. 83 | - [Packtracker.io](https://packtracker.io) - Check your webpack bundle stats on every pull request, and track them over time. 84 | - [Compression webpack plugin](https://github.com/webpack-contrib/compression-webpack-plugin) - Prepare compressed versions of assets to serve them with Content-Encoding. 85 | 86 | ## Benchmark - CSS 87 | 88 | - [CSS-perf](https://github.com/mdo/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. 89 | 90 | ## Benchmark - JavaScript 91 | 92 | > A set of tools for creating test cases and compare different implementations in JavaScript. 93 | 94 | - [JSPerf](http://jsperf.com/) - jsPerf aims to provide an easy way to create and share test cases, comparing the performance of different JavaScript snippets by running benchmarks. 95 | - [Benchmark.js](http://benchmarkjs.com/) - A robust benchmarking library that works on nearly all JavaScript platforms, supports high-resolution timers, and returns statistically significant results. 96 | - [JSlitmus](https://github.com/broofa/jslitmus) - JSLitmus is a lightweight tool for creating ad-hoc JavaScript benchmark tests. 97 | - [Matcha](https://github.com/logicalparadox/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. 98 | - [Timing.js](https://github.com/addyosmani/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. 99 | - [Stats.js](https://github.com/mrdoob/stats.js) - This class provides a simple info box that will help you monitor your code performance. 100 | - [PerfTests](https://github.com/kogarashisan/PerfTests) - Performance tests of JavaScript inheritance models. 101 | - [Memory-stats.js](https://github.com/paulirish/memory-stats.js) - minimal monitor for JS Heap Size via performance memory. 102 | 103 | ## Benchmark - PHP 104 | 105 | - [PHPench](https://github.com/mre/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. 106 | - [php-bench](https://github.com/jacobbednarz/php-bench) - Benchmark and profile PHP code blocks whilst measuring the performance footprint. 107 | 108 | ## Bookmarklets 109 | 110 | - [Yahoo YSlow for Mobile/Bookmarklet](https://developer.yahoo.com/yslow/) - YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages. 111 | - [PerfMap](https://github.com/zeman/perfmap) - A bookmarklet to create a frontend performance heatmap of resources loaded in the browser using the Resource Timing API. 112 | - [DOM Monster](https://github.com/madrobby/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. 113 | - [CSS Stress](http://andy.edinborough.org/CSS-Stress-Testing-and-Performance-Profiling) - CSS Stress is a Testing and Performance Profiling. 114 | - [Performance-Bookmarklet](https://github.com/micmro/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](https://chrome.google.com/webstore/detail/performance-analyser/djgfmlohefpomchfabngccpbaflcahjf?hl=en) and [Firefox Add-on](https://addons.mozilla.org/en-us/firefox/addon/performance-analyser/?src=cb-dl-created) under the name Performance-Analyser. 115 | 116 | ## CDN 117 | 118 | > 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](http://en.wikipedia.org/wiki/Content_delivery_network#Notable_content_delivery_service_providers). 119 | 120 | - [Cloudflare CDN](https://www.cloudflare.com/cdn/) - A content delivery network that uses next-gen tech to deliver a fast, reliable, CDN services 121 | - [jsDelivr](https://github.com/jsdelivr/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 sites. 122 | - [Google Hosted Libraries](https://developers.google.com/speed/libraries/) - Google Hosted Libraries is a content distribution network for the most popular, open-source JavaScript libraries. 123 | - [CDNjs](https://cdnjs.com/) - An open source CDN for JavaScript and CSS sponsored by CloudFlare that hosts everything from jQuery and Modernizr to Bootstrap. 124 | - [jQuery](http://code.jquery.com/) - jQuery CDN – Latest Stable Versions, powered by MaxCDN. 125 | - :cn: [UpYun CDN](http://jscdn.upai.com/) - CDN provided by upyun. 126 | - :cn: [Bootstrap 中文网开放 CDN 服务](http://www.bootcdn.cn/) - Bootstrap Chinese net open CDN service (only HTTP). 127 | - :ru: [Yandex CDN](https://tech.yandex.ru/jslibs/) - Yandex Content Delivery Network hosts popular third party JavaScript and CSS libraries (best for use in Russia). 128 | 129 | > To find useful more information for you make the right choice between paid CDNs, please visit [CDNPlanet](http://www.cdnplanet.com/). 130 | 131 | ## CDN - Monitor 132 | 133 | - [CDNperf](http://www.cdnperf.com/) - finds you fast and reliable JavaScript CDNs that make your sites snappy and happy. 134 | 135 | ## CDN - Utilities 136 | 137 | - [Gulp-google-cdn](https://github.com/sindresorhus/gulp-google-cdn) - Replaces script references with Google CDN ones. 138 | 139 | ## Extensions 140 | 141 | - [Browser Calories](https://github.com/zenorocha/browser-calories-chrome) - The easiest way to measure your performance budget. 142 | 143 | ## Image Optimizers 144 | 145 | > How to remove all this unnecessary data and give you a file without degrading quality. 146 | 147 | - [Grunt-smushit](https://github.com/heldr/grunt-smushit) - Grunt plugin to remove unnecessary bytes of PNG and JPG using Yahoo Smushit. 148 | - [Gulp-smushit](https://github.com/heldr/gulp-smushit) - Gulp plugin to optimize PNG and JPG using Yahoo Smushit. Made on top of smosh. 149 | - [Smush it](http://www.imgopt.com/) - 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. 150 | - [Imagemin](https://github.com/imagemin/imagemin) - Minify images seamlessly with Node.js. 151 | - [Sharp](https://github.com/lovell/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. 152 | - [Gm](https://github.com/aheckmann/gm) - GraphicsMagick and ImageMagick for Node.js. 153 | - [Exexif](https://github.com/h4cc/awesome-elixir) - Pure elixir library to extract tiff and exif metadata from JPEG files. 154 | - [ExifCleaner](https://exifcleaner.com) - GUI app to remove exif metadata from images and video files with drag and drop. Free and open source. 155 | - [OptiPNG](http://optipng.sourceforge.net/) - OptiPNG is a PNG optimizer that recompresses image files to a smaller size, without losing any information. 156 | - [Grunt-contrib-imagemin](https://github.com/gruntjs/grunt-contrib-imagemin) - Minify PNG and JPEG images for Grunt. 157 | - [Gulp-imagemin](https://github.com/sindresorhus/gulp-imagemin) - Minify PNG, JPEG, GIF and SVG images with imagemin for Gulp. 158 | - [Grunt-WebP](https://github.com/somerandomdude/grunt-webp) - Convert your images to WebP format. 159 | - [Gulp-WebP](https://github.com/sindresorhus/gulp-webp) - Convert images to WebP for Gulp. 160 | - [Imageoptim](https://imageoptim.com/) - 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. 161 | - [Grunt-imageoptim](https://github.com/JamieMason/grunt-imageoptim) - Make ImageOptim, ImageAlpha and JPEGmini part of your automated build process. 162 | - [ImageOptim-CLI](https://github.com/JamieMason/ImageOptim-CLI) - Automates ImageOptim, ImageAlpha, and JPEGmini for Mac to make batch optimization of images part of your automated build process. 163 | - [Tapnesh-CLI](https://github.com/JafarAkhondali/Tapnesh) - Tapnesh is a CLI tool that will optimize all your images in parallel easily and efficiently! 164 | - [Tinypng](https://tinypng.com/) - Advanced lossy compression for PNG images that preserves full alpha transparency. 165 | - [Kraken Web-interface](https://kraken.io/web-interface) - Optimize your images and will be available for download for 12 hours. 166 | - [Compressor](https://compressor.io/) - Online image compressor for JPG, PNG, SVG and GIF. 167 | - [Shrinkray](https://shrinkray.io) - One-click optimization for images in your GitHub repos 168 | - [mozjpeg](https://github.com/mozilla/mozjpeg) - Improved JPEG encoder. 169 | - [Jpegoptim](https://github.com/tjko/jpegoptim) - Utility to optimize/compress JPEG files. 170 | - [ZopfliPNG](https://github.com/google/zopfli) - A command-line program to optimize PNG images. 171 | - [AdvPNG](http://www.advancemame.it/doc-advpng.html) - Recompress PNG files to get the smallest possible size. 172 | - [Leanify](https://github.com/JayXon/Leanify) - Lightweight lossless file minifier/optimizer. 173 | - [Trimage](http://trimage.org/) - A cross-platform tool for losslessly optimizing PNG and JPG files. 174 | - [ImageEngine](https://imageengine.io) - Cloud service for optimizing, resizing and caching images on the fly with great mobile support. 175 | - [ImageKit.io](https://imagekit.io) - Intelligent real-time image optimizations, image transformations with a global delivery network and storage. 176 | 177 | ## Lazyloaders 178 | 179 | - [lazyload](https://github.com/vvo/lazyload) - Lazyload images, iframes, widgets with a standalone JavaScript lazyloader ~1kb 180 | - [lozad.js](https://github.com/ApoorvSaxena/lozad.js) - Highly performant, light ~0.9kb and configurable lazy loader in pure JS with no dependencies for responsive images, iframes and more 181 | 182 | ## Loaders 183 | 184 | - [HeadJS](https://github.com/headjs/headjs)- The only script in your HEAD. for Responsive Design, Feature Detections, and Resource Loading. 185 | - [RequireJS](http://requirejs.org/) - RequireJS is a JavaScript file and module loader. It is optimized for in-browser use, but it can be used in other JavaScript environments, like Rhino and Node.js. 186 | - [Labjs](http://labjs.com/) - is an open-source (MIT license) project supported by Getify Solutions. The core purpose of LABjs is to be an all-purpose, on-demand JavaScript loader, capable of loading any JavaScript resource, from any location, into any page, at any time. 187 | - [Defer.js](https://github.com/wessman/defer.js) - Async Everything: Make the meat of your pages load faster with this JS morsel. 188 | - [InstantClick](https://github.com/dieulot/instantclick) - InstantClick makes following links in your site instant. 189 | - [JIT](https://github.com/shootaroo/jit-grunt) - A JIT (Just In Time) plugin loader for Grunt. Load time of Grunt does not slow down even if there are many plugins. 190 | 191 | ## Metrics Monitor 192 | 193 | - [Phantomas](https://github.com/macbre/phantomas) - PhantomJS-based web performance metrics collector and monitoring tool. 194 | - [Showslow](http://www.showslow.com/) - open source tool that helps monitor various site performance metrics over time. It captures the results of YSlow, Page Speed Insights, WebPageTest and dynaTrace Ajax Edition. 195 | - [Bench](https://github.com/jmervine/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. 196 | - [Keepfast](https://github.com/keepfast/keepfast) - Tool to monitor indicators related to performance of a web page. 197 | - [GTmetrix](https://gtmetrix.com/) - GTmetrix uses Google Page Speed and Yahoo! YSlow to grade your site's performance and provides actionable recommendations to fix these issues. 198 | - [Pingbreak.com](https://pingbreak.com/) - Free site and SSL Monitoring with response time alerting (on Slack, Twitter, Mattermost, Discord or custom Webhook). 199 | - [Pingdom site Speed Test](http://tools.pingdom.com/fpt/) - Test the load time of that page, analyze it and find bottlenecks. 200 | - [Dotcom-tools](https://www.dotcom-tools.com/website-speed-test.aspx) - analyze your website's speed in real browsers from 20 locations worldwide. 201 | - [WebPageTest](http://www.webpagetest.org/) - Run a free site 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. 202 | - [Sitespeed.io](https://www.sitespeed.io/documentation/) - 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. 203 | - [Grunt-phantomas](https://github.com/stefanjudis/grunt-phantomas) - Grunt plugin wrapping phantomas to measure frontend performance. 204 | - [Perfjankie](https://www.npmjs.com/package/perfjankie) - Runtime Browser Performance regression suite ([Demo](https://github.com/asciidisco/perfjankie-test)). 205 | - [BrowserView Monitoring](https://www.dotcom-monitor.com/website-monitor/website-speed-monitoring/) - Continually checks web page load times in Internet Explorer, Chrome and Firefox from multiple points around the world. 206 | - [DareBoost](https://www.dareboost.com/) - Real Browser Monitoring. Offers complete reports about web performance and quality using YSlow, Page Speed and numerous custom tips. 207 | 208 | ## Metrics Monitor - API 209 | 210 | - [WebPageTest API Wrapper for Node.js](https://github.com/marcelduran/webpagetest-api) - WebPageTest API Wrapper is an npm package that wraps WebPageTest API for Node.js as a module and a command-line tool. 211 | 212 | ## Minifiers - HTML 213 | 214 | - [HTMLCompressor](https://code.google.com/p/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. 215 | - [Django-htmlmin](https://github.com/cobrateam/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 sites or deployment scripts. 216 | - [HTMLMinifier](https://github.com/kangax/html-minifier) - HTMLMinifier is a highly configurable, well-tested, Javascript-based HTML minifier, with lint-like capabilities. 217 | - [Grunt-contrib-htmlmin](https://github.com/gruntjs/grunt-contrib-htmlmin) - A grunt plugin to minify HTML that uses HTMLMinifier. 218 | - [Gulp-htmlmin](https://github.com/jonschlinkert/gulp-htmlmin) - A gulp plugin to minify HTML that uses HTMLMinifier. 219 | - [Grunt-htmlcompressor](https://github.com/jney/grunt-htmlcompressor) - Grunt plugin for HTML compression, using htmlcompressor. 220 | - [HTML_minifier](https://github.com/stereobooster/html_minifier) - Ruby wrapper for kangax html-minifier. 221 | - [HTML_press](https://github.com/stereobooster/html_press) - Ruby gem for compressing html, that removes all whitespace junk, and leaves only HTML. 222 | - [Koa HTML Minifier](https://github.com/koajs/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. 223 | - [HTML Minifier Online](http://kangax.github.io/html-minifier/) - A HTML min tool by kangax (HTMLMinifier Creator). 224 | - [Minimize](https://github.com/Swaagie/minimize) - Minimize is a HTML minifier based on the node-htmlparser,currently, HTML minifier is only usable server-side. Client-side minification will be added in a future release. 225 | - [Html-minifier](https://github.com/deanhume/html-minifier) - A simple Windows command-line tool to minify your HTML, Razor views & Web Forms views 226 | 227 | ## Minifiers - JS & CSS 228 | 229 | - [YUI Compressor](https://github.com/yui/yuicompressor) - JavaScript compressor which, in addition to removing comments and white-spaces, obfuscates local variables using the smallest possible variable name. This obfuscation is safe, even when using constructs such as 'eval' or 'with' (although the compression is not optimal is those cases) Compared to jsmin, the average savings is around 20%. 230 | - [UglifyJS2](https://github.com/mishoo/UglifyJS2) - UglifyJS is a JavaScript parser, minifier, compressor or beautifier toolkit, written in JavaScript. 231 | - [CSSO](https://github.com/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. 232 | - [CSSmin.js](https://github.com/stoyan/yuicompressor/blob/master/ports/js/cssmin.js) - cssmin.js is a JavaScript port of YUICompressor's CSS minifier. 233 | - [Grunt-contrib-concat](https://github.com/gruntjs/grunt-contrib-concat) - A Grunt plugin to concatenate files. 234 | - [Grunt-contrib-uglify](https://github.com/gruntjs/grunt-contrib-uglify) - A Grunt plugin to concatenate and minify JavaScript files. 235 | - [Clean-css](https://github.com/jakubpawlowicz/clean-css) - A fast, efficient, and well tested CSS minifier for node.js. 236 | - [Django-compressor](https://github.com/django-compressor/django-compressor) - Compresses linked and inline JavaScript or CSS into a single cached file. 237 | - [Django-pipeline](https://github.com/cyberdelia/django-pipeline) - Pipeline is an asset packaging library for Django, providing both CSS and JavaScript concatenation and compression, built-in JavaScript template support, and optional data-URI image and font embedding. 238 | - [JShrink](https://github.com/tedious/JShrink) - JShrink is a PHP class that minifies JavaScript so that it can be delivered to the client quicker. 239 | - [JSCompress](http://jscompress.com/) - The most minimalistic online JS Compress tool. 240 | - [CSSshrink](https://github.com/stoyan/cssshrink) - Because CSS is ospon the critical path to rendering pages. It must be small! Or else! 241 | - [Grunt-cssshrink](https://github.com/JohnCashmore/grunt-cssshrink) - This is just a grunt wrapper for CSS Shrink. 242 | - [Gulp-cssshrink](https://github.com/torrottum/gulp-cssshrink) - Shrinks CSS files using cssshrink for Gulp. 243 | - [Prettyugly](https://github.com/stoyan/prettyugly) - Uglify (strip spaces) or prettify (add consistent spaces) CSS code. 244 | - [Grunt-contrib-cssmin](https://github.com/gruntjs/grunt-contrib-cssmin) - CSS Minifier for Grunt. 245 | - [Grunt-uncss](https://github.com/addyosmani/grunt-uncss) - A grunt task for removing unused CSS from your projects. 246 | - [Gulp-uncss](https://github.com/ben-eb/gulp-uncss) - A gulp task for removing unused CSS from your projects. 247 | 248 | ## Miscellaneous 249 | 250 | - [Socialite.js](http://socialitejs.com/) - 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. 251 | - [uCSS](https://github.com/oyvindeh/ucss) - uCSS is made for crawling (large) sites to find unused CSS selectors, but not remove unused CSS. 252 | - [HTTPinvoke](https://github.com/jakutis/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. 253 | - [Critical](https://github.com/addyosmani/critical) - Extract & Inline Critical-path CSS in HTML pages (alpha). 254 | - [Csscolormin](https://github.com/stoyan/csscolormin) - Utility that minifies CSS colors, example: min("white"); // minifies to "#fff". 255 | - [Lazysizes](https://github.com/aFarkas/lazysizes) - High performance lazy loader for images (responsive and normal), iframes and scripts, that detects any visibility changes triggered through user interaction, CSS or JavaScript without configuration. 256 | - [TMI](https://github.com/addyosmani/tmi) - TMI (Too Many Images) - discover your image weight on the web. 257 | 258 | ## Generators 259 | 260 | - [Glue](https://github.com/jorgebastida/glue) - Glue is a simple command-line tool to generate sprites: 261 | - [Pitomba-spriter](https://github.com/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. 262 | - [Grunt-spritesmith](https://github.com/Ensighten/grunt-spritesmith) - Grunt task for converting a set of images into a spritesheet and corresponding CSS variables. 263 | - [Grunt-sprite-css-replace](https://www.npmjs.com/package/grunt-sprite-css-replace) - Grunt task that generates a sprite from images referenced in a style sheet and then updates the references with the new sprite image and positions. 264 | - [Grunt-svg-sprite](https://www.npmjs.com/package/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. 265 | - [Gulp-sprite](https://github.com/aslansky/gulp-sprite) - gulp task for creating an image sprite and the corresponding style sheets for Gulp. 266 | - [Gulp-svg-sprites](https://github.com/shakyShane/gulp-svg-sprites) - gulp task for creating svg sprites. 267 | - [SvgToCSS](https://github.com/kajyr/SvgToCSS) - Optimizes and renders SVG files in CSS / Sass sprites. 268 | - [Assetgraph-sprite](https://github.com/assetgraph/assetgraph-sprite) - Assetgraph transform for auto generating sprites based on the CSS dependency graph. 269 | - [Sprite Cow](http://www.spritecow.com/) - Sprite Cow helps you get the background-position, width and height of sprites within a spritesheet as a nice bit of copyable CSS. 270 | - [CSS Sprite Generator](http://css.spritegen.com/) - CSS sprites allow you to combine multiple images into a single file. 271 | - [Sprity](https://github.com/sprity/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... 272 | - [Sprite Factory](https://github.com/jakesgordon/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 style sheet for use in your web application. 273 | 274 | ## SVG 275 | 276 | - [SVGO](https://github.com/svg/svgo) - SVGO is a Nodejs-based tool for optimizing SVG vector graphics files. 277 | - [SVG OMG](https://jakearchibald.github.io/svgomg/) - SVGOMG is SVGO's Missing GUI, aiming to expose the majority, if not all the configuration options of SVGO. 278 | - [Grunt-svgmin](https://github.com/sindresorhus/grunt-svgmin) - Minify SVG using SVGO for Grunt. 279 | - [Gulp-svgmin](https://www.npmjs.com/package/gulp-svgmin) - Minify SVG with SVGO for Gulp. 280 | - [Scour](http://www.codedread.com/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. 281 | - [SVG Cleaner](https://github.com/RazrFalcon/SVGCleaner) - 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. 282 | 283 | ## Web Components 284 | 285 | - [Polymer Bundler](https://github.com/Polymer/tools/tree/master/packages/bundler) - Polymer-bundler is a library for packaging project assets for production to minimize network round-trips. 286 | - [Gulp-vulcanize](https://github.com/sindresorhus/gulp-vulcanize) - Concatenate a set of Web Components into one file that use Vulcanize. 287 | 288 | ## Web server Benchmarks 289 | 290 | - [HTTPerf](https://github.com/httperf/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. 291 | - [Apache JMeter](http://jmeter.apache.org/download_jmeter.cgi) - Open source load testing tool: It is a Java platform application. 292 | - [Locust](http://locust.io) - An open source load testing tool. Define user behaviour with Python code, and swarm your system with millions of simultaneous users. 293 | - [Autoperf](https://github.com/igrigorik/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. 294 | - [HTTPerf.rb](https://github.com/jmervine/httperfrb) - Simple Ruby interface for httperf, written in Ruby. 295 | - [PHP-httperf](https://github.com/jmervine/php-httperf) - PHP Port of HTTPerf.rb. 296 | - [HTTPerf.js](https://github.com/jmervine/httperfjs) - JS Port of HTTPerf.rb. 297 | - [HTTPerf.py](https://github.com/jmervine/httperfpy) - Python Port of HTTPerf.rb. 298 | - [Gohttperf](https://github.com/jmervine/gohttperf) - Go Port of HTTPerf.rb. 299 | - [wrk](https://github.com/wg/wrk) - A HTTP benchmarking tool (with optional Lua scripting for request generation, response 300 | processing, and custom reporting) 301 | - [beeswithmachineguns](https://github.com/newsapps/beeswithmachineguns) - A utility for arming (creating) many bees (micro EC2 instances) to attack (load test) targets (web applications). 302 | - [k6](https://k6.io/) - 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 sites using HTTP/1.1, HTTP/2 and WebSocket. 303 | 304 | ## Web server Modules 305 | 306 | - [PageSpeed Module](https://developers.google.com/speed/pagespeed/module/download) - PageSpeed speeds up your site and reduces page load time. This open-source web server module automatically applies web performance best practices to pages and associated assets (CSS, JavaScript, images) without requiring that you modify your existing content or workflow. PageSpeed is available as a module for Apache 2.x and Nginx 1.x. 307 | - [WebP-detect](https://github.com/igrigorik/webp-detect) - WebP with Accept negotiation. 308 | 309 | # Specs 310 | 311 | - [Web Performance Working Group](http://www.w3.org/2010/webperf/) - 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. 312 | - [Page Visibility](http://www.w3.org/TR/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. 313 | - [Navigation Timing](https://w3c.github.io/navigation-timing/) - This specification defines a unified interface to store and retrieve high resolution performance metric data related to the navigation of a document. 314 | - [Resource Timing](http://www.w3.org/TR/resource-timing/) - This specification defines an interface for web applications to access the complete timing information for resources in a document. 315 | - [User Timing](http://www.w3.org/TR/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. 316 | - [Performance Timeline](http://www.w3.org/TR/performance-timeline/) - This specification defines a unified interface to store and retrieve performance metric data. This specification does not cover individual performance metric interfaces. 317 | - [CSS will-change](https://drafts.csswg.org/css-will-change/) - This specification defines the `will-change` CSS 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. 318 | - [Resource Hints](http://www.w3.org/TR/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. 319 | 320 | # Stats 321 | 322 | - [HTTP Archive](http://httparchive.org/index.php) - 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. 323 | 324 | # Other Awesome Lists 325 | 326 | - [iamakulov/awesome-webpack-perf](https://github.com/iamakulov/awesome-webpack-perf) - A curated list of webpack tools for web performance 327 | - [bayandin/awesome-awesomeness](https://github.com/bayandin/awesome-awesomeness). 328 | - [sindresorhus/awesome](https://github.com/sindresorhus/awesome). 329 | 330 | # Contributing 331 | 332 | For contributing, [open an issue](https://github.com/davidsonfellipe/awesome-wpo/issues) and/or a [pull request](https://github.com/davidsonfellipe/awesome-wpo/pulls). 333 | -------------------------------------------------------------------------------- /content/TALKS.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Talks 3 | author: Davidson Fellipe 4 | layout: post 5 | path: /talks/ 6 | --- 7 | 8 | # Talks 9 | 10 | > Talks about Web Performance Optimization 11 | 12 | - 🇺🇸 **Web performance made easy (Google I/O '18)** _by Ewa Gasperowicz, Addy Osmani_ ~ [video](https://www.youtube.com/watch?v=Mv-l3-tJgGk) 13 | - 🇺🇸 **The Future of Loading on the Web (Chrome Dev Summit 2017)** _by Sam Saccone_ ~ [video](https://www.youtube.com/watch?v=DKyHVGh666s) 14 | - 🇬🇧 **CSS Performance Tooling (2014)** _by Addy Osmani_ ~ [video](https://www.youtube.com/watch?v=FEs2jgZBaQA) 15 | - 🇧🇷 **Performance em jQuery apps (2012)** _by Davidson Fellipe_ ~ [slides](https://www.slideshare.net/davidsonfellipe/jqueryperf) 16 | - 🇧🇷 **O melhor da monitoração de Web Performance (2014)** _by Davidson Fellipe_ ~ [video](https://www.youtube.com/watch?v=mHFuWVyxcTg) / [slides](https://www.slideshare.net/davidsonfellipe/o-melhor-da-monitoracao-de-web-performance) 17 | - 🇺🇸 **Performance Tooling (2013)** _by Paul Irish_ ~ [video](https://www.youtube.com/watch?v=HAqjyCH_LOE) 18 | - 🇺🇸 **A developer's guide to rendering performance (2013)** _by Paul Lewis_ ~ [video](https://vimeo.com/77591536) / [slides](https://speakerdeck.com/paullewis/a-developers-guide-to-rendering-performance) 19 | - 🇺🇸 **Jank Free: Chrome Rendering Performance (2013)** _by Nat Duca and Tom Wiltzius_ ~ [video](https://www.youtube.com/watch?v=n8ep4leoN9A) 20 | - 🇺🇸 **Full Stack Web Performance (2014)** _by Nik Molnar_ ~ [video](https://vimeo.com/97415381) 21 | - 🇪🇸 **Curso WPO - Web Performance Optimization 2013** _by Pablo Martinez_ ~ [slides](https://www.slideshare.net/pablomartinezfernandez/curso-wpopol) 22 | - 🇪🇸 **Web Performance Optimization (2012)** _by Pedro Martínez_ ~ [slides](https://www.slideshare.net/pemargo1/wpo-congreso-seo4seos) 23 | - 🇧🇷 **Critical Rendering Path (2014)** _by João Lucas P Santana_ ~ [slides](https://docs.google.com/presentation/d/1QbZpQklANUJn65yXdC-2uFTanK_rrjgs2YVnbw891iQ/edit?usp=sharing) 24 | - 🇩🇪 **Web Performance Optimization (2011)** _by Fabian Lange_ ~ [slides](https://www.slideshare.net/fabianlange/web-performance-optimization-jax-2011-talk) 25 | - 🇺🇸 **Tactics and Tools for Troubleshooting frontend Web Development** _by Pluralsight_ ~ [course](https://www.pluralsight.com/courses/tactics-tools-troubleshooting-front-end-web-development) 26 | - 🇺🇸 **Site Performance Optimization - The Critical Rendering Path** _by Udacity_ ~ [course](https://www.udacity.com/course/website-performance-optimization--ud884) 27 | - 🇬🇧 **Browser Rendering Optimization** _by Udacity_ ~ [course](https://www.udacity.com/course/browser-rendering-optimization--ud860) 28 | - 🇺🇸 **Delivering the goods (2014)** _by Paul Irish_ ~ [video](https://www.youtube.com/watch?v=R8W_6xWphtw) / [slides](https://docs.google.com/presentation/d/1MtDBNTH1g7CZzhwlJ1raEJagA8qM3uoV7ta6i66bO2M/present?slide=id.p19) 29 | 30 | # Contributing 31 | 32 | For contributing, [open an issue](https://github.com/davidsonfellipe/awesome-wpo/issues) and/or a [pull request](https://github.com/davidsonfellipe/awesome-wpo/pulls). 33 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "awesome-wpo", 3 | "description": "Awesome web performance", 4 | "author": "Davidson Fellipe ", 5 | "dependencies": { 6 | "textlint": "^11.6.3", 7 | "textlint-rule-no-dead-link": "^4.6.2", 8 | "textlint-rule-terminology": "^2.1.4" 9 | }, 10 | "license": "MIT", 11 | "scripts": { 12 | "lint": "textlint --rule textlint-rule-terminology ./content/{ARTICLES,BLOGS,MEETUPS,TALKS}.md", 13 | "lint-no-dead-link": "textlint --rule textlint-rule-no-dead-link *.md" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /website/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # dotenv environment variable files 55 | .env* 56 | 57 | # gatsby files 58 | .cache/ 59 | public 60 | 61 | # Mac files 62 | .DS_Store 63 | 64 | # Yarn 65 | yarn-error.log 66 | .pnp/ 67 | .pnp.js 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | -------------------------------------------------------------------------------- /website/.prettierignore: -------------------------------------------------------------------------------- 1 | .cache 2 | package.json 3 | package-lock.json 4 | public 5 | -------------------------------------------------------------------------------- /website/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "avoid", 3 | "semi": false 4 | } 5 | -------------------------------------------------------------------------------- /website/gatsby-browser.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Implement Gatsby's Browser APIs in this file. 3 | * 4 | * See: https://www.gatsbyjs.org/docs/browser-apis/ 5 | */ 6 | 7 | // You can delete this file if you're not using it 8 | require('prismjs/themes/prism-okaidia.css') -------------------------------------------------------------------------------- /website/gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | siteUrl: "https://awesome-wpo.netlify.app/", 4 | title: `Awesome WPO`, 5 | description: `A curated list of Web Performance Optimization. Everyone can contribute here!`, 6 | author: `@davidsonfellipe`, 7 | }, 8 | plugins: [ 9 | `gatsby-plugin-styled-components`, 10 | `gatsby-plugin-react-helmet`, 11 | { 12 | resolve: `gatsby-source-filesystem`, 13 | options: { 14 | name: `images`, 15 | path: `${__dirname}/src/images`, 16 | }, 17 | }, 18 | { 19 | resolve: `gatsby-source-filesystem`, 20 | options: { 21 | name: `markdown-pages`, 22 | path: `../content`, 23 | }, 24 | }, 25 | { 26 | resolve: `gatsby-transformer-remark`, 27 | options: { 28 | plugins: [ 29 | { 30 | resolve: `gatsby-remark-prismjs`, 31 | options: { 32 | classPrefix: "language-", 33 | inlineCodeMarker: null, 34 | aliases: {}, 35 | showLineNumbers: false, 36 | noInlineHighlight: false, 37 | languageExtensions: [ 38 | { 39 | language: "superscript", 40 | extend: "javascript", 41 | definition: { 42 | superscript_types: /(SuperType)/, 43 | }, 44 | insertBefore: { 45 | function: { 46 | superscript_keywords: /(superif|superelse)/, 47 | }, 48 | }, 49 | }, 50 | ], 51 | prompt: { 52 | user: "root", 53 | host: "localhost", 54 | global: false, 55 | }, 56 | escapeEntities: {}, 57 | }, 58 | }, 59 | { 60 | resolve: `gatsby-remark-images`, 61 | options: { 62 | maxWidth: 1280, 63 | }, 64 | }, 65 | `gatsby-remark-responsive-iframe`, 66 | ], 67 | }, 68 | }, 69 | `gatsby-transformer-sharp`, 70 | `gatsby-plugin-sharp`, 71 | { 72 | resolve: `gatsby-plugin-manifest`, 73 | options: { 74 | name: `awesome-wpo`, 75 | short_name: `awesome wpo`, 76 | start_url: `/`, 77 | display: `minimal-ui`, 78 | icon: `src/images/gatsby-icon.jpg`, // This path is relative to the root of the site. 79 | }, 80 | }, 81 | { 82 | resolve: `gatsby-plugin-prefetch-google-fonts`, 83 | options: { 84 | fonts: [ 85 | { 86 | family: `Montserrat`, 87 | variants: [`400`, `400i`, `700`], 88 | }, 89 | { 90 | family: `Raleway`, 91 | variants: [`400`, `400i`, `700`], 92 | }, 93 | ], 94 | }, 95 | }, 96 | { 97 | resolve: `gatsby-plugin-google-analytics`, 98 | options: { 99 | trackingId: "UA-169341414-1", 100 | }, 101 | }, 102 | `gatsby-plugin-sitemap`, 103 | `gatsby-plugin-robots-txt`, 104 | ], 105 | } 106 | -------------------------------------------------------------------------------- /website/gatsby-node.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Implement Gatsby's Node APIs in this file. 3 | * 4 | * See: https://www.gatsbyjs.org/docs/node-apis/ 5 | */ 6 | 7 | // You can delete this file if you're not using it 8 | const path = require(`path`) 9 | 10 | exports.createPages = async ({ actions, graphql, reporter }) => { 11 | const { createPage } = actions 12 | 13 | const blogPostTemplate = path.resolve(`src/templates/blogTemplate.js`) 14 | 15 | const result = await graphql(` 16 | { 17 | allMarkdownRemark( 18 | sort: { order: DESC, fields: [frontmatter___title] } 19 | limit: 1000 20 | ) { 21 | edges { 22 | node { 23 | frontmatter { 24 | path 25 | } 26 | } 27 | } 28 | } 29 | } 30 | `) 31 | 32 | // Handle errors 33 | if (result.errors) { 34 | reporter.panicOnBuild(`Error while running GraphQL query.`) 35 | return 36 | } 37 | 38 | result.data.allMarkdownRemark.edges.forEach(({ node }) => { 39 | createPage({ 40 | path: node.frontmatter.path, 41 | component: blogPostTemplate, 42 | context: {}, // additional data can be passed via context 43 | }) 44 | }) 45 | } 46 | 47 | var fs = require("fs-extra") 48 | 49 | exports.onPostBuild = ({ reporter }) => { 50 | reporter.info(`Your legacy files has been built!`) 51 | } 52 | -------------------------------------------------------------------------------- /website/gatsby-ssr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Implement Gatsby's SSR (Server Side Rendering) APIs in this file. 3 | * 4 | * See: https://www.gatsbyjs.org/docs/ssr-apis/ 5 | */ 6 | 7 | // You can delete this file if you're not using it 8 | -------------------------------------------------------------------------------- /website/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fellipe.com", 3 | "private": true, 4 | "description": "Awesome WPO website", 5 | "version": "0.1.0", 6 | "author": "Davidson Fellipe ", 7 | "dependencies": { 8 | "babel-plugin-styled-components": "^1.10.7", 9 | "gatsby": "^2.19.45", 10 | "gatsby-cli": "^2.11.10", 11 | "gatsby-image": "^2.2.44", 12 | "gatsby-plugin-google-analytics": "^2.2.2", 13 | "gatsby-plugin-manifest": "^2.2.48", 14 | "gatsby-plugin-offline": "^3.0.41", 15 | "gatsby-plugin-prefetch-google-fonts": "^1.4.3", 16 | "gatsby-plugin-react-helmet": "^3.1.24", 17 | "gatsby-plugin-robots-txt": "^1.5.0", 18 | "gatsby-plugin-sharp": "^2.5.3", 19 | "gatsby-plugin-sitemap": "^2.4.2", 20 | "gatsby-plugin-styled-components": "^3.2.1", 21 | "gatsby-remark-images": "^3.2.1", 22 | "gatsby-remark-responsive-iframe": "^2.3.1", 23 | "gatsby-source-filesystem": "^2.2.2", 24 | "gatsby-transformer-remark": "^2.8.4", 25 | "gatsby-transformer-sharp": "^2.3.19", 26 | "prop-types": "^15.7.2", 27 | "react": "^16.12.0", 28 | "react-dom": "^16.12.0", 29 | "react-helmet": "^5.2.1", 30 | "styled-components": "^5.0.1", 31 | "textlint": "^11.6.3", 32 | "textlint-rule-no-dead-link": "^4.6.2", 33 | "textlint-rule-terminology": "^2.1.4" 34 | }, 35 | "devDependencies": { 36 | "gatsby-remark-prismjs": "^3.5.0", 37 | "prettier": "2.0.4", 38 | "prismjs": "^1.20.0" 39 | }, 40 | "keywords": [ 41 | "front-end developer" 42 | ], 43 | "license": "MIT", 44 | "scripts": { 45 | "build": "gatsby build", 46 | "develop": "gatsby develop", 47 | "start": "npm run develop", 48 | "serve": "gatsby serve", 49 | "clean": "gatsby clean", 50 | "lint": "textlint --rule textlint-rule-terminology ./content/{ARTICLES,BLOGS,MEETUPS,PEOPLE,TALKS}.md", 51 | "format": "prettier --write \"./src/**/*.{js,json,md}\"", 52 | "test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1" 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /website/src/components/Footer.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import styled from "styled-components" 3 | 4 | const Text = styled.footer` 5 | color: #ccc; 6 | padding: 15px 0; 7 | text-align: center; 8 | ` 9 | 10 | const Footer = () => since 2014 11 | 12 | export default Footer 13 | -------------------------------------------------------------------------------- /website/src/components/Header.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import Link from "gatsby-link" 3 | import styled from "styled-components" 4 | 5 | import Section from "./Section" 6 | import { screen } from "../styles/screen" 7 | import { font } from "../styles/theme" 8 | 9 | const Logo = styled.span` 10 | display: inline-block; 11 | text-align: left; 12 | width: 40%; 13 | ` 14 | 15 | const Wrapper = styled(Section)` 16 | position: relative; 17 | max-width: ${screen.max}; 18 | ` 19 | 20 | const Nav = styled.nav` 21 | color: #000; 22 | padding: 25px 0; 23 | margin: 0 auto; 24 | width: 100%; 25 | text-transform: uppercase; 26 | 27 | a { 28 | font-family: ${font.title}; 29 | text-decoration: none; 30 | } 31 | ` 32 | 33 | const Links = styled.div` 34 | display: inline-block; 35 | position: absolute; 36 | right: 0; 37 | 38 | a { 39 | padding: 0; 40 | 41 | &:after { 42 | content: ' '; 43 | display: inline-block; 44 | text-align: center; 45 | width: 50px; 46 | } 47 | 48 | &:last-child:after { 49 | display: none; 50 | } 51 | } 52 | } 53 | ` 54 | 55 | const Header = () => ( 56 | 70 | ) 71 | 72 | export default Header 73 | -------------------------------------------------------------------------------- /website/src/components/Hello.js: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import styled from "styled-components" 3 | 4 | import { screen } from "../styles/screen" 5 | import { font } from "../styles/theme" 6 | 7 | const Name = styled.h1` 8 | font-family: ${font.title}; 9 | margin: 75px 0 25px 0; 10 | font-size: 75px; 11 | text-transform: uppercase; 12 | 13 | ${screen.lg} { 14 | font-size: 150px; 15 | margin: 200px 0 15px -5px; 16 | letter-spacing: -0.04em; 17 | } 18 | ` 19 | 20 | const Text = styled.p` 21 | font-size: 18px; 22 | display: none; 23 | line-height: 1.5em; 24 | padding: 30px 0 0; 25 | position: relative; 26 | vertical-align: top; 27 | 28 | a { 29 | text-decoration: underline; 30 | } 31 | 32 | &:before { 33 | background: #000; 34 | display: block; 35 | content: " "; 36 | height: 5px; 37 | position: absolute; 38 | top: 0; 39 | width: 100px; 40 | } 41 | 42 | ${screen.lg} { 43 | display: inline-block; 44 | } 45 | ` 46 | 47 | const Sidebar = () => ( 48 |
49 | Awesome WPO 50 | 51 | A curated list of Web Performance Optimization. Everyone can contribute 52 | here! 53 | 54 |
55 | ) 56 | 57 | export default Sidebar 58 | -------------------------------------------------------------------------------- /website/src/components/ItemDate.js: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components' 2 | 3 | import { screen } from '../styles/screen' 4 | 5 | const ItemDate = styled.span` 6 | font-size: 20px; 7 | color: #ccc; 8 | display: block; 9 | 10 | ${screen.lg} { 11 | position: absolute; 12 | right: 0; 13 | top: 15px; 14 | } 15 | ` 16 | 17 | export default ItemDate 18 | -------------------------------------------------------------------------------- /website/src/components/Layout.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Layout component that queries for data 3 | * with Gatsby's useStaticQuery component 4 | * 5 | * See: https://www.gatsbyjs.org/docs/use-static-query/ 6 | */ 7 | 8 | import React from "react" 9 | import PropTypes from "prop-types" 10 | 11 | import "./layout.css" 12 | 13 | import styled from "styled-components" 14 | 15 | import { screen } from "../styles/screen" 16 | import { font } from "../styles/theme" 17 | 18 | import Header from "./Header" 19 | import Footer from "./Footer" 20 | 21 | const Wrapper = styled.div` 22 | font-family: ${font.text}; 23 | padding: 15px 7px 15px 0; 24 | margin: 0 auto; 25 | width: 100%; 26 | overflow: hidden; 27 | max-width: ${screen.max}; 28 | 29 | a { 30 | color: inherit; 31 | } 32 | ` 33 | 34 | const Section = styled.div` 35 | display: inline-block; 36 | padding: 15px; 37 | vertical-align: top; 38 | width: 100%; 39 | 40 | ${screen.lg} { 41 | padding: 0; 42 | } 43 | ` 44 | 45 | const Layout = ({ children }) => ( 46 | 47 |
48 |
{children}
49 |