All Projects → treosh → Exthouse

treosh / Exthouse

Licence: mit
Analyze the impact of a browser extension on web performance.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Exthouse

Lighthouse Batch
Run Lighthouse analysis over multiple sites in a single command
Stars: ✭ 83 (-77.98%)
Mutual labels:  lighthouse, performance-analysis
Websu
Website Speed and Performance Optimization and monitoring
Stars: ✭ 37 (-90.19%)
Mutual labels:  lighthouse, performance-analysis
Publisher Ads Lighthouse Plugin
Publisher Ads Lighthouse Plugin is a tool to improve ad speed and overall quality through a series of automated audits. This tool will aid in resolving discovered problems, providing a tool to be used to evaluate effectiveness of iterative changes while suggesting actionable feedback.
Stars: ✭ 58 (-84.62%)
Mutual labels:  lighthouse, performance-analysis
Lighthouse Monitor
Investigate performance over your whole company with lighthouse
Stars: ✭ 136 (-63.93%)
Mutual labels:  lighthouse, performance-analysis
Cypress Audit
⚡️ Run Lighthouse and Pa11y audits directly in your E2E test suites
Stars: ✭ 145 (-61.54%)
Mutual labels:  hacktoberfest, lighthouse
lighthouse-chromium-alpine-docker
Run Google's Lighthouse headless in the background
Stars: ✭ 16 (-95.76%)
Mutual labels:  performance-analysis, lighthouse
Lighthouse Ci
A useful wrapper around Google Lighthouse CLI
Stars: ✭ 198 (-47.48%)
Mutual labels:  hacktoberfest, lighthouse
docker-google-lighthouse-puppeteer
Google Lighthouse + Puppeteer / Docker Image
Stars: ✭ 29 (-92.31%)
Mutual labels:  performance-analysis, lighthouse
Rustscan
🤖 The Modern Port Scanner 🤖
Stars: ✭ 5,218 (+1284.08%)
Mutual labels:  hacktoberfest
Ruby Net Ldap
Pure Ruby LDAP library
Stars: ✭ 374 (-0.8%)
Mutual labels:  hacktoberfest
Netjsonconfig
Network configuration management library based on NetJSON DeviceConfiguration
Stars: ✭ 372 (-1.33%)
Mutual labels:  hacktoberfest
Awesome Uses
A list of /uses pages detailing developer setups, gear, software and configs.
Stars: ✭ 3,861 (+924.14%)
Mutual labels:  hacktoberfest
Castero
TUI podcast client for the terminal
Stars: ✭ 375 (-0.53%)
Mutual labels:  hacktoberfest
Slimefun4
Slimefun 4 - A unique Spigot/Paper plugin that looks and feels like a modpack. We've been giving you backpacks, jetpacks, reactors and much more since 2013.
Stars: ✭ 369 (-2.12%)
Mutual labels:  hacktoberfest
Mosdepth
fast BAM/CRAM depth calculation for WGS, exome, or targeted sequencing
Stars: ✭ 376 (-0.27%)
Mutual labels:  hacktoberfest
Magento2 Theme Blank Sass
SASS based version of Magento 2 Blank theme
Stars: ✭ 373 (-1.06%)
Mutual labels:  hacktoberfest
Hexapod
Blazing fast hexapod robot simulator for the web.
Stars: ✭ 370 (-1.86%)
Mutual labels:  hacktoberfest
Github Profile Readme Generator
GitHub profile readme generator allows you to create nice and simple GitHub profile readme files that will be included in your profile previews.
Stars: ✭ 374 (-0.8%)
Mutual labels:  hacktoberfest
Hyperjson
A hyper-fast Python module for reading/writing JSON data using Rust's serde-json.
Stars: ✭ 374 (-0.8%)
Mutual labels:  hacktoberfest
Sp Dev Solutions
Repository for SharePoint development reusable solutions
Stars: ✭ 373 (-1.06%)
Mutual labels:  hacktoberfest

Exthouse

Analyze the impact of a browser extension on web performance.

Screenshot of Grammarly extension performance report generated by Exthouse

Motivation

When measuring real user performance engineers take to the account factors like device and network conditions. But there is one more factor, that is not in direct control - web extensions. They add additional scripts, DOM manipulations, and impact the user experience.

Exthouse is a tool powered by Lighthouse that provides a report about web extension impact on web performance. It measures an extension performance score that helps developers to improve the performance of their extensions and web in general.

