Mon Browser,
ma VM,
mon Amour…

//talks.m4dz.net/mon_browser_ma_vm_mon_amour.html

MAD MAD

Full Stack Punisher

Quality Defender

Ponies Breeder

Les 7 différences…

Mosaic browser
Netscape 4.04 browser
Firefox browser
Chrome OS
Firefox OS

Browsers!

Le Web est partout

  • Navigateurs
  • OS (Mac, Windows, Linux)
  • Mobiles (Firefox OS, Tizen)
  • Micro-embarquée (Tessel, Espruino)

C'est quoi,
un navigateur ?

Moteur de rendu

HTML

Moteur graphique

CSS

(et ses petits copains Canvas et WebGL)

Moteur d'exécution logique

JavaScript

Alors,
c'est quoi le Web ?

On assiste depuis quelques années à ce que j'appelle un changement de paradigme.
Jérémie Patonnier

Web Consultatif

web consultatif schema

Web Collaboratif

web collaboratif schema

Web Asynchrone

web asynchrone schema

Stratégie de cache

CACHE MANIFEST
# 2010-06-18:v2

CACHE:
/favicon.ico
index.html
stylesheet.css
scripts/main.js

NETWORK:
*

FALLBACK:
/main.py /static.html
images/large/ images/offline.jpg

PouchDB / CouchDB

var db = new PouchDB('users');

db.put({
  _id: 'code@m4dz.net',
  name: 'M4Dz'
});

db.changes().on('change', function() {
  console.log('Local DB updated!');
});

db.replicate.to('http://example.com/users');

Offline storage

  • Web Storage
  • Web SQL Database
  • Indexed Database
  • File Access

Web API (from the future)

Service Workers

var scope = 'hello/';
function register() {
  navigator.serviceWorker.register('service-worker.js', {scope: scope})
    .then(function(serviceWorker) {
      console.log('registered: ');
      console.log(serviceWorker);
    })
    .catch(function(whut) {
      console.error('uh oh... ');
      console.error(whut);
    });
}

from GoogleChrome GitHub

Service Workers

self.onfetch = function(event) {
  console.log('got a request');

  var salutation = 'Hello, ';
  var whom = decodeURIComponent(event.request.url.match(/\/([^/]*)$/)[1]);
  var energy_level = (whom == 'Cleveland')
      ? '!!!' // take it up to 11
      : '!';
  var version = '\n\n(Version 1)';

  var body = new Blob([salutation, whom, energy_level, version]);

  event.respondWith(new Response(body));
};

from GoogleChrome GitHub

ASM.js / Emscripten

WebGL

from get.webgl.org

Hardware APIs

GetUserMedia

Hardware APIs

  • Battery
  • Lux Sensor
  • DataStore

ARIA (FTW)

Définissez des Roles

  • Tab / Tabpanel
  • Button
  • Dialog
  • Menuitem
  • Tooltip
  • General
  • Utilisez des états

    • aria-busy
    • aria-hidden
    • aria-invalid
    • aria-controls
    
    

    Ciblez avec CSS

    div[aria-hidden=true] {
      display: none;
      visibility: hidden;
    }
    div[aria-busy=true]::after {
      content: '';
      position: absolute;
      background-image: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7);
    }

    Kepp Lightweight

    Web Components

    
      a dramatic sunset
      a rock arch
      some neat grooves
      an interesting rock
    

    Web Components requirements

    • Custom Elements
    • Shadow DOM
    • Template
    • HTML Imports

    Web Components polyfills

    • Bosonic
    • Polymer
    • X-Tag

    Memory management (en 3 points)

    • Design
    • Code
    • Optimize

    Memory management (dans le cambouis)

    • Last DOM Reference
    • Circular dependencies
    • Keep a clean scope
    • Unbind events
    • Use local cache

    Memory management (la victoire en chantant)

    • Amélioration de l'autonomie
    • Interactions fluides
    • Webapp en utilisation longue
    • Fini les owwww snap!

    Module Pattern

    • Require
    • Browserify
    Moonraker explosion

    Hardware Diff

    Moon module

    Consolidez la
    Brique de confiance

    Tests

    • Unitaires
    • Fonctionnels
    • Monkeys / Users

    Homogénéisez

    Gherkin + Cucumber + [le reste de la Terre]

    Release Early, release often

    Intégration et Déploiement

    Feature flipping

    • Dans le code
    • Dans l'URL
    • Pour des sets utilisateurs

    Pourquoi je vous en parle ?

    C'est quoi
    un navigateur ?

    C'est une VM !

    28jours plus tard

    Questions ?

    Merci !

    //talks.m4dz.net/mon_browser_ma_vm_mon_amour.html

    Crédits

    Images
    Fonts