Introducing Slowww.ml - the slow web server


This experiment has now ended. The code is available on https://gitlab.com/edent/very-slow-website


One thing most websites try to do is try to serve you the page as fast as possible. So I've decided to do the opposite. I've made a (toy) web server which goes as slow as humanly possible. You can visit it at https://slowww.ml/ - but you'll need to be patient.

This delivers a page at about 175 bits per second. Yes, bits. Not bytes. It is deliberately set to be about as fast as an adult human can read. Why do you need your pages delivered any faster than you can read?

Can slowing things down make the web calmer and less distracting? Will it become a more thoughtful place to engage in dialogue? That sounds nice.

Anyway, the https://slowww.ml/ site has formatting, images, and one or two surprises. And bunnies.

It was originally built as a sort of HTML teaching aide. Or, perhaps I wanted to recreate the old character-by-character BBS experience. It might be a meditative exercise about frustration. Could it be a way to show off some modern HTML5 features in a quirky way? Most likely, lockdown has sent me gently loopy.

It doesn't use JavaScript or anything client side to simulate slowness. It genuinely serves you up pages a few bytes at a time.

The code itself is not very exciting.

<?php
header('Cache-Control: no-cache, no-store, must-revalidate');   //  No Cacheing
header('Pragma: no-cache'); //  No Cacheing
header('Expires: 0');   //  No Cacheing
header('Content-Encoding: none'); // Disable gzip compression
header('Content-Type: text/html; charset=utf-8');   //  Be nice to the browser
ob_end_flush(); // Stop buffer
//  The body
$str = <<<EOT
<!DOCTYPE html><html lang="en-gb"><head><meta charset="utf-8"><title>Very Slow Website ...
EOT;
//  Count character in a safe way
$len = mb_strlen($str, 'UTF-8');

//  Echo each character and wait
for ($i = 0; $i < $len; $i++) {
    echo mb_substr($str, $i, 1, 'UTF-8');
    ob_implicit_flush(1); // Implicit flush at each output command
    //  1 second is 1000000
    usleep(  40000);
}

die();

I'm not clever enough to squeeze one of those intricate 1K JavaScript demos into the site. But that's not what it is for.

The site works pretty well in Firefox. Tolerably in Chrome. And is only a little bit broken in Safari. It's worth experiencing it in other browsers, to see how the cope with being drip-fed HTML.

I hope you will find it a calming, educational, and mildly entertaining way to spend five minutes.

https://slowww.ml/


Many thanks to my beta testers: Liz, Thomas, Tom, Dom, Mike, yet-another Tom, Anna, Saul, Coco, Hugh, Mark, Neil, Andrew, David, Kate, and Lola.


Share this post on…

20 thoughts on “Introducing Slowww.ml - the slow web server”

  1. Saul Cozens says:

    A really interesting demonstration. We tend to forget about bandwidth limitations these days.
    Kids today huh! Don’t know they’re born. 🙂

    I’m wondering what the geek equivalent of the Monty Python 4 Yorkshiremen sketch would be.

    300 characters per second – you were lucky. We had to tie a punch card to a tortoise and point it in the direction of the other computer.

    Reply
  2. says:

    This is a really interesting idea - worth checking out the site to see how it holds your attention, and how much control it gives to the author rather than the recipient.

    ( while I've not attended an "unhurried conversation", I'm reminded of @johnniemoore too ... )

    Reply
  3. says:

    "Interesting" results on a couple of browsers, not had either of them "talk" to me yet.

    I'm looking forward to what Google's search engine, and its page speed analysis, thinks of this...



    Reply
  4. I well remember being an early UK ISP and after we upgraded from dial-up UUCP links, having a whole 9600bps upstream (via Courier modems over an analogue private wire, IIRC). That was shared amongst all our customers in effect!

    I still try to build pages that would work acceptably at 9600bps with all the headers and the first meaningful body text within the first TCP frame... The lowest that WebPageTest will emulate is 56kbps. "Kids these days" as noted by an earlier commenter! B^>

    Rgds

    Damon

    Reply
  5. says:

    There's definitely something in this. It was nice to be forced to read everything rather than the default skim reading pattern I've fallen into.



    Reply
  6. I like this a lot.

    I viewed it on mobile; when the first jpeg was loading, every time it did a 'quality parse' it scrolled me back up to the image. Would this behaviour be how someone on a slow mobile connection experiences image loads? (I'm using Chrome)



    Reply
  7. Michael Nestler says:

    I wanted to experience this in the terminal, so first I reached for curl. Huh, nothing showing up. Maybe httpie? Nope. Wget worked though! It seems that the other tools batch the content into rather large chunks before echoing it to stdout.

    That was a fun demo, thanks for sharing!

    Reply
  8. says:

    Seeing "Okay, it should've loaded by now" and having nothing show up is a depressing reminder of my internet speeds. Fun fact, and hopefully your blog doesn't tag me for spam if I post this, I had a similar idea ages ago, inspired by another site that uses progressive loading!
    https://fckgw.herokuapp.com/
    https://github.com/no-boot-device/fckgw

    This is more artsy and careless than your site, but it's an interesting showcase that HTML doesn't have to exactly load top to bottom and can fill out in odd places...

    Reply

What links here from around this blog?

What are your reckons?

All comments are moderated and may not be published immediately. Your email address will not be published.Allowed HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <p> <pre> <br> <img src="" alt="" title="" srcset="">