This document is a summary of which third party scripts are most responsible for excessive JavaScript execution on the web today.
- Quantify the impact of third party scripts on the web.
- Identify the third party scripts on the web that have the greatest performance cost.
- Give developers the information they need to make informed decisions about which third parties to include on their sites.
- Incentivize responsible third party script behavior.
HTTP Archive is an inititiave that tracks how the web is built. Twice a month, ~4 million sites are crawled with Lighthouse on mobile. Lighthouse breaks down the total script execution time of each page and attributes the execution to a URL. Using BigQuery, this project aggregates the script execution to the origin-level and assigns each origin to the responsible entity.
Across top ~1 million sites, ~800 origins account for ~65% of all script execution time with the top 100 entities already accounting for ~59%. Third party script execution is the majority chunk of the web today, and it's important to make informed choices.
Each entity has a number of data points available.
- Usage (Total Number of Occurrences) - how many scripts from their origins were included on pages
- Total Impact (Total Execution Time) - how many seconds were spent executing their scripts across the web
- Average Impact (Average Execution Time) - on average, how many milliseconds were spent executing each script
- Category - what type of script is this
This section breaks down third parties by category. The third parties in each category are ranked from first to last based on the average impact of their scripts. Perhaps the most important comparisons lie here. You always need to pick an analytics provider, but at least you can pick the most well-behaved analytics provider.
Unsurprisingly, ads account for the largest identifiable chunk of third party script execution. Other balloons as a category primarily due to Google Tag Manager which is used to deliver scripts in multiple categories. Google Tag Manager script execution alone is responsible for more than half of the "Mixed / Other" category.
These scripts are part of advertising networks, either serving or measuring.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | Scorecard Research | 4,740 | 90 ms |
2 | Criteo | 63,058 | 137 ms |
3 | Taboola | 23,818 | 183 ms |
4 | AppNexus | 16,942 | 235 ms |
5 | Yahoo Ads | 8,495 | 247 ms |
6 | Pubmatic | 3,033 | 255 ms |
7 | Market GID | 3,831 | 274 ms |
8 | MGID | 10,472 | 277 ms |
9 | Integral Ads | 23,942 | 296 ms |
10 | Google/Doubleclick Ads | 1,412,404 | 330 ms |
11 | Sizmek | 3,831 | 333 ms |
12 | Yandex Ads | 28,882 | 386 ms |
13 | DoubleVerify | 4,041 | 503 ms |
14 | Moat | 23,170 | 616 ms |
15 | OpenX | 12,505 | 821 ms |
16 | MediaVine | 9,205 | 839 ms |
17 | Media Math | 3,498 | 905 ms |
18 | 33 Across | 20,756 | 1170 ms |
19 | Popads | 6,545 | 1245 ms |
20 | WordAds | 30,961 | 2543 ms |
These scripts measure or track users and their actions. There's a wide range in impact here depending on what's being tracked.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | Alexa | 1,721 | 56 ms |
2 | Baidu Analytics | 8,018 | 79 ms |
3 | Mixpanel | 7,258 | 79 ms |
4 | Google Analytics | 1,533,217 | 79 ms |
5 | Hotjar | 108,933 | 89 ms |
6 | Crazy Egg | 2,214 | 91 ms |
7 | Adobe Analytics | 34,436 | 192 ms |
8 | Tealium | 15,933 | 214 ms |
9 | Segment | 6,581 | 228 ms |
10 | Optimizely | 13,853 | 247 ms |
11 | Salesforce | 40,451 | 291 ms |
12 | Histats | 15,770 | 339 ms |
13 | Yandex Metrica | 217,229 | 377 ms |
14 | Lucky Orange | 6,037 | 870 ms |
These scripts enable social features.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | VK | 7,578 | 61 ms |
2 | 11,122 | 71 ms | |
3 | 1,212,567 | 120 ms | |
4 | Yandex Share | 30,677 | 128 ms |
5 | 295,308 | 154 ms | |
6 | 10,663 | 156 ms | |
7 | ShareThis | 39,884 | 216 ms |
8 | AddThis | 179,424 | 254 ms |
9 | Tumblr | 46,800 | 330 ms |
10 | PIXNET | 53,889 | 473 ms |
11 | Disqus | 723 | 580 ms |
These scripts enable video player and streaming functionality.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | YouTube | 23,184 | 104 ms |
2 | Wistia | 21,319 | 254 ms |
3 | Brightcove | 5,133 | 469 ms |
These scripts are developer utilities (API clients, site monitoring, fraud detection, etc).
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | New Relic | 3,613 | 52 ms |
2 | Stripe | 3,775 | 66 ms |
3 | OneSignal | 41,178 | 88 ms |
4 | Google APIs/SDK | 977,712 | 115 ms |
5 | App Dynamics | 2,248 | 117 ms |
6 | Cloudflare | 3,151 | 185 ms |
7 | PayPal | 6,376 | 241 ms |
8 | Yandex APIs | 57,425 | 368 ms |
9 | Distil Networks | 11,489 | 409 ms |
10 | Sentry | 15,272 | 729 ms |
These scripts are from web hosting platforms (WordPress, Wix, Squarespace, etc). Note that in this category, this can sometimes be the entirety of script on the page, and so the "impact" rank might be misleading. In the case of WordPress, this just indicates the libraries hosted and served by WordPress not all sites using self-hosted WordPress.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | WordPress | 135,176 | 113 ms |
2 | Shopify | 227,933 | 163 ms |
3 | Squarespace | 86,605 | 412 ms |
4 | Hatena Blog | 53,675 | 516 ms |
5 | Wix | 158,466 | 1153 ms |
These scripts are from marketing tools that add popups/newsletters/etc.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | Hubspot | 15,991 | 89 ms |
2 | OptinMonster | 1,483 | 127 ms |
3 | Beeketing | 62,659 | 149 ms |
4 | Drift | 3,929 | 156 ms |
5 | Mailchimp | 21,946 | 161 ms |
6 | Sumo | 39,747 | 390 ms |
7 | Albacross | 1,407 | 769 ms |
These scripts are from customer support/marketing providers that offer chat and contact solutions. These scripts are generally heavier in weight.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | LiveChat | 23,881 | 93 ms |
2 | Freshdesk | 973 | 154 ms |
3 | Help Scout | 665 | 198 ms |
4 | Olark | 14,917 | 309 ms |
5 | Tawk.to | 40,228 | 386 ms |
6 | ZenDesk | 36,411 | 476 ms |
7 | Intercom | 15,511 | 554 ms |
8 | Zopim | 55,964 | 688 ms |
These scripts are from content providers or publishing-specific affiliate tracking.
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | AMP | 60,944 | 196 ms |
2 | Vox Media | 702 | 558 ms |
3 | Hotmart | 1,008 | 814 ms |
These are mostly open source libraries (e.g. jQuery) served over different public CDNs. This category is unique in that the origin may have no responsibility for the performance of what's being served. Note that rank here does not imply one CDN is better than the other. It simply indicates that the libraries being served from that origin are lighter/heavier than the ones served by another..
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | Bootstrap CDN | 2,860 | 44 ms |
2 | FontAwesome CDN | 17,002 | 102 ms |
3 | Yandex CDN | 2,499 | 115 ms |
4 | jQuery CDN | 170,001 | 154 ms |
5 | Cloudflare CDN | 119,800 | 176 ms |
6 | Google CDN | 811,231 | 178 ms |
7 | JSDelivr CDN | 27,070 | 257 ms |
8 | CreateJS CDN | 1,988 | 3188 ms |
These are miscellaneous scripts delivered via a shared origin with no precise category or attribution. Help us out by identifying more origins!
Rank | Name | Usage | Average Impact |
---|---|---|---|
1 | Amazon S3 | 35,291 | 152 ms |
2 | All Other 3rd Parties | 1,649,095 | 198 ms |
3 | Google Tag Manager | 1,093,167 | 386 ms |
4 | Parking Crew | 4,021 | 428 ms |
This section highlights the entities responsible for the most script execution across the web. This helps inform which improvements would have the largest total impact.
Name | Popularity | Total Impact | Average Impact |
---|---|---|---|
Google/Doubleclick Ads | 1,412,404 | 466,442 s | 330 ms |
Google Tag Manager | 1,093,167 | 421,590 s | 386 ms |
All Other 3rd Parties | 1,649,095 | 326,279 s | 198 ms |
Wix | 158,466 | 182,642 s | 1153 ms |
1,212,567 | 145,169 s | 120 ms | |
Google CDN | 811,231 | 144,059 s | 178 ms |
Google Analytics | 1,533,217 | 121,451 s | 79 ms |
Google APIs/SDK | 977,712 | 112,781 s | 115 ms |
Yandex Metrica | 217,229 | 81,926 s | 377 ms |
WordAds | 30,961 | 78,744 s | 2543 ms |
AddThis | 179,424 | 45,657 s | 254 ms |
295,308 | 45,394 s | 154 ms | |
Zopim | 55,964 | 38,494 s | 688 ms |
Shopify | 227,933 | 37,169 s | 163 ms |
Squarespace | 86,605 | 35,683 s | 412 ms |
Hatena Blog | 53,675 | 27,679 s | 516 ms |
jQuery CDN | 170,001 | 26,146 s | 154 ms |
PIXNET | 53,889 | 25,483 s | 473 ms |
33 Across | 20,756 | 24,283 s | 1170 ms |
Yandex APIs | 57,425 | 21,138 s | 368 ms |
Cloudflare CDN | 119,800 | 21,084 s | 176 ms |
ZenDesk | 36,411 | 17,340 s | 476 ms |
Tawk.to | 40,228 | 15,541 s | 386 ms |
Sumo | 39,747 | 15,492 s | 390 ms |
Tumblr | 46,800 | 15,443 s | 330 ms |
WordPress | 135,176 | 15,341 s | 113 ms |
Moat | 23,170 | 14,281 s | 616 ms |
AMP | 60,944 | 11,948 s | 196 ms |
Salesforce | 40,451 | 11,786 s | 291 ms |
Yandex Ads | 28,882 | 11,155 s | 386 ms |
Sentry | 15,272 | 11,134 s | 729 ms |
OpenX | 12,505 | 10,269 s | 821 ms |
Hotjar | 108,933 | 9,724 s | 89 ms |
Beeketing | 62,659 | 9,362 s | 149 ms |
Criteo | 63,058 | 8,659 s | 137 ms |
ShareThis | 39,884 | 8,618 s | 216 ms |
Intercom | 15,511 | 8,588 s | 554 ms |
Popads | 6,545 | 8,147 s | 1245 ms |
MediaVine | 9,205 | 7,723 s | 839 ms |
Integral Ads | 23,942 | 7,081 s | 296 ms |
JSDelivr CDN | 27,070 | 6,959 s | 257 ms |
Adobe Analytics | 34,436 | 6,617 s | 192 ms |
CreateJS CDN | 1,988 | 6,337 s | 3188 ms |
Wistia | 21,319 | 5,416 s | 254 ms |
Amazon S3 | 35,291 | 5,356 s | 152 ms |
Histats | 15,770 | 5,343 s | 339 ms |
Lucky Orange | 6,037 | 5,255 s | 870 ms |
Distil Networks | 11,489 | 4,695 s | 409 ms |
Olark | 14,917 | 4,610 s | 309 ms |
Taboola | 23,818 | 4,357 s | 183 ms |
AppNexus | 16,942 | 3,987 s | 235 ms |
Yandex Share | 30,677 | 3,920 s | 128 ms |
OneSignal | 41,178 | 3,641 s | 88 ms |
Mailchimp | 21,946 | 3,544 s | 161 ms |
Optimizely | 13,853 | 3,418 s | 247 ms |
Tealium | 15,933 | 3,407 s | 214 ms |
Media Math | 3,498 | 3,167 s | 905 ms |
MGID | 10,472 | 2,902 s | 277 ms |
Brightcove | 5,133 | 2,410 s | 469 ms |
YouTube | 23,184 | 2,410 s | 104 ms |
LiveChat | 23,881 | 2,216 s | 93 ms |
Yahoo Ads | 8,495 | 2,098 s | 247 ms |
DoubleVerify | 4,041 | 2,031 s | 503 ms |
FontAwesome CDN | 17,002 | 1,728 s | 102 ms |
Parking Crew | 4,021 | 1,720 s | 428 ms |
10,663 | 1,659 s | 156 ms | |
PayPal | 6,376 | 1,539 s | 241 ms |
Segment | 6,581 | 1,498 s | 228 ms |
Hubspot | 15,991 | 1,430 s | 89 ms |
Sizmek | 3,831 | 1,274 s | 333 ms |
Albacross | 1,407 | 1,082 s | 769 ms |
Market GID | 3,831 | 1,049 s | 274 ms |
Hotmart | 1,008 | 821 s | 814 ms |
11,122 | 795 s | 71 ms | |
Pubmatic | 3,033 | 774 s | 255 ms |
Baidu Analytics | 8,018 | 632 s | 79 ms |
Drift | 3,929 | 615 s | 156 ms |
Cloudflare | 3,151 | 584 s | 185 ms |
Mixpanel | 7,258 | 573 s | 79 ms |
VK | 7,578 | 460 s | 61 ms |
Scorecard Research | 4,740 | 427 s | 90 ms |
Disqus | 723 | 419 s | 580 ms |
Vox Media | 702 | 392 s | 558 ms |
Yandex CDN | 2,499 | 287 s | 115 ms |
App Dynamics | 2,248 | 263 s | 117 ms |
Stripe | 3,775 | 249 s | 66 ms |
Crazy Egg | 2,214 | 201 s | 91 ms |
New Relic | 3,613 | 189 s | 52 ms |
OptinMonster | 1,483 | 188 s | 127 ms |
Freshdesk | 973 | 150 s | 154 ms |
Help Scout | 665 | 132 s | 198 ms |
Bootstrap CDN | 2,860 | 126 s | 44 ms |
Alexa | 1,721 | 96 s | 56 ms |
- Introduce URL-level data for more fine-grained analysis, i.e. which libraries from Cloudflare/Google CDNs are most expensive.
- Expand the scope, i.e. include more third parties and have greater entity/category coverage.
This can be for one of several reasons:
- The entity does not have at least 100 references to their origin in the dataset.
- The entity's origins have not yet been identified. See How can I contribute?
The HTTP Archive dataset includes Lighthouse reports for each URL on mobile. Lighthouse has an audit called "bootup-time" that summarizes the amount of time that each script spent on the main thread. The "Average Impact" for an entity is the total execution time of scripts whose domain matches one of the entity's domains divided by the total number of occurences of those scripts.
Average Impact = Total Execution Time / Total Occurences
Lighthouse's bootup time audit attempts to attribute all toplevel main-thread tasks to a URL. A main thread task is attributed to the first script URL found in the stack. If you're interested in helping us improve this logic, see Contributing for details.
Verify that the origins in data/entities.json
are correct. Most issues will simply be the result of mislabelling of shared origins. If everything checks out, there is likely no further action and the data is valid. If you still believe there's errors, file an issue to discuss futher.
Only about 90% of the third party script execution has been assigned to an entity. We could use your help identifying the rest! See Contributing for details.
The origin->entity mapping can be found in data/entities.json
. Adding a new entity is as simple as adding a new array item with the following form.
{
"name": "Facebook",
"homepage": "https://www.facebook.com",
"categories": ["social"],
"origins": [
"www.facebook.com",
"connect.facebook.net",
"staticxx.facebook.com",
"static.xx.fbcdn.net",
"m.facebook.com"
]
}
The logic for attribution to individual script URLs can be found in the Lighthouse repo. File an issue over there to discuss further.
The query used to compute the origin-level data is in sql/origin-execution-time-query.sql
, running this against the latest Lighthouse HTTP Archive should give you a JSON export of the latest data that can be checked in at data/YYYY-MM-DD-origin-scripting.json
.
This README is auto-generated from the template lib/template.md
and the computed data. In order to update the charts, you'll need to make sure you have cairo
installed locally in addition to yarn install
.
# Install `cairo` and dependencies for node-canvas
brew install pkg-config cairo pango libpng jpeg giflib