• Stars
    star
    1,619
  • Rank 28,903 (Top 0.6 %)
  • Language
    JavaScript
  • License
    Apache License 2.0
  • Created over 11 years ago
  • Updated 3 months ago

Reviews

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

Repository Details

A tool for seeing your Internet latency. Try it at http://gfblip.appspot.com/

blip: a tool for seeing your Internet latency

Tip:

On your PC, laptop, tablet, phone, or iPod, try adding a bookmark to http://gfblip.appspot.com/ to your home screen for easy access.

Too long, don't read:

  • Go to http://gfblip.appspot.com/

  • It should work on any PC, laptop, tablet, phone, or iPod with javascript and HTML canvas support (which means almost everything nowadays).

  • X axis is time. Y axis is milliseconds of latency.

  • Green blips are your ping time to gstatic.com (a very fast site that should be close to you wherever you are).

  • Blue blips are your ping time to apenwarr.ca ("a site on the Internet"). It should be slower than gstatic.com. How much slower depends on how lucky you are.

  • Red blips mean something sucks.

  • A good Internet+Wifi connection should have no red blips. And lower latency is better than higher latency.

  • We send blips out as fast as they come back, up to 100 per second, so you can notice very small variations.

  • If you watch the blip output while you do different things (switch wifi networks, start Youtube videos playing, walk around), you can immediately see what impact that change has on the quality of your Internet connection.

Even longer, don't read:

People think more bandwidth will make your Internet connection seem faster, but that isn't even close to the whole story. There are three interrelated things you need to care about:

  • bandwidth
  • latency
  • packet loss.

Bandwidth means, once things get going, how fast you can download. But "once things get going" can take a really long time. In fact, it can take longer than the whole download! This is especially true for simple web pages, or web pages made up of a bunch of tiny pieces, which is very common on today's web.

That's where latency comes in. Latency is the time it takes to make a round trip to the server. Really good web designers know how to minimize the number of round trips, or at least do more round trips at the same time - which makes their pages load faster on everyone's connection. But every web page, whether optimized or not, automatically benefits pretty much proportionally to your network latency. Cut latency in half, and most pages will load about twice as fast.

Packet loss is the third component, and it's often forgotten. If you run the 'ping' program, which most people don't do and which is hard or impossible to do from many modern Internet devices (phones, tablets, etc), it will show you how many packets are dropped, and how many got through. Unfortunately, most people don't run ping more than once per second, which gives a pretty low resolution; if you have a really brief outage, you might not even see it with ping. Plus, on the modern Internet, packet loss is hard to measure - you can't do it with a web browser. And it's not that useful anyway, since real web pages don't see "packet loss." On the web (and any TCP-based protocol), packet loss translates into packet retransmissions, which means latency in some cases is 2, 3, or more times higher than usual. If you have significant packet loss (say, 1% or more), your web performance will totally suck eggs even if your bandwidth and latency are both fantastic.

Blip is an end-to-end testing tool designed to let you measure the latter two elements: latency and packet loss. These are the real indicators of your web browsing performance. It doesn't attempt to measure bandwidth; for that there's always good old http://speedtest.net/. (By the way, next time you're visiting speedtest.net, watch how the "download speedometer" dial starts off low and increases over time. That's what I mean when I say you might be done downloading by the time "things get going.")

How is blip an end-to-end tool? Simple. It's written in pure javascript, so it runs purely in your browser, without needing a server-side component. It makes real requests to real http servers, rather than using synthetic "ping" packets. Then it measures the turnaround time on those requests and plots them on a graph. And it does this up to 100 times per second, so you can see your network quality in high resolution. It's the next best thing to actually browsing the web, except you get a pretty graph instead of "hmm, that page loaded kinda slowly today."

Blip doesn't attempt to interpret the results for you; it just makes the plot in real time. If you try experimenting with it in a few different conditions, you can get an intuitive feel for what those conditions mean to the graph - and the graph can give you an intuitive feel for how sucky your web browsing performance will be under those conditions.

Here are some observations I've made using blip:

  • If there's a red blip more than once every minute or so, your web browsing will be noticeably more annoying than if there isn't. Yes, real wifi connections exist, even in crowded buildings, with zero red blips. That should be your goal.

  • One of my tablet devices produces red blips even when another device, sitting right next to it, on the same access point, does not.

  • Some wifi routers give decent speedtest.net results most of the time, and terrible speedtest.net results other times. This is usually because they get angry and start losing packets at random times, which is easy to see with blip.

  • You can walk around your apartment or house and find out exactly where the wifi "dead zones" are, within seconds. It's kind of like a geiger counter; wave it around and see what happens to the clicks.

  • "Wifi signal strength" meters are all a bunch of evil liars. Don't trust them. Wondering why your Internet is slow even with 5 bars? Don't believe the hype. Blip will show you the truth.

  • For me, on a wired ethernet network I can get about 15ms (or less from some locations) green blips. On wifi it's more like 30-50ms. On 3G cellular, with a really good signal (eg. outdoors with no obstructions) the best I get is about 100ms. With obstructions, it's normally more like 200ms. And yes, the ratios between these numbers really do seem like the performance difference I see when web browsing.

  • 3G cellular networks, surprisingly, seem to have far fewer red blips than typical "public" wifi signals (eg. ones in malls, parks, etc), even in moderately crowded area. So even though the latency ("ping time") might look better on public wifi, the packet loss (shown as a nonzero number of red blips) means web browsing will be cruddy. That matches my experience, but now I can measure it for real.

