• Stars
    star
    514
  • Rank 86,040 (Top 2 %)
  • Language
  • Created about 6 years ago
  • Updated about 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

measuring memory usage of popular webapps

your web app is bloated

Using firefox's memory snapshot tool, I measured the heap usage of a variety of web apps. Here is how everything did.

App Memory (MiB = 10242 B)
google inbox 215 (!!!)
gmail (standard) 158
google sheets (spreadsheet) 96.98
slack 76.53
google-maps 65.61
patchbay (patchlite) 59.93
youtube video 59.04
nytimes 56.08
facebook messenger 57.78
facebook newsfeed 56.12
riot 55.31
toggle 49.77
google docs (document) 46.57
soundcloud (track open) 45.80
hackmd (document) 44.9
reddit 43.77
airbnb 40.8
jitsi 40.21
tweetdeck 40.38
the onion 38.30
rocketchat 32.12
open collective 31.22
vimeo (video) 31.15
youtube 30.00
sandstorm (spreadsheet) 27.63
pinterest 26.80
images.google (result) 26.41
twitter 25.09
google docs 24.7
facebook 23.49
soundcloud 22
spotify 19.64
medium 18.53
medium (article) 17.99
bandcamp 14.86
google results 14.77
patchless 12.43
google-maps-mobile 12.06
google 11.30
google hangouts 10.76
talky 9.40
bandcamp (album page) 8.76
dat-shopping-list 8.28
gmail-mobile 7.93
the guardian 7.36
duckduckgo images (result) 7.31
github 7.41
openstreetmap (on new york, transportation layer) 6.72
wikipedia page 5.93
duckduckgo 5.63
meatspace chat 4.48
duckduckgo results 4.81
stackoverflow 2.55
wikipedia 1.73
gmail (vintage) 0.81
patchfoo 0.7

Table of Contents

Method

I opened each site in firefox, and used the memory shapshot tool. I screen shotted the output using scrot. I was running ublock, and that probably made some sites smaller.

Work

github - 7.41 MB

^top

github homepage (my news feed)

memory-snapshot

google - 11.30 MB

^top

empty google page. A surprising amount of memory used since it shows nothing but a single field.

memory-snapshot

google results - 14.77 MB

^top

prehaps still a lot of memory considering very little images or real time interactions here.

memory-snapshot

duckduckgo - 5.63 MB

^top

much less memory than google! I guess it's the tracking features in google that uses the extra memory!

memory-snapshot

duckduckgo results - 4.81 MB

^top

memory-snapshot

google images (result) - 26.41 MB

^top

fairly efficient, compared to reddit, youtube etc

memory-snapshot

duckduckgo images (result) - 7.31 MB

^top

1/3 the memory google images uses

memory-snapshot

wikipedia - 1.73 MB

^top

memory-snapshot

wikipedia (article) - 5.93 MB

^top

static page with some images

memory-snapshot

stackoverflow - 2.55 MB

^top

static site

memory-snapshot

google docs - 24.7 MB

^top

memory-snapshot

google docs (document) - 46.57 MB

^top

this seems like more than should be necessary. mainly js objects.

memory-snapshot

google sheets (spreadsheet) - 96.98 MB

^top

a lot of memory, especially considering spreadsheets were the killer app back in the apple 2 days, where lots of people brought computers for the first time to run visicalc on 64k of memory?

memory-snapshot

hackmd (document) - 44.9 MB

^top

about the same as a google doc

memory-snapshot

sandstorm (spreadsheet) - 27.63 MB

^top

almost 1/4 that of google spreadsheets.

memory-snapshot

toggl - 49.77 MB

^top

time tracking software, quite bloated.

memory-snapshot


Social / Comms

twitter - 25.09 MB

^top

loaded twitter homepage and didn't scroll or touch anything

memory-snapshot

tweetdeck - 40.38 MB

^top

twitter power user interface, with mentions and messages, one user's feed, and a search feed added.

