SlideShare a Scribd company logo
1 of 13
Download to read offline
Discover
ServiceWorker
+SandroPaganotti
@sandropaganotti
HTTP GET /cat1.jpg
HTTP Response
SERVER
SERVER
serviceworker.js
CACHE
FORGED RESPONSE
OTHER SERVER
SERVICEWORKER
RECEIVES A
FETCH EVENT...
SERVER
CACHE
FORGED RESPONSE
OTHER SERVER
serviceworker.js
SERVER
CACHE
FORGED RESPONSE
OTHER SERVER
serviceworker.js
SERVER
CACHE
FORGED RESPONSE
OTHER SERVER
onfetch = function(evt){
evt.respondWith(
new Response('Sorry no, cats available :)')
);};
serviceworker.js
Return
Cached
CACHED?
ONLINE? Forward to
Server
BASIC USAGE:
CACHING FOR
OFFLINE ACCESS
Return
fallback
page
importScripts('serviceworker-cache-polyfill.js');
oninstall = function(evt) {
evt.waitUntil(
caches.open('assets').then(function(cache){
return cache.addAll([ 'page.html', 'style.css','app.js','404.html' ]);
})
);
};
onfetch = function(evt) {
evt.respondWith(
caches.match(evt.request).catch(function() {
return evt.default();
}).catch(function() {
return caches.match("404.html");
})
);
};
Not yet available
through polyfill
CACHING AND
COMPILING
HANDLEBAR
TEMPLATES
SEARCH/*
*.JPG
Fetch,
Compile,
Cache
CACHED? Return
Cached
Return
Cached
CACHED?
Fetch,
Cache
onfetch = function(evt) {
if(//search/[^/]+$/.test(evt.request.url)){
evt.respondWith(caches.match(evt.request).then(function(entry) {
return entry || performSearch(evt.request);
}));
} else if(/.jpg$/.test(evt.request.url)){
evt.respondWith(getImage(evt.request));
}
};
Routing
Get Image
getImage = function(request) {
return caches.match(request).then(function(image){
return image || fetch(request.url,
{mode: 'no-cors'}).then(function(res){
return storeResponse('img-cache', request, res);
});
});
};
importScripts('handlebars-v2.0.0.js');
var youtube = "https://gdata.youtube.com/feeds/api/videos?alt=json&q=";
performSearch = function(request) {
return caches.match('list.hbs').then(function(tpl) {
return tpl.text();
}).then(function(body){
return fetch(youtube + request.url.split('/').pop()).then(function(res) {
return res.json();
}).then(function(json){
list = list || Handlebars.compile(body);
var response = new Response(list(json),
{ headers: {"Content-Type": "text/html"} });
return storeResponse('pages-cache', request, response);
});})};
Get template from cache
Fetch JSON from YouTube
Generating HTML
+SandroPaganotti
@sandropaganotti
Thank you!

More Related Content

What's hot

PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.js
PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.jsPayPal's NemoJS and Applitools Eyes - Visual Testing with Node.js
PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.jsApplitools
 
SSP - The Simple Singleton Pattern
SSP - The Simple Singleton PatternSSP - The Simple Singleton Pattern
SSP - The Simple Singleton PatternRodolfo Dias
 
Фатальный недостаток Node.js
Фатальный недостаток Node.jsФатальный недостаток Node.js
Фатальный недостаток Node.jsOleksii Okhrymenko
 
Criando aplicações com vuejs
Criando aplicações com vuejsCriando aplicações com vuejs
Criando aplicações com vuejsFelipe César
 
GRUNT - The JavaScript Task Runner
GRUNT - The JavaScript Task RunnerGRUNT - The JavaScript Task Runner
GRUNT - The JavaScript Task RunnerLarry Nung
 
How to stop writing spaghetti code - JSConf.eu 2010
How to stop writing spaghetti code - JSConf.eu 2010How to stop writing spaghetti code - JSConf.eu 2010
How to stop writing spaghetti code - JSConf.eu 2010Tom Croucher
 
Task Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.jsTask Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.js3rfan
 
Yeoman is awesome
Yeoman is awesomeYeoman is awesome
Yeoman is awesomeDataArt
 
透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)Justin Wu
 
Convox: Open Source Tooling for ECS
Convox: Open Source Tooling for ECSConvox: Open Source Tooling for ECS
Convox: Open Source Tooling for ECSNoah Zoschke
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSRodrigo Branas
 
Where to start refactoring?
Where to start refactoring?Where to start refactoring?
Where to start refactoring?thiagoalessio
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化hagino 3000
 

What's hot (20)

Web App Mvc
Web App MvcWeb App Mvc
Web App Mvc
 
Dart und JavaScript
Dart und JavaScriptDart und JavaScript
Dart und JavaScript
 
PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.js
PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.jsPayPal's NemoJS and Applitools Eyes - Visual Testing with Node.js
PayPal's NemoJS and Applitools Eyes - Visual Testing with Node.js
 
Dart != JavaScript
Dart != JavaScriptDart != JavaScript
Dart != JavaScript
 
JavaScript Dynamic Loading
JavaScript Dynamic LoadingJavaScript Dynamic Loading
JavaScript Dynamic Loading
 
Socket.io - Intro
Socket.io - IntroSocket.io - Intro
Socket.io - Intro
 
SSP - The Simple Singleton Pattern
SSP - The Simple Singleton PatternSSP - The Simple Singleton Pattern
SSP - The Simple Singleton Pattern
 
Фатальный недостаток Node.js
Фатальный недостаток Node.jsФатальный недостаток Node.js
Фатальный недостаток Node.js
 
Criando aplicações com vuejs
Criando aplicações com vuejsCriando aplicações com vuejs
Criando aplicações com vuejs
 
GRUNT - The JavaScript Task Runner
GRUNT - The JavaScript Task RunnerGRUNT - The JavaScript Task Runner
GRUNT - The JavaScript Task Runner
 
How to stop writing spaghetti code - JSConf.eu 2010
How to stop writing spaghetti code - JSConf.eu 2010How to stop writing spaghetti code - JSConf.eu 2010
How to stop writing spaghetti code - JSConf.eu 2010
 
Task Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.jsTask Automatisierung mit Grunt.js
Task Automatisierung mit Grunt.js
 
Yeoman is awesome
Yeoman is awesomeYeoman is awesome
Yeoman is awesome
 
Heroku for Java
Heroku for JavaHeroku for Java
Heroku for Java
 
透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)透過範例學習React (react tutorial 2)
透過範例學習React (react tutorial 2)
 
Convox: Open Source Tooling for ECS
Convox: Open Source Tooling for ECSConvox: Open Source Tooling for ECS
Convox: Open Source Tooling for ECS
 
HTTP Interceptors com AngularJS
HTTP Interceptors com AngularJSHTTP Interceptors com AngularJS
HTTP Interceptors com AngularJS
 
Where to start refactoring?
Where to start refactoring?Where to start refactoring?
Where to start refactoring?
 
Config
ConfigConfig
Config
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化
 

Discover ServiceWorker