The Stupid Part

So you might be wondering, hey, how did you make a javascript applet ping these arbitrary servers? What about cross-domain request protection?

Answer: I did it by just making the queries anyway, and seeing how long it takes to get the error message back that my request was refused because of cross-domain request protection. Yes, this results in an infinite number of error messages to your javascript console. Don't look at your javascript console and you'll be fine. Trust me on this.

The Fiddly Bits

blip is open source software released under the Apache license. See the file COPYING and comments inside the code for more details.

You can get the source code at: http://github.com/apenwarr/blip

If you want to discuss this tool, you can join the [email protected] mailing list. You don't need a Google Account to subscribe! Just send an email to [email protected] and you can join.

blip probably needs lots of fancy new features. It's the first program I've ever written using HTML Canvas for display (which is really fun), so I probably did some dumb things. Javascript is also not my first choice of programming language (yet?) so I probably did some even dumber things. Send pull requests. That is all.

-- apenwarr

More Repositories

1

sshuttle

Wrong project! You should head over to http://github.com/sshuttle/sshuttle
Python
8,894
star
2

redo

Smaller, easier, more powerful, and more reliable than make. An implementation of djb's redo.
Python
1,772
star
3

git-subtree

An experimental alternative to the git-submodule command. Merges and splits subtrees from your project into subprojects and back.
Shell
1,365
star
4

git-subtrac

Keep the content for your git submodules all in one place: the parent repo.
Go
380
star
5

netselect

A parallelizing combination of ping/traceroute
C
155
star
6

gitbuilder

Auto-builds and tests all the branches of your git projects, showing pass/fail results on a web page/RSS feed. Isolates failures to the first commit that caused the problem.
Perl
141
star
7

mkdocs-exclude

A mkdocs plugin that lets you exclude files or trees from your output.
Python
85
star
8

wvtest

The "as stupid as possible" cross-platform unit testing framework for C, C++, C#, python, and sh.
C++
51
star
9

xclipsync

Trivial tool for synchronizing the clipboard between two X11 sessions
Shell
45
star
10

py-remoteexec

Run server code on a remote host without installing anything on the server. (git import of danderson's hg repo)
Python
31
star
11

wvstreams

C++ networking library including UniConf and a convenient D-Bus API
C++
29
star
12

afterquery

The fun begins after the serious analysts have gone home.
JavaScript
25
star
13

wavedroplet

Experimental app for visualizing wifi packet captures
Python
24
star
14

cron2rss

Programs for watching cron job output via rss
24
star
15

schedulator

Bottom-up project scheduling system based on Joel's Painless Software Schedules
Python
19
star
16

flashlight-vnc

A VNC viewer for Adobe Flash - forked from the official non-git version.
ActionScript
18
star
17

fixconsole

A go module to attach the Windows console to stdin/stdout/stderr if needed.
Go
16
star
18

port

minicom is too complicated. This command talks to a serial port.
Python
16
star
19

csv2sqlite

Very fast C++ importer from csv files to sqlite3 databases
C++
14
star
20

beamlab

Experimental wifi signal simulation
JavaScript
13
star
21

ekb

The knowledgebase software used on eqldata.com
Python
13
star
22

simhousing

A surprisingly poor simulator of Silicon Valley housing prices.
Python
11
star
23

notionchanges

Wiki-style RecentChanges page for Notion.so databases.
Go
11
star
24

cotvnc

Chicken of the VNC and vnsea, imported from Sourceforge and Google Code
C
10
star
25

mobwrite

git import of the google-mobwrite project from Google Code
JavaScript
9
star
26

jfauth

Just Fast Authentication - an auth daemon with a PAM client that talks to it, and replication over SSL.
C++
8
star
27

crampi

Replicate contacts between fat_free_crm and MAPI (Outlook and Exchange), and maybe other things too.
Python
7
star
28

ion1

Fork of ancient version 1.x of ion window manager
C
5
star
29

gracefultavi

A wiki optimized for internal collaboration (derived from WikiTikkiTavi)
PHP
5
star
30

avebench

Ultra cheesy microbenchmarks
Python
5
star
31

wvbuild

Cross-platform build environment for WvStreams, including wvports
C++
4
star
32

versaplex

wvdotnet, wvdbus-sharp, schemamatic, and versaplexd source
C++
4
star
33

nitlog

A simple blog application in PHP using flat text files
PHP
4
star
34

builder-test

A stupid test project, suitable for testing gitbuilder
3
star
35

dropdyn

Experimental
C
1
star
36

simswe

Python
1
star