memory-snapshot

twitter (mobile) - 30.84

^top

not better than regular web twitter

memory-snapshot

reddit - 43.77 MB

^top

the reddit homepage has an infinite scroller, usually means lots of javascript and js objects.

memory-snapshot

facebook - 23.49 MB

^top

just the login page! already a lot of javascript has been loaded. The most bloated landing page, twice as much as google, 10x wikipedia.

memory-snapshot

facebook newsfeed - 56.12 MB

^top

a lot of objects are in memory, presumably this is from using react.

memory-snapshot

facebook messenger - 57.78 MB

^top

same memory use as fb news feed. react, of course.

memory-snapshot

gmail (basic) - 0.81 MB

^top

nearly nothing! I use this daily. Really, it's an amazing level of functionality and user-friendlyness, packed into a very simple interface. Also, because it doesn't have any kind of dynamic updates, it's less distracting than the other email interfaces. You have to intentionally check for emails, there is no notifications or changing favicons. so ugly it's beautiful.

memory-snapshot

gmail (mobile) - 7.93 MB

^top

Google's mobile apps are respectable. again, pretending to be a nexus 5.

memory-snapshot

gmail (standard) - 158 MB

^top

amazingly bloated. mostly massive amounts of javascript (it has a progress bar that shows at startup) but just the JS objects are 37 mb.

memory-snapshot

google inbox - 215 MB (!!!)

^top

makes standard gmail look tame. did they take gmail standard and just add more stuff?

memory-snapshot

slack - 76.53 MB

^top

bloated! largely javascript.

memory-snapshot

rocketchat - 32.12 MB

^top

does the same thing as slack, but with less javascript. rocketchat is mostly js objects, but still less than slack.

memory-snapshot

riot - 55.31 MB

^top

more js objects than slack, but less javascript.

memory-snapshot

meatspace chat - 4.48 MB

^top

as tight as a static site, but does crazy javascript stuff!

memory-snapshot


video

youtube (mobile) - 5.49 MB

^top

just the landing page. acceptable.

memory-snapshot

youtube (mobile, playing video) - 15.94 MB

^top

memory-snapshot

youtube - 30.00 MB

^top

pretty light weight considering it's youtube

memory-snapshot

youtube (video) - 59.04 MB

^top

At first I thought this was reasonable (since you are playing video) but then I discovered that actually you can play video with a lot less!

memory-snapshot

vimeo (video) - 31.15

^top

memory-snapshot

maps

google-maps - 65.61 MB

^top

Pretty heavy compared to the other options. I've been informed that this uses webgl, but the mobile version only uses tiles.

memory-snapshot

openstreetmap - 6.72 MB

^top

only 10% the memory of google maps and does essentially the same thing!

on new york, with transportation layer enabled

memory-snapshot

google-maps (mobile) - 12.06

^top

pretending to be a nexus 5. Much better! you can also force this version by adding ?force=pwa to google-maps url

memory-snapshot


news / content

nytimes - 56.08 MB

^top

very bloated.

memory-snapshot

the guardian - 7.36 MB

^top

pretty good.

memory-snapshot

the onion - 38.30 MB

^top

quite bloated, nearly as much as reddit, but is created entirely by their in-house writers.

memory-snapshot

medium - 18.53 MB

^top

could be better, but not as bad as others.

memory-snapshot

medium (article) - 17.99 MB

^top

memory-snapshot


music

soundcloud - 22 MB

^top

better than youtube

memory-snapshot

soundcloud (track open) - 45.80 MB

^top

better than youtube

memory-snapshot

bandcamp - 14.86 MB

^top

front page has listings, memory use similar to google search results. the best content site.

memory-snapshot

bandcamp (album page) - 8.76 MB

^top

pretty tight!

memory-snapshot

spotify

^top

Impressive!

memory-snapshot


video chat

talky - 9.40 MB

^top

