npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

exthouse

v1.0.0

Published

Analyze the impact of a browser extension on web performance

Downloads

3

Readme

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.

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/*.

| Name | Score | Users Count | FID Δ ( ms ) | | --------------------- | ----- | ----------- | ------------ | | Grammarly for Chrome | 50 | 10M | 114 | | Adblock Plus | 59 | 10M | 118 | | Skype | 82 | 10M | 150 | | Avira Browser Safety | 94 | 10M | 60 | | Avast SafePrice | 99 | 10M | 62 | | AdBlock | 100 | 10M | 0 | | Google Translate | 100 | 10M | 0 | | Pinterest Save Button | 100 | 10M | 0 | | Tampermonkey | 100 | 10M | 0 | | uBlock Origin | 100 | 10M | 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.