The “Progressive” in Progressive Web Apps (Chrome Dev Summit 2016)

The “Progressive” in Progressive Web Apps (Chrome Dev Summit 2016)

[MUSIC PLAYING] Hey everybody. How is it going? Good? Happy to be almost done,
or happy sad it’s over? I’m here today to talk to you
about keeping the progressive in progressive web apps,
my name is Patrick Kettner, unlike what it says
on my badge apparently they thought the Chrome team
needed another Paul around. So but my badge is right,
I do work at Microsoft, despite what my
t-shirt shows there. I’m just a conundrum
of confusion. It’s just a photo I take
every year for my birthday. I get these pictures
of cakes every year. My incredible partner Katrina,
hi if you’re watching, is usually here with me. But now, over the
last year or so, she’s actually been spending
a lot more time at home, because we just had
our first child. Holden was born–
thank you very much. He’s worth the applause, I know
I’m pandering a little bit. But he is a he’s a
really, really cool baby. It’s funny. When you first have a
kid, all your co-workers, all your friends,
all your family give you the same
collection of advice. They all say, enjoy your life
while you still have one. Or you have fun eating while you
can still have time to do it. Or have fun sleeping while
you still are able to. And it’s funny. Because with Holden, none
of that really applied. He’s been a super easy baby. He’s really cute all the time. And he’s just happy
literally all the time. He got sick– he’s fine
now, but he got sick and had to go to the hospital. And he was adorable
in the hospital. Like this it’s him with a fever
and is sick and everything, it’s great. He’s a crazy happy baby. He’s cute all the time,
with one single exception. And that’s when we go on drives. He hates getting
into the car seat. Not so much the drive itself,
but like being strapped in. He just, I don’t
know, doesn’t like being like not able
to move or something. And he just freaks out. And that’s fine when you
first bring him home. We literally live a block
away from the hospital he was born in. And so we walked home, like
we didn’t have to drive. It took us a while to
discover that he hated this. And you know it’s fine. And then after a while,
I love to travel. And Katrina puts up with
me liking to travel. And eventually we grew
sick of sitting at home, getting a little cabin fever. And so we thought we
would pack up and go visit Whistler, which is outside
of Vancouver, Washington. I work at Microsoft, so
I live up by Seattle. And knowing that he hated
being in the car seat, knowing he’d have to go into
the car seat and being a nerd, I do something that I
think most of us would do. And I go and try and find
out something online as far as how to make it better. And so I look up how
can I calm a baby? I looked at all of
these different ways that people suggest doing it. It’s my first kid, forgive me. And I found this
really neat video. The frame rate is going crazy. It’s usually slower than this. But it’s basically
this interesting thing. All it is is a video
of dancing dots. And it snaps him
out of it like that. Every single time. And I’m not quite sure
what the science behind it is, but effectively, just the
combination of the contrast and the motion, it
just instantly– he forgets why he’s crying. And he’s just like, oh
crap, there’s all stuff. He just keeps going. And it literally works within
seconds every single time. And so I’m like,
oh sweet, great. Got it. Put him in the car. Freaks out, show him the video
on my phone, two seconds later, he’s fine, passed out. And we go. Get in the car. Head up to Vancouver. It’s a beautiful drive,
if you’ve never been, Pacific Northwest
is where it’s at. We have a wonderful day
in the Whistler area. It’s a great place to visit. We go into the old
Olympic stadium. That’s him still sleeping
after getting there. Those dots really work. And we’re there for a few
hours, it’s been a long day. We get ready to go into our car. And I strap him
in and he starts– he wakes up as soon as
I put him in, obviously, and he gets really upset
as soon as I do it. And so I’m like, ah,
got you this time. Pull out my phone. Because on my phone
carrier, I have like free international roaming. I hit play and I get this. And I get this. And the baby’s crying. And my partner
Katrina is starting to get upset, because it’s been
a good two minutes now where I’m just staring at the phone. I’m like, it’s coming,
it’s coming, it’s fine. Just don’t worry. And I wait. And I wait. And it’s been five minutes. Literally five minutes
staring at this screen with a baby screaming,
getting more and more upset. And Katrina getting
more and more upset. And me getting more
and more frustrated. Because I don’t know about
you guys, but as a person who works with technology,
especially web related stuff, when the web fails me, I
take it super personally. I’m like, I could
done this better. Something you did was stupid. And the whole time, eventually,
we’re just like, whatever. I’m just going to pack
up, we’re going to go and he’ll, I don’t know, cry. He’ll be fine. And so we just hit the road. I’m just getting more
and more frustrated. And I’m like, oh this 2G just
completely ruined my day. We had a nice time, but my
phone is just so frustrating. And then I started
to get– eventually, he cried himself to sleep. And I was driving
and I’m like, it wasn’t the 2G that ruined
my day, because that could happen to anywhere. YouTube can’t just
send everything in like one bit or whatever. It was really the fact that it
was 45 megabytes ruined my day. It’s the size of this video. And I was super lazy. I went out. I found a solution and it worked
really well on my machine. On my incredibly
fast home internet. And it functioned. And I was happy with that
without thinking about the fact that it’s shit for a
ton of people out there. It really, really sucks
when you’re in Canada on 2G and you have no
way to load this. Sure, I could have
pre downloaded it, I could have done
a lot of things to make it better
as the end user, but I couldn’t have
expected that to happen. And so eventually, we
get back over the border. Eventually, he is able
to calmed down again. We get back home. And I sit down, still
frustrated with having been disappointed in myself
for being a lazy engineer. And so I do what I feel
like a lot of people do. I sit down, open my
text editor, and try to make a better
solution, because we’re JavaScript developers,
so we reimplement stuff. And so I open up my text editor. And I open a VIM. And I’m ready to go. And then I realize that I’m
terrible at anything visual. I’m like the maintainer
for Modernizr, I can Javascript around
tons of people all the time, but anything visual related,
I’m just horrible at. So I’m like, it’s fine, it’s
just a bunch of dots dancing and then I have no idea
how to make that happen. Like I can put a
dot on the screen, I can do a basic canvas
or something like that. But I don’t know
how to move stuff. And so I sit and
I wait and I wait. I have no idea what to do. And so a wise man
once said, when you don’t have a better idea,
you can buy a novelty domain. That’s exactly what I did. And I went out and I
bought hush little baby. And in that time that it took me
to come up with this hilarious domain name, I was
lucky enough to put out a tweet on there saying like can
anyone explain how to do this? And Sarah Soueidan, and I’m
sorry for pronouncing it wrong Sarah, I’m trying
hard though, said oh, you should take green sock. And if you guys don’t
know, green sock is a phenomenal
animation library. It’s like a jQuery
for animation, but ignore the
jQuery animate part. It’s really, really good. It’s super performant. It’s super fast. It works really great for
JavaScript type manipulations. And it works. And I was like holy crap, I
got this whole thing working literally within like an hour. It was less than 6K for
the initial rendering and the initial animation. I lazy load in an MP3 file. So it gets up to like
2 megs or whatever. But that’s fine. And it works incredibly fine. I added a service
worker, obviously, because I didn’t ever
want to be stuck in Canada with a crying baby again. And it’s a super
simple service worker. This is one of the
first ones I ever shipped in a personal product. And I was happy with
how little code it was. I do it, obviously, a feature
detection for a service worker. And then this was basically our
entirety of the service worker. It’s just a simple
like a pre-cache step. So obviously, on our
install, we grab that event, we have an array
of URLs of files that we will
definitely always have. And then we grab that event. And we open up the cache
that we have for it. And then once that resolves,
we prefetch every single one of those with a simple request
and put it in our cache. And then we just also have a
very simple fetch step where in case I add something
to the domain later and I don’t add it
to the prefetch step, it’s just automatically
added there as well. We check to see if
it’s in the cache. And if it is, we respond
with it, and if it’s not, we fire off another fetch. Literally, that’s the entire
content of our service worker. Just transpiled out
of [INAUDIBLE] 6. And it was great. We had all this super
smooth working stuff. I was super excited,
because Holden got upset because he ran out of a
bottle before he finished it, because he eats a lot. And I picked up my phone
and boom and he stopped. And I felt like super dad. And I was so excited. I ran over, I showed Katrina. She was excited, because
no one likes a baby crying, you want him to feel better. And so she takes him
into his room later. And he– we’re in an old
building for America. I know I have British
friends who make fun of that, but it’s like 100 years old,
which is ancient for Seattle. And it’s like thick brick
walls and everything. So in his bedroom, we have
terrible cell phone reception. And so she’s like,
he starts crying. She’s putting him into bed. And pulls out her iPhone. And then she goes to open up the
phone, the app, and gets this. Crap. Once again, I felt like a just
absolutely terrible problem solver. This same problem
happened just because I had made it work perfectly on
my phone for my one solution. And so the problem is that
it had no iOS support. As we all know, there is
no service workers support within iOS. And so I had to set back
and think about what to do. And a wise man once said, when
you don’t have a better idea, try out app cache. And yes, that app cache. It’s terrible. It’s terrible. It’s awful. I’m not suggesting that people
actually super try it out. But what I am suggesting is
that you don’t immediately discount technology that
you hear is terrible. There is a lot of
stuff that browsers have been shipping for a
very long time that might be able to meet your solutions. I work at Microsoft. I hear about old
crap all the time. There’s stuff that we’ve
been doing in IE 5 that is just now coming. Like Jake mentioned, the
navigation transitions. There’s all stuff that we did a
long time ago that might still be useful occasionally. It’s worth checking out. At the very least,
it’s worth knowing what we did wrong on
these old [INAUDIBLE], like application cache. And in this case, what
I was doing– oh yeah, actually, it’s so bad that
it’s being removed from HTML. I don’t know how many things
you know of that are actually actively removed from the HTML
spec, but this is one of them. We all agree that
this is terrible and needs to just be purged
from our collective memory. But app cache is incredibly
well supported across the board. As long as you’re not developing
for like Opera Mini or god forbid old IE, you
are pretty much guaranteed to have
an app cache support. And for a site that’s as
simple as the one I made, which is obviously much
less complex than I’m sure most of the things
you guys would ever make, it’s really, really
straightforward. And actually, feeds
all of our use cases. And so we just take our
feature detect from before and we add another
little feature detect. I don’t know– a lot of
people actually have never used application cache, and
so you might not be aware that in order to use it, it’s
actually an HTML attribute that exists on the HTML
element and that has to be there at the very
top of the page at load time. You can’t like dynamically
inject it– It’s not– again, it’s a horrible API. It’s a giant douchebag. The attribute has to be
there at crunch time. And so in order to
get it onto the page, you have to bend over
backwards and do it this way. And so inside of this
check, what I end up doing is creating an I-frame. Hide that I-frame. And then give it
the source attribute of like a specific
page that only allows loading in app cache. It basically just
has that attribute. And then I pen that at
the bottom of the page. This is the entire contents
of that HTML document. It’s super, super small. It does almost nothing. But it gets that
app cache in there and it starts downloading
all the assets. And so those assets that
I have in my prefetch cache I’m able to take that
and through like a little web peck transform, turn
it into or an app cache thing out of there. And cache manifest is a
really simple file format, that’s one of the reasons
why it’s terrible. It’s because it’s super
if you do this one thing, it makes sense and nothing else. So we had the cache
manifest and then the files that we’ve had before. And then we also have to
have like this network star at the bottom. The reason for that being
that app cache automatically assumes that it knows
everything and any URL that is not on this list
will automatically 404, even if you’re online. It’s a terrible API. It’s really, really crappy. But if you know this edges,
and if you know what to do and how to get around those
problems, it can be useful. Check out crappy
APIs, because there might be like a little
glimmer of something useful inside of it. It is a douche bag,
don’t forget that. But check it out. Don’t immediately assume
that just because you’ve heard of technology,
whether it’s something built into the browser
or a library or anything else is terrible just because
you’ve heard it’s terrible. Find out for yourself and learn. In fact, I was thinking about
while I’m doing terrible ideas, I was remembering when I very
first started in websites. And we had this– does
anybody remember DHTML? Anybody ever have
that on their resume? Yes. Thank you. Yeah. Does anybody ever write in HTA? A hypertext application? Thank you. Thank you. Thank you. Yeah. So I made it into a
hypertext application as well, because why not? And so what I did was
after all those text checks I shift this as
a– I checked to see if it’s an old Microsoft thing. Oh I’m sorry, a HTA or
hypertext application is a proprietary
offline application shipped in Microsoft
Internet Explorer 5. It’s terrible. But it exists. And I figured I was already
doing stupid shit anyway, so why not have some fun? So if you go to this website,
hush little baby NEI, you actually get
this huge pop up, because there’s no reason to
be using old IE unless you’re checking out the fact that I
was stupid enough to add an HTA. And if you download it,
you get this experience. So you get this huge, nice
little one window pop up. It has this little
icon in the corner. And that’s basically the
only fancy thing about it. It has a flash audio player,
because if we fall back from the web audio player,
we load a Flash Player. And so you have the
full experience. Again, just because it’s fun. But it’s stupid. The whole point that I’m making
is that PWA, just like Jack mentioned, are only been a
collective concept of a PWA is new. When Frances Berriman came
up with it only a year ago, back in like June of last year. But the tools behind it, the
things, the fundamental pieces of PWAs have existed for
a very, very long time. This offline application
is not a new concept. And there’s a lot of
pieces of the web. And a lot of pieces of PWAs
that aren’t new concepts. They’re just finally
good versions of concepts that we’ve tried to
do multiple times. And there’s a lot
of things that you can do today to implement that. One of the things I hear
regularly from people is that they’re really
excited about PWAs, but they can’t ship them
today because they can’t wait to do a full site architecture. They can’t wait to implement
all these different features. And that’s just not true. You don’t have to
wait to do this stuff. You can start
implementing pieces today. For example, sorry– yeah,
I forgot my thought leader. It’s not a radical new
way to create websites. It can also be a radical
new way to update websites. You can do stuff today on your
website that already exists. For example, the
web at manifest. In case you haven’t ever seen
it, it’s a very simple spec. It’s a very simple document. All it is is a JSON object that
exists as a file on your page. You have stuff like your
language attribute, the text direction, the name
of your document, the description of stuff so it
can show up in like application manager page. An array of icons, so
that you can just support a bunch of different devices. Even stuff like orientation. You can finally lock
your screen to landscape or you can do stuff
like a theme color so you could affect, say,
the title bar on Android or maybe like the color
of Cortana on Windows. We’re looking into what
we can do with that. You can even actually
specify related applications. If, for some
reason, your company thinks a native
application is better but they’re still cool
enough to do a PWA, you can say if the user has this
native application installed, fallback to it if
they also have that. And you can toggle that with the
preferred related application flag. It’s super, super
simple to do this. And the great thing about
it is there’s no JavaScript API to this concept. It’s just an HTML tag that
you inject into your page. You have that one JSON document. You add it to your
page, and you are on your way to having a PWA. Just inject in there. And you might be
noticing– actually, sorry. One of the cool things I
wanted to actually talk about was that we are really, really
excited about PWAs on edge. And one thing that the Bing team
is actually going to be doing is crawling the web to
look for these sites that have web manifests. And when they do,
we believe we’re going to actually be ingesting
them into the Windows Store automatically for you. And so you can easily
opt out of this if you don’t want to
have it as a part of it. But what will happen
is you automatically get interested into millions
and millions of Windows users. You have this ability
to reach out to them and once you’re involved
in our Windows Store automatically, just by
shipping this web manifest, you can start doing feature
detection for the Windows WinRT APIs. That’s basically pretty
much any Windows API that you have access
to, you have full access to in JavaScript. We started doing this
work in Windows 8. And it’s available there. So you can do stuff like
integrate with the system calendar just by doing a simple
feature detection script. And then checking to see
if you’re in Windows. And if it, show
the full calendar. You can integrate
with Cortana, you can integrate with a
lot of low level things and have a truly
native application feel in website code that
you ship out automatically just by adding a manifest. It’s a really cool
thing to check out. And to make it
even simpler, so I was sitting and
thinking about how frustratingly simple
but also redundant a lot of this information was. You had that JSON object. And a lot of that information
that’s on that JSON object is already in your application
and all these meta tags that we’ve had this
shove into this tag soup at the top of our page
for a long time now. And so I created this
node plug-in module thing called manifestation. It takes a URL and then
gives a call back to you that just generates the most
fully featured web manifest object it can create. And it really tries to be
extremely full featured. Like, for example, our
language detection. It loads up the whole page using
Cheerio, just like a server side jQuery, and CLD,
Compact Language Detection, which is a binary object. It’s very similar to like
how Google Translate works. It can actually look
at the context of words and how they’re used
and tell the difference between Portuguese and Spanish
or something like that. And so we go ahead and load
up the HTML of your page and check for the
language attribute. If that doesn’t
exist, we go and check for the XML language attribute. Because you might be making an
HTA into a PWA for some reason. We then after that check
the DC language attribute. Dublin core, if we have any
librarians in the house. It’s like a super–
it’s a really old meta tag that no one uses. But if it does exist, we
want to use it in there. And then after that,
we’ll fall back to CLD, where we actually
look at every single word on your page, parses HTML, and
try to automatically detect what the document is, just like
you do if you open up Chrome. It’s foreign language
that says hey, do you want to translate
this from Portuguese? It’s exactly the
same type concept. And so after all, we
send back the string of what that language might be. That’s just one of the
detections that we do. There’s for every single field
on web manifest, we have one. This is the beginning. The top of like a 200
line file for images where we go and scrape
every single image that’s declared as an icon. We download it,
check to size, ensure that the MIME type
is correct, ensure that the extension’s correct
and do all this stuff and generate the full icon
array for you automatically. In fact, it’s so
easy to do this. I made a website so
that all you all can do it like literally right now. You can go to a web manifest. This website, it exists. It says cool domain,
it’s super simple. Again, I love stupid domains. You just go there and
you put in the URL. Hit Submit. And it will download
your web manifest file that will
automatically be generated from the code on
your site already. You don’t have to do anything. You just download this, you
add it as that link take, and it works. It’s great. And you’re at the
beginning of having a PWA and you can be ingested
in the Bing store soon. Yeah. You just get this
pop up download. You got it. It’s awesome. So it’s web manifest. It’s a super simple thing. If you want to end up
changing what I do, because we try to
be fully featured, you might want to remove
some of that stuff if you think it’s unnecessary. I added a short URL
to the validator. You can just go there. You paste in your JSON
object that you modified and it’ll tell you
whether or not it’s valid. If you have an
invalid manifest file, it actually won’t
count as a manifest at all in Chrome or Android
or anything else that’s shipping it. So it won’t work, basically. You would be blocked
from doing a PWA. You want to make
sure that you have a valid piece of JSON object. Also, the spec on this
is really pretty simple. And so if you’ve ever been
interested in doing W3C work, if you’ve ever been interested
in getting more involved, this is a great
one to dive into. It’s a small group. We’re all super friendly. We’d love to get more
feedback on this stuff. And if you guys have stuff that
you want to be involved in, it’s a great one to check out. It’s a really fun
thing to work on. And so while we’re talking
about stuff you can do today, you don’t have to wait for all
these new features to come. Like Jake just blew I think our
collective minds with the stuff that’s coming in the future. And there’s a lot
of really fun stuff. But there’s also stuff that
you can do for a long time on the web that is amazing. Take, for example, web workers. They actually landed
in WebKit back in 2008. And 2008 in web years is just–
the Chrome icon here is wrong. It actually was
that back in 2008. Like, it is a really,
really long time ago. And a lot of things
have changed. I mean, IE 8 wasn’t
even released yet. It was a long time ago. And yet, since it’s
been around for so long, it’s phenomenally supported. It’s supported pretty
much everywhere. It’s back to IE 10. It’s really, really cool. And if you’re not
familiar with web workers, it’s a really simple API. Has anybody here
ever implemented like a scroll handler? Like on scroll? Don’t lie. It’s OK, we’re among friends. Yeah, it’s terrible. Right? Like you instantly jank
up your whole page. And that’s because
everything on a browser is completely single
threaded, right? Because the browser
doesn’t know are you going to modify
everything in the dom in that scroll handler. So it can’t relay out stuff
until your scroll handler’s finished, because it
would be wasting work. It sucks. Because most of the time,
you’re probably not, but it can’t trust you. And so what a web worker does
is it gives us the concept of having a background thread. You’re able to say like it
gives you a new JavaScript context that has no
access to the dom that you send like strings
or possibly objects to depending on the
version of web workers you’re working with. And you say, like
hey, go calculate this and then sent back the results. And it can do that
completely in the background. And so it can do some really
hard core, heavy number crunching without
in any way affecting your scroll performance. You can do a lot of
really cool stuff with it. Take, for example, I’m sure a lot of us saw this. Nolan Lawson, one of
my amazing coworkers, created this website as
a really advanced PWA. It does incredible
performance on the site. And part of the things
that makes it so fast is because it’s like a
re-act ish power thing. It’s using virtual dom. And it actually calculates the
virtual dom differences inside of a web worker and then sends
back the diffs in between. So it’s able to
render stuff faster. Something the react
team is actually investigating currently is
doing virtual Dom diffing inside of a web worker. It uses, like I
said, virtual Dom has this concept where
it gets the diff, it sends it over
to the UI thread where it applies all that stuff. And I don’t know. This looks important. I’m including it because
it looks sciency. So but the cool thing
is, you have this phone. This is a Nexus S,
which is I think a five or six-year-old phone. I should know this, I’m at a
Google conference, I’m sorry. But you get incredible
performance. He just did this last year. And it’s phenomenally fast. And look at how smooth
that animation is. And one of the things
that he credits as being able to
do this so well is by doing his dohm defect
inside of a web worker. There’s tons of crazy cool
stuff you can do in web workers. Take, for example, moderniser. Like I said, I’m the maintainer. We have our website,
our dynamic builder is completely client side. Built in a whole
lot of stupid stuff into it, like I
showed you the HTA. And all these different
things are checkboxes. And every single time you
check one of those off, it’ll go ahead and
download the entire module. They are all modular
pieces, right? And one of the problems we
had on the Modernizr team is that people were including
the entire build of Modernizr. And as we grow to more
than almost 300 modules, that can be a gigantic
piece of JavaScript. And frankly, most
of you don’t need to know whether or
not border radius is supported in a browser, right? All these tests all the
code that isn’t running that we didn’t want to include. And so to make people
aware of what they’re doing when they start
checking out features, we actually have a gzip
calculator up in the corner. And so as you check
stuff off, it updates. And we do that full
gzip comparison inside of a web worker in the
browser without ever going to the server. We’re able to do that. And we’re able to do that
every single time you click off stuff, because
web workers are so cool. In no way does it affect your
scrolling, your performance, the animations,
or anything else. It’s just a really silky
smooth, fast experience. And you’re able to get some
really neat information. I love web workers. I like to push them
as much as I can. So much so that I’m
looking into a new project right now that I’ve
been working on where it has a terrible name. If anybody has a
better idea– I call it web worker preprocessors. So we’ve all used transpilers. We’ve all used stuff
like hammell or jayde or other stuff like that. I love them. I want to take them and run
them on the client side. I love sites like
JSPIN or CodePen, but I want them
to be PWA, I want to be able to run that offline. And so what this is
doing is actually a toolchain that
automatically creates cross-compiled version–
it transpiles transpilers to run inside of web workers. I have a number of
ones already working, including some Ruby based ones. We have stuff like–
what do we have? We have less support,
slim support, Pug, Jade, the old version of Pug. We have Auto Prefixer. And even Haml. And I’m currently
working on Sass. And they work. The Ruby stuff’s
actually transpiled using a cool project called
Opal, takes Ruby code and transpiles it
into JavaScript. And they work. I have every single version of
Slim, a similar to Haml Ruby version, throughout
its git range. Like literally 58
versions of it running instead of a web worker passing
their own full test suite. And it works. And it works really well. If you’re interested, I’d love
to talk about it, because this is my– this is what
I’ve been doing at night, it’s a lot of fun. But the point is,
web workers are cool. You can do a lot of
crazy cool stuff. Like cross-compile
Ruby into JavaScript in order to compile
your templates. It’s complicated,
but I think you all know what I’m talking about. And the whole point
of what I’m saying with all this nonsense
and stupid ideas is that when you build stuff,
try out something stupid. Like there’s a lot. We can do all kinds of really
crazy stuff on the web. And you shouldn’t
be thinking that you have to wait for it to
be supported everywhere to do something stupid. Try something cool
today in one browser. If a feature is supported
in one place, be it Safari, be it Edge, be it Chrome,
be it Firefox, try it out. Feature detect? Do it and ship a feature. The way that browsers actually
decide on whether or not to support a feature are
based on what you all do. If everyone started
using web components back when they first
were introduced, and everybody would be
supported on web components. This is weird like prisoner
dilemma, where people think that they have to
wait for browsers, but browsers wait
for the people. Start using stuff
that interests you. Give the developers feedback,
give the spec authors feedback. And make really cool stuff. And so you don’t need to
wait for re architecture in order to start
shipping a PWA. You can start shipping
individual pieces, like the web manifest. Like a really simple caching
service worker today. You can do it today. Literally right now. Almost every single site that
can implement that stupid 18 line service worker
that I had in a way and you will instantly–
your whole site might not work offline. But you can have faster caching. You can have a faster load
from almost all your users. Try out the new shiny
features, and try it out today. Try something stupid. The web’s really cool. Yeah. Thanks, everybody. [APPLAUSE] [MUSIC PLAYING]


  1. Well that start was, meh, unnecessary, and slow. Not trying to be rude, congrats on the baby, but you're giving a talk on a conference…

  2. Hi Patrick.

    I am fascinated by this movement of PWAs and am really impressed by the speed that the PWAs have and how similar the experience feels to a native App. I am currently based in South Africa and am developing my own events management native application, and wanted to know if it would be possible to jump onto a Skype call, as there are some questions that I would like to ask you about PWAs and what they hold for us in the future.

    Thank you

Leave a Reply

Your email address will not be published.