started a call with no one else in it. pretty tight!

memory-snapshot

google hangouts - 10.76 MB

^top

on a call by my self. also surprisingly unbloated!

memory-snapshot

jitsi - 40.21 MB

^top

4x google hangouts.

memory-snapshot

other

pinterest - 26.80 MB

^top

about the same as google images

memory-snapshot

airbnb - 40.8 MB

^top

Searched for "san francisco". A lot of memory used to just display a list, especially considering there is no map displayed. Smells like react.

memory-snapshot

open collective - 31.22 MB

^top

react site, but it's not data that changes very often. pretty bloated.

memory-snapshot

--

p2p

patchless - 12.43 MB

^top

A social p2p client with heavy javascript, including infinite scrollers!

memory-snapshot

dat-shopping-list - 8.28 MB

^top

simple shopping list app on dat

memory-snapshot

patchbay (patchlite) - 59.93

^top

slightly old version of patchbay because it could be bundled and run inside firefox.

memory-snapshot

patchfoo - 0.7 MB

^top

A pure html social p2p client; form-based with no javascript

memory-snapshot

conclusions

^top

I started exploring this because I was trying to figure out how to optimize my own apps. Memory use isn't the most important thing, but it is an easy to measure proxy. If you have less memory usage, you probably have a simpler app, which is probably more performant. Less memory also means lees garbage collection activity.

google's apps are particularly interesting because they provide both the worst offenders (gmail, inbox, docs), but their mobile apps are really solid!

Recently, web development style has moved towards a fully dynamic front end that generates everything in javascript. If a app really is highly dynamic, I guess that is somewhat excusable, (such as facebook or slack) but I on a site that could be static it obviously uses a lot more.

I think this just shows there is considerable room for improvement in terms of application efficiency.

More Repositories

1

event-stream

EventStream is like functional programming meets IO
JavaScript
2,189
star
2

JSON.sh

a pipeable JSON parser written in Bash
Shell
1,996
star
3

JSONStream

rawStream.pipe(JSONStream.parse()).pipe(streamOfObjects)
JavaScript
1,913
star
4

scuttlebutt

peer-to-peer replicatable data structure
JavaScript
1,310
star
5

rc

The non-configurable configuration loader for lazy people.
JavaScript
995
star
6

crdt

Commutative Replicated Data Types for easy collaborative/distributed systems.
JavaScript
836
star
7

through

simple way to create a ReadableWritable stream that works
JavaScript
667
star
8

npmd

JavaScript
450
star
9

split

JavaScript
346
star
10

curry

simple curry module, with nothing *too clever*, and full test coverage
JavaScript
313
star
11

random-name

JavaScript
296
star
12

hashlru

JavaScript
240
star
13

wifi.sh

Shell
216
star
14

level-sublevel

no longer maintained, sorry!
JavaScript
194
star
15

mux-demux

mutiplex-demultiplex multiple streams through a single text Stream
JavaScript
179
star
16

noderify

official fork: https://github.com/staltz/noderify
JavaScript
157
star
17

feedopensource

Iteratively Fund Open Source Projects With Bitcoin
JavaScript
142
star
18

excel-stream

JavaScript
137
star
19

stream-spec

executable specification for Stream (make testing streams easy)
JavaScript
125
star
20

map-stream

JavaScript
122
star
21

map-reduce

async map-reduce functions for nodejs
JavaScript
121
star
22

cyphernet

115
star
23

observable

A Mutable Value represented as a Function.
HTML
111
star
24

stream-combiner

JavaScript
103
star
25

rpc-stream

JavaScript
98
star
26

bench-lru

JavaScript
87
star
27

pull-box-stream

One way streaming encryption based on libsodium's secretbox primitive
JavaScript
84
star
28

level-live-stream

JavaScript
79
star
29

stack-expression

inspired by regular expressions but can do nested structures
JavaScript
76
star
30

hipster

JavaScript
72
star
31

snob