Goals:

  1. Highlight one more performance factor affecting web performance.
  2. Identify web extensions that harm web performance.
  3. Provide developers with reports they can use to improve performance.
  4. Show that desktop users may experience unexpected performance issues related to web extensions.
  5. Try to figure out the way to notify users about a negative impact of the installing extension, at best at Chrome Web Store level.

Methodology

Exthouse performs several steps to do analysis:

  1. Launches a browser without extension to evaluate the default performance and store results ./exthouse/result-default-1.json

  2. Launch a browser with installed extension using Puppeteer and stores results to ./exthouse/MY_EXTENTION-1.json

  3. Extends Lighthouse performance categories with additional audits to estimate the impact of the extension:

    • exthouse-new-long-tasks - The value represents a sum of Long Tasks. Long Tasks (weight: 1).
    • exthouse-max-potential-fid-change - The change for the longest task duration highlights the impact on potential First Input Delay (weight: 1).
    • exthouse-extension-files - Extension files add extra CPU consumption for every URL visit. Bundle resources into one and leverage hot chaching. Learn more (weight: 1).
    • exthouse-default-metrics - All metrics collected from the default run (without extension) (weight: 0).
  4. Generates Lighthouse style report using the Lighthouse scoring algorithm.

Environment conditions:

  • Browser: Chromium
  • Emulated form factor: desktop
  • CPU slowdown multiplier: 2
  • More settings in Lighthouse config.

Most of the extensions add tasks to the main thread and affect interactivity metrics:

  • Time to Interactive (TTI) - Time to interactive is the amount of time it takes for the page to become fully interactive. Learn more.
  • First Input Ddelay (FID) - The change for the longest task duration highlights the impact on potential First Input Delay. Learn more.

Analysis of top 10 extensions from Chrome Web Store

This analysis evaluates the top 10 extensions from Chrome Web Store by users count. Extensions are manually filtered to exclude login requirement, not relevant extensions in categories like PLATFORM_APP, or related to specific URLs like *://*.google.com/*.

Performance impact of top 10 extensions from Chrome Web Store
Name Score Users Count FID Δ ( ms ) Scripting Δ ( ms )
Grammarly for Chrome 50 10M 114 530
Adblock Plus 59 10M 118 760
Skype 82 10M 150 120
Avira Browser Safety 94 10M 60 30
Avast SafePrice 99 10M 62 0
AdBlock 100 10M 0 0
Google Translate 100 10M 0 0
Pinterest Save Button 100 10M 0 0
Tampermonkey 100 10M 0 0
uBlock Origin 100 10M 0 0

Usage

Install CLI using npm:

npm install --global exthouse

exthouse --help

Usage: exthouse [path/to/extension.crx] [options]

Options:
  --runs <number>    amount of runs to evaluate median performance value (default: "1")
  --url <url>        url to evaluate extension performance (default: "https://example.com/")
  --format <format>  output format options: [json,html] (default: "html")
  --disableGather    disable gathering and use /exthouse to produce results
  -V, --version      output the version number
  -h, --help         output usage information

CLI usage examples

# Evaluate extensions with several runs.
# It performs do 3 runs, get median value and generate a report.
exthouse Grammarly-for-Chrome.crx --runs=3`

# Generate a report based on existing data:
# It reads results from `/exthouse` folder and generate report.
exthouse Grammarly-for-Chrome.crx --disableGather

# Output report in json format
exthouse Grammarly-for-Chrome.crx --format=json`

Evaluate any extension

  1. Download extension using https://chrome-extension-downloader.com/
  2. Copy path to the MY_EXTENTION.crx and pass to cli exthouse MY_EXTENTION.crx --runs=3
  3. The process takes a few minutes and results are stored in the Lighthouse report.
  4. All debug data is stored in exthouse folder.

Find downloaded examples extensions folder.

Future Work

  • [ ] add support for login script to test extensions required authentication (#22)
  • [ ] perform extensions analysis required authentication and compare score w/o authentication. #25
  • [ ] experiment with cache (try: warm, hot) to see how scripts are effected by v8 caching. More about cache.
  • [ ] experiment with results, running in Chrome and Edge. Add flag browserBinaryPath
  • [ ] expose node.js API (#24)
  • [ ] experiment with Firefox add-ons (all related work is in the branch firefox-experimental).
  • [ ] make repo smaller using bfg-repo-cleaner.

Credits

This tweet has kick-started the initial research and this project.

Development is sponsored by Treo.sh - Page speed monitoring made easy.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].