distributed version control system implemented in javascript.
JavaScript
71
star
32

xdiff

diff complex javascript objects
JavaScript
70
star
33

from

Easy way to create a Readable Stream
JavaScript
70
star
34

scalable-secure-scuttlebutt

HTML
68
star
35

explain-error

JavaScript
67
star
36

fsm

Finite State Machines in javascript
JavaScript
66
star
37

r-edit

JavaScript
64
star
38

readme

JavaScript
62
star
39

tiles

JavaScript
61
star
40

indexhtmlify

JavaScript
59
star
41

tacodb

JavaScript
57
star
42

adiff

diff and patch operations on arrays.
JavaScript
57
star
43

map-filter-reduce

JavaScript
57
star
44

browser-stream

open pipable streams to and from the browser, with Socket.io
JavaScript
55
star
45

reconnect

JavaScript
53
star
46

level-replicate

JavaScript
51
star
47

electro

JavaScript
51
star
48

d64

JavaScript
50
star
49

on-change-network

JavaScript
49
star
50

lock

lock asynchronous resources
JavaScript
48
star
51

crypto-bench

HTML
47
star
52

mynosql

JavaScript
44
star
53

monotonic-timestamp

JavaScript
44
star
54

pause-stream

JavaScript
43
star
55

json-select

JavaScript
43
star
56

json-buffer

JavaScript
41
star
57

coherence

JavaScript
41
star
58

bittodo

JavaScript
40
star
59

stream-punks

discussion repo for streams
39
star
60

charwise

JavaScript
39
star
61

proxy-by-url

custom logic for node-http-proxy to proxy based on incoming url
JavaScript
38
star
62

sentimental-versioning

version numbers with meaning
HTML
38
star
63

level-hooks

JavaScript
37
star
64

sodium-browserify

JavaScript
37
star
65

secret-handshake-paper

TeX
36
star
66

browselectrify

create browserify bundle that also works in electron
JavaScript
36
star
67

kv

simple kv store for streams
JavaScript
35
star
68

c2wasm

C++
35
star
69

level-trigger

triggers for levelup
JavaScript
33
star
70

deploy

scripts to setup continuous deployment with git push
Shell
33
star
71

presentations

JavaScript
32
star
72

rumours

Intergration of scuttlebutt family.
JavaScript
32
star
73

web-bootloader

HTML
28
star
74

what-is-scuttlebutt

spec for defining "scuttlebutt" as a living changing protocol
28
star
75

remote-events

connect EventEmitters through Streams.
JavaScript
28
star
76

indexes-of

JavaScript
27
star
77

mpg123

JavaScript
27
star
78

level-master

JavaScript
27
star
79

h

JavaScript
26
star
80

testbed

continuous integration for nodejs
JavaScript
25
star
81

canvas-browserify

HTML
25
star
82

it-is

assertion DSL based on functional idioms.
JavaScript
25
star
83

level-merkle

JavaScript
25
star
84

semver-ftw

Simple Description of SemVer
HTML
25
star
85

level-inverted-index

JavaScript
24
star
86

computer-modern

CSS
24
star
87

hyperaudio

JavaScript
24
star
88

level-search

JavaScript
24
star
89

level-scuttlebutt

leveldb persistence for scuttlebutts (scuttlebutt/crdt/append-only and friends)
JavaScript
24
star
90

level-couch-sync

JavaScript
23
star
91

simple-xlsx

maintained fork is at https://github.com/zeke/simple-xlsx
JavaScript
23
star
92

shasum

JavaScript
23
star
93

content-addressable-store

JavaScript
23
star
94

ticket-auth

JavaScript
22
star
95

ssh-key-to-pem

JavaScript
21
star
96

private-groups-paper

21
star
97

scuttlebucket

JavaScript
21
star
98

looper

JavaScript
20
star
99

deterministic-tar

JavaScript
20
star
100

npm-browserify

JavaScript
20
star