SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
What we've learn from Ember.js
after 2 months developing our
new product MVP
Presentation The Family - 9 avril 2015
About us
Guillaume Potier
Co founder & CTO
@guillaumepotier
Nicolas Chenet
Javascript developer
@nicolaschenet
About us
http://wisembly.com
About us
http://getsolid.io
About us
4,9 yrs old
38 employees
10 tech + product
About us
BackboneJS
BackboneLayoutmanager
BackboneRelational
Custom
Mocha
Expect
Phantomjs
Gulp
Bash
Symfony2 - MySQL - Redis - RabbitMQ
Welcome to the javascript Jungle!
Welcome to the javascript Jungle!
Welcome to the javascript Jungle!
About us
BackboneJS
BackboneLayoutmanager
BackboneRelational
Custom
Mocha
Expect
Phantomjs
Gulp
Bash
EmberJS
Ember-CLI
Ember Data
Phantomjs
Symfony2 - MySQL - Redis - RabbitMQ
Ce qu’on a choisi
Because it’s a matter of choice
Ce qu’on a choisi
13
Ember JS
Ember CLI
• The command line interface for ambitious web applications.
Ember Data
• A data persistence library for Ember.js
Because it’s a matter of choice
Ember JS ?
En bref…
Ember JS ?
15
Framework pour Single Page Applications
Model / View / Controller
• Model: Classe avec propriétés et comportements (data)
• View: Interactions avec le DOM / Templates …
• Controller: Présentation des datas / Actions …
Rôle important des routes
• Responsable du fetch des datas
• Nesting
• Application state
En bref…
Ember JS + Ember CLI
Pourquoi on aime ?
Ember JS
Pourquoi on aime ?
17
TOMSTER !
Ember JS + Ember CLI
Pourquoi on aime ?
18
Data Binding et Computed Properties / Observers
• L’interface reflète en permanence la data
• Pas besoin d’écrire des listeners pour mettre à jour les
templates => gain de temps / moins de boilerplate
• Computed properties => des propriétés “fonctions”
• Observers => Réaliser des traitements dès qu’une propriété est
mise à jour
Ember JS + Ember CLI
Pourquoi on aime ?
19
Backburner, formerly “The Run Loop”
• Not really a loop
• Tout les traitements sont organisés dans des files spécialisées
• Ex: on s’assure que toutes les opérations de sync soient
terminées avant de rendre les views
sync actions
router
transitions
render
after
render
destroy
Ember JS + Ember CLI
Pourquoi on aime ?
20
Les components
• Approche DRY et “organique” de l’interface
• Les éléments d’interface sont responsables d’eux-même et sont
capables d’interagir avec l’extérieur
• Simple à mettre en place
Les actions, mieux que ng-click
• Equivalent de ng-click mais pas que
• Traitement “smart” des actions grâce au bubbling
Ember JS + Ember CLI
Pourquoi on aime ?
21
Ember Inspector, plugin Chrome incontournable
• Arbre des vues et templates
• Arbre des routes
• Représentation des datas, model par model
• Liste des Promises
• Performances de rendu
• Les modules chargés
• …
Ember JS + Ember CLI
Pourquoi on aime ?
22
Convention over Configuration
• Une architecture d’application structurée
• Des comportements “automagiques”, qui sauvent du temps et
pas mal de boilerplate
• => Fast developer onboarding
• => A mesure que l’app grossit en taille et complexité, code
toujours clair, identique
Ember JS
Un hamster, c’est parfois difficile à apprivoiser
Ember JS
24
La fameuse Learning Curve
• Où je range mon code ? Je fais un MIXIN ou un SERVICE ?
• Il s’est passé quoi là ?
• La bipolarité du dévelopeur débutant avec Ember
The “Ember way” to do things
• Parfois on peut se sentir “enfermé”
• Les overrides ne sont pas forcément toujours évidents
I18n ?
• Pas de support natif
• Les plugins existants ne correspondaient pas à notre méthode
• Création d’un plugin => ember-gettext
Un hamster, c’est parfois difficile à apprivoiser
Ember CLI
En bref …
Ember CLI
26
Interface en ligne de commande pour les applications Ember JS
Inspiré par Ember App Kit
Structure de projet
Assets pipeline + Server
Gestion des environnements (PROD / DEV / TEST)
Rajoute de la convention dans la convention o/
Et plein d’autres trucs…
En bref…
Ember CLI
Pourquoi on aime ?
Ember CLI
28
The future is now
• Transpiler ES6: imports / exports sans passer par requireJS
Générateurs et blueprints
• “yeoman-like”: générer des routes / controllers / … en ligne de
commande
• basés sur des blueprints personnalisables: s’adapte à vos
besoins
• Up de productivité et de qualité du code
Server + Live reload
Des tests facilités
• Built in QUnit, Ember Testing, Ember QUnit
Pourquoi on aime ?
Ember Data
En bref…
Ember Data
En bref…
30
Models
• Représentation des datas sous forme d’“entités”
• Relations
Adapters
• Abstraction des méthodes de fetch, de sauvegarde
des models
• 1 adapter global ou 1 adapter par model
• RESTAdapter / LSAdapter / FIXTUREAdapter / …
Store
• Gère le cycle de vie des models
• Communique avec les adapters à travers une API
unifiée
• Automatic caching
Ember Data
Pourquoi on aime ?
Ember Data
Pourquoi on aime ?
32
Adapters => Quick prototyping
• Models pour lesquels l’API existe / est prête => RESTAdapter
• Model sans API existante => FIXTUREAdapter
• Quand l’API est prête, il “suffit” de changer l’adapter, et voilà
Abstraction des calls à l’API
• Ex: pour fetch 1 meeting => this.store.find(‘meeting’, 123) (peu
importe l’adapter)
• Les URLs sont buildées par Ember Data
• Force la rigueur
Records flags
• record.isDirty => des changements pas synchro
• record.isNew, record.isSaving, etc…
Ember Data
Les trucs moins cool
Ember Data
Les trucs moins cool
34
Très très “opinionated”
• Et en plus pas du tout permissif “out of the box” => certains ont
encore mal au crâne
• Difficile à domestiquer avec une API pas forcément en phase
avec son interprétation de la JSON API
Certaines parties des adapters et du store ont du être
réécrites
Essentiellement fait pour la synchro des datas
• Je fais comment si j’ai pas que du GET / POST / PUT / DELETE
sur un model, mais que j’ai besoin de faire une “action” =>
augmente le store ;)
Pour finir
Parce qu’il faut bien une fin
Pour finir
36
Alors heureux ?
• Venant d’un univers Backbone, OUI !
• Moins de Boilerplate
• Code plus concis
• Meilleure qualité
• Tests plus faciles / rapides à écrire
Ce qui a été le plus douloureux ?
• Essentiellement la couche data et comprendre la bête “de
l’intérieur” pour expliquer la magie
Si c’était à refaire, toujours Ember ? Angular ?
• EMBER !
• Cadre / Réel framework qui apportent des fondations robustes
à une app
Parce qu’il faut bien une fin
Nicolas
Chenet
nicolas@wisembly.com
@nicolaschenet
wisembly.com
merci, à bientôt !
Guillaume
Potier
guillaume@wisembly.com
@guillaumepotier

Mais conteúdo relacionado

Mais procurados

Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des testsHubert Lenoir
 
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerceWordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerceVaisonet
 
03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA Cellenza
 
Ting - Un datamapper PHP sous stéroïdes
Ting - Un datamapper PHP sous stéroïdesTing - Un datamapper PHP sous stéroïdes
Ting - Un datamapper PHP sous stéroïdesXavier Leune
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent Biret
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyXavier Leune
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Html5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGHtml5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGJUG Toulouse
 
MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action Denys Chamberland
 
XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...
XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...
XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...Publicis Sapient Engineering
 
Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pagesJean-Pierre Vincent
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Arnaud LEMAIRE
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéNicolas Deverge
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejsnaholyr
 

Mais procurados (20)

Princesse CI au pays des tests
Princesse CI au pays des testsPrincesse CI au pays des tests
Princesse CI au pays des tests
 
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerceWordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
WordCamp Lille 2018 : Comprendre et utiliser l'API REST de WooCommerce
 
03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA 03 - [ASP.NET Core] Services RESTful et SPA
03 - [ASP.NET Core] Services RESTful et SPA
 
Ting - Un datamapper PHP sous stéroïdes
Ting - Un datamapper PHP sous stéroïdesTing - Un datamapper PHP sous stéroïdes
Ting - Un datamapper PHP sous stéroïdes
 
Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)Vincent biret azure functions et flow (montreal)
Vincent biret azure functions et flow (montreal)
 
Php 5.5
Php 5.5Php 5.5
Php 5.5
 
Performance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfonyPerformance au quotidien dans un environnement symfony
Performance au quotidien dans un environnement symfony
 
XebiConFr 15 - Swift dans la vraie vie
XebiConFr 15 - Swift dans la vraie vieXebiConFr 15 - Swift dans la vraie vie
XebiConFr 15 - Swift dans la vraie vie
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Html5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUGHtml5 par Florent Garin, au Toulouse JUG
Html5 par Florent Garin, au Toulouse JUG
 
MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action MBAUG - Power BI REST API + PowerShell en action
MBAUG - Power BI REST API + PowerShell en action
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...
XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...
XebiConFr 15 - À la recherche du temps (perdu) entre le use case metier et s...
 
Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pages
 
Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy Scalabilité et haute performance d'application PHP légacy
Scalabilité et haute performance d'application PHP légacy
 
Symposium TFS - DevOps avec Microsoft
Symposium TFS - DevOps avec MicrosoftSymposium TFS - DevOps avec Microsoft
Symposium TFS - DevOps avec Microsoft
 
ToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & AgilitéToulouseJUG - REX Flex, Spring & Agilité
ToulouseJUG - REX Flex, Spring & Agilité
 
FinistJUG - Apache TomEE
FinistJUG - Apache TomEEFinistJUG - Apache TomEE
FinistJUG - Apache TomEE
 
Réu technodejs
Réu technodejsRéu technodejs
Réu technodejs
 
Presentation
PresentationPresentation
Presentation
 

Destaque

La publicisation du risque nucléaire : une coproduction de l'information médi...
La publicisation du risque nucléaire : une coproduction de l'information médi...La publicisation du risque nucléaire : une coproduction de l'information médi...
La publicisation du risque nucléaire : une coproduction de l'information médi...Mikaël Chambru
 
Concept Board Portail Dentaire
Concept Board Portail DentaireConcept Board Portail Dentaire
Concept Board Portail DentaireTeemster
 
Matematica discreta informe
Matematica discreta informeMatematica discreta informe
Matematica discreta informeJhojan Mendoza
 
Seminario 2 lide4 razgo
Seminario 2 lide4 razgoSeminario 2 lide4 razgo
Seminario 2 lide4 razgoalbanySaray
 
Le sénégal
Le sénégalLe sénégal
Le sénégalflomarine
 
Oap 4º eso windows
 Oap 4º eso windows Oap 4º eso windows
Oap 4º eso windowshistoriasuel
 
Charline madenaz 11 septembre-melanie dupas
Charline madenaz 11 septembre-melanie dupasCharline madenaz 11 septembre-melanie dupas
Charline madenaz 11 septembre-melanie dupascharlinemadena
 
Prévalence des troubles mentaux en milieux socio éducatif
Prévalence des troubles mentaux  en milieux socio éducatifPrévalence des troubles mentaux  en milieux socio éducatif
Prévalence des troubles mentaux en milieux socio éducatifAmineBenjelloun
 
Seminario 2 lide4 razgo
Seminario 2 lide4 razgoSeminario 2 lide4 razgo
Seminario 2 lide4 razgoalbanySaray
 
Legislación ambiental
Legislación ambientalLegislación ambiental
Legislación ambientalJ Ospina
 
Welcome Kit Zaask España
Welcome Kit Zaask EspañaWelcome Kit Zaask España
Welcome Kit Zaask EspañaZaask
 

Destaque (20)

La publicisation du risque nucléaire : une coproduction de l'information médi...
La publicisation du risque nucléaire : une coproduction de l'information médi...La publicisation du risque nucléaire : une coproduction de l'information médi...
La publicisation du risque nucléaire : une coproduction de l'information médi...
 
Extintores
ExtintoresExtintores
Extintores
 
Capitulo 2.4 y capitulo 4 jose huauya huamani
Capitulo 2.4  y capitulo 4 jose huauya huamaniCapitulo 2.4  y capitulo 4 jose huauya huamani
Capitulo 2.4 y capitulo 4 jose huauya huamani
 
Rapport affaire Merah
Rapport affaire MerahRapport affaire Merah
Rapport affaire Merah
 
Concept Board Portail Dentaire
Concept Board Portail DentaireConcept Board Portail Dentaire
Concept Board Portail Dentaire
 
Matematica discreta informe
Matematica discreta informeMatematica discreta informe
Matematica discreta informe
 
Volei merlyn
Volei merlynVolei merlyn
Volei merlyn
 
Proyecto educativo 2011
Proyecto educativo 2011Proyecto educativo 2011
Proyecto educativo 2011
 
Seminario 2 lide4 razgo
Seminario 2 lide4 razgoSeminario 2 lide4 razgo
Seminario 2 lide4 razgo
 
Trabajo de pantallas
Trabajo de pantallasTrabajo de pantallas
Trabajo de pantallas
 
Biblioteca universitaria: agente de cambio indispensable para comunicaciones...
Biblioteca universitaria:  agente de cambio indispensable para comunicaciones...Biblioteca universitaria:  agente de cambio indispensable para comunicaciones...
Biblioteca universitaria: agente de cambio indispensable para comunicaciones...
 
40 squares
40 squares40 squares
40 squares
 
Le sénégal
Le sénégalLe sénégal
Le sénégal
 
Oap 4º eso windows
 Oap 4º eso windows Oap 4º eso windows
Oap 4º eso windows
 
Charline madenaz 11 septembre-melanie dupas
Charline madenaz 11 septembre-melanie dupasCharline madenaz 11 septembre-melanie dupas
Charline madenaz 11 septembre-melanie dupas
 
Prévalence des troubles mentaux en milieux socio éducatif
Prévalence des troubles mentaux  en milieux socio éducatifPrévalence des troubles mentaux  en milieux socio éducatif
Prévalence des troubles mentaux en milieux socio éducatif
 
Seminario 2 lide4 razgo
Seminario 2 lide4 razgoSeminario 2 lide4 razgo
Seminario 2 lide4 razgo
 
Betwin pedro bahamon
Betwin pedro bahamonBetwin pedro bahamon
Betwin pedro bahamon
 
Legislación ambiental
Legislación ambientalLegislación ambiental
Legislación ambiental
 
Welcome Kit Zaask España
Welcome Kit Zaask EspañaWelcome Kit Zaask España
Welcome Kit Zaask España
 

Semelhante a What we've learnt from Ember.js - The family talk april 2015

Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Cellenza
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Camille Roux
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyFrançois Petitit
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptMichael Akbaraly
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Microsoft
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !VISEO
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Ippon
 
LoadTime & SEO - Erlé Alberton
LoadTime & SEO - Erlé AlbertonLoadTime & SEO - Erlé Alberton
LoadTime & SEO - Erlé AlbertonWeLoveSEO
 
We❤️SEO 2019 : WebPerf et SEO
We❤️SEO 2019 : WebPerf et SEOWe❤️SEO 2019 : WebPerf et SEO
We❤️SEO 2019 : WebPerf et SEOErlé Alberton
 
Happy dev ... & ops
Happy dev ... & opsHappy dev ... & ops
Happy dev ... & opsQuentin Adam
 
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échouéLe Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échouéPhilippe YONNET
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontZenika
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 
Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPKristen Le Liboux
 
Keynote change 2013
Keynote change 2013Keynote change 2013
Keynote change 2013rbschange
 

Semelhante a What we've learnt from Ember.js - The family talk april 2015 (20)

Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1Au coeur du framework .net 4.5.1
Au coeur du framework .net 4.5.1
 
Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)Pourquoi rails est génial? (version longue)
Pourquoi rails est génial? (version longue)
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
Paris Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacyParis Web 2015 - Atelier désendettement Javascript legacy
Paris Web 2015 - Atelier désendettement Javascript legacy
 
Paris Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascriptParis Web 2015 - Atelier desendettement javascript
Paris Web 2015 - Atelier desendettement javascript
 
Javascript proprement
Javascript proprementJavascript proprement
Javascript proprement
 
Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1Au cœur du Framework .NET 4.5.1
Au cœur du Framework .NET 4.5.1
 
Usine Logicielle 2013
Usine Logicielle 2013Usine Logicielle 2013
Usine Logicielle 2013
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Présentation Rex GWT 2.0
Présentation Rex GWT 2.0Présentation Rex GWT 2.0
Présentation Rex GWT 2.0
 
LoadTime & SEO - Erlé Alberton
LoadTime & SEO - Erlé AlbertonLoadTime & SEO - Erlé Alberton
LoadTime & SEO - Erlé Alberton
 
We❤️SEO 2019 : WebPerf et SEO
We❤️SEO 2019 : WebPerf et SEOWe❤️SEO 2019 : WebPerf et SEO
We❤️SEO 2019 : WebPerf et SEO
 
Happy dev ... & ops
Happy dev ... & opsHappy dev ... & ops
Happy dev ... & ops
 
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échouéLe Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
Le Edge SEO : comment faire du SEO dans le Cloud quand tout le reste a échoué
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. Darmont
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 
Un exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHPUn exemple élémentaire d'application MVC en PHP
Un exemple élémentaire d'application MVC en PHP
 
Rex E2E
Rex E2ERex E2E
Rex E2E
 
Keynote change 2013
Keynote change 2013Keynote change 2013
Keynote change 2013
 
Docker.
Docker.Docker.
Docker.
 

Mais de Wisembly

Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...
Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...
Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...Wisembly
 
Webinar capitaliser sur la phase amont
Webinar capitaliser sur la phase amontWebinar capitaliser sur la phase amont
Webinar capitaliser sur la phase amontWisembly
 
Webinar - booster la participation
Webinar - booster la participationWebinar - booster la participation
Webinar - booster la participationWisembly
 
Webinar - médias
Webinar - médiasWebinar - médias
Webinar - médiasWisembly
 
Webinar - tags
Webinar - tagsWebinar - tags
Webinar - tagsWisembly
 
Webinar - identifiez et mesurez les kpis de vos événements
Webinar - identifiez et mesurez les kpis de vos événementsWebinar - identifiez et mesurez les kpis de vos événements
Webinar - identifiez et mesurez les kpis de vos événementsWisembly
 
Webinar - conduite du changement
Webinar - conduite du changementWebinar - conduite du changement
Webinar - conduite du changementWisembly
 
Webinar La confidentialité du Wiz
Webinar La confidentialité du WizWebinar La confidentialité du Wiz
Webinar La confidentialité du WizWisembly
 
Les wiz insolites
Les wiz insolitesLes wiz insolites
Les wiz insolitesWisembly
 
Webinar votes
Webinar votesWebinar votes
Webinar votesWisembly
 
Webinar seminaires collaboratifs
Webinar seminaires collaboratifsWebinar seminaires collaboratifs
Webinar seminaires collaboratifsWisembly
 
Webinar seminaires collaboratifs_v2
Webinar seminaires collaboratifs_v2Webinar seminaires collaboratifs_v2
Webinar seminaires collaboratifs_v2Wisembly
 
Webinar - Améliorez vos évaluations
Webinar - Améliorez vos évaluationsWebinar - Améliorez vos évaluations
Webinar - Améliorez vos évaluationsWisembly
 
Webinar seminaires participatifs
Webinar seminaires participatifsWebinar seminaires participatifs
Webinar seminaires participatifsWisembly
 
Petit-déjeuner Wisembly #2 - Change Agents et Adoption du Digital
Petit-déjeuner Wisembly #2 - Change Agents et Adoption du DigitalPetit-déjeuner Wisembly #2 - Change Agents et Adoption du Digital
Petit-déjeuner Wisembly #2 - Change Agents et Adoption du DigitalWisembly
 
Webinar wiz_insolites_live
Webinar wiz_insolites_liveWebinar wiz_insolites_live
Webinar wiz_insolites_liveWisembly
 
Séminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateurs
Séminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateursSéminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateurs
Séminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateursWisembly
 
Séminaires : 3 bonnes pratiques participatives pour booster votre audience !
Séminaires : 3 bonnes pratiques participatives pour booster votre audience !Séminaires : 3 bonnes pratiques participatives pour booster votre audience !
Séminaires : 3 bonnes pratiques participatives pour booster votre audience !Wisembly
 
Séminaires : 5 bonnes pratiques interactives pour améliorer votre communication
Séminaires : 5 bonnes pratiques interactives pour améliorer votre communicationSéminaires : 5 bonnes pratiques interactives pour améliorer votre communication
Séminaires : 5 bonnes pratiques interactives pour améliorer votre communicationWisembly
 
Séminaires & réunions: meilleur moment pour dormir au bureau?
Séminaires & réunions: meilleur moment pour dormir au bureau?Séminaires & réunions: meilleur moment pour dormir au bureau?
Séminaires & réunions: meilleur moment pour dormir au bureau?Wisembly
 

Mais de Wisembly (20)

Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...
Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...
Les cadres perdent en moyenne 10 jours par an en réunion inefficaces - Sondag...
 
Webinar capitaliser sur la phase amont
Webinar capitaliser sur la phase amontWebinar capitaliser sur la phase amont
Webinar capitaliser sur la phase amont
 
Webinar - booster la participation
Webinar - booster la participationWebinar - booster la participation
Webinar - booster la participation
 
Webinar - médias
Webinar - médiasWebinar - médias
Webinar - médias
 
Webinar - tags
Webinar - tagsWebinar - tags
Webinar - tags
 
Webinar - identifiez et mesurez les kpis de vos événements
Webinar - identifiez et mesurez les kpis de vos événementsWebinar - identifiez et mesurez les kpis de vos événements
Webinar - identifiez et mesurez les kpis de vos événements
 
Webinar - conduite du changement
Webinar - conduite du changementWebinar - conduite du changement
Webinar - conduite du changement
 
Webinar La confidentialité du Wiz
Webinar La confidentialité du WizWebinar La confidentialité du Wiz
Webinar La confidentialité du Wiz
 
Les wiz insolites
Les wiz insolitesLes wiz insolites
Les wiz insolites
 
Webinar votes
Webinar votesWebinar votes
Webinar votes
 
Webinar seminaires collaboratifs
Webinar seminaires collaboratifsWebinar seminaires collaboratifs
Webinar seminaires collaboratifs
 
Webinar seminaires collaboratifs_v2
Webinar seminaires collaboratifs_v2Webinar seminaires collaboratifs_v2
Webinar seminaires collaboratifs_v2
 
Webinar - Améliorez vos évaluations
Webinar - Améliorez vos évaluationsWebinar - Améliorez vos évaluations
Webinar - Améliorez vos évaluations
 
Webinar seminaires participatifs
Webinar seminaires participatifsWebinar seminaires participatifs
Webinar seminaires participatifs
 
Petit-déjeuner Wisembly #2 - Change Agents et Adoption du Digital
Petit-déjeuner Wisembly #2 - Change Agents et Adoption du DigitalPetit-déjeuner Wisembly #2 - Change Agents et Adoption du Digital
Petit-déjeuner Wisembly #2 - Change Agents et Adoption du Digital
 
Webinar wiz_insolites_live
Webinar wiz_insolites_liveWebinar wiz_insolites_live
Webinar wiz_insolites_live
 
Séminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateurs
Séminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateursSéminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateurs
Séminaires : 3 bonnes pratiques collaboratives pour engager vos collaborateurs
 
Séminaires : 3 bonnes pratiques participatives pour booster votre audience !
Séminaires : 3 bonnes pratiques participatives pour booster votre audience !Séminaires : 3 bonnes pratiques participatives pour booster votre audience !
Séminaires : 3 bonnes pratiques participatives pour booster votre audience !
 
Séminaires : 5 bonnes pratiques interactives pour améliorer votre communication
Séminaires : 5 bonnes pratiques interactives pour améliorer votre communicationSéminaires : 5 bonnes pratiques interactives pour améliorer votre communication
Séminaires : 5 bonnes pratiques interactives pour améliorer votre communication
 
Séminaires & réunions: meilleur moment pour dormir au bureau?
Séminaires & réunions: meilleur moment pour dormir au bureau?Séminaires & réunions: meilleur moment pour dormir au bureau?
Séminaires & réunions: meilleur moment pour dormir au bureau?
 

What we've learnt from Ember.js - The family talk april 2015

  • 1. What we've learn from Ember.js after 2 months developing our new product MVP Presentation The Family - 9 avril 2015
  • 2. About us Guillaume Potier Co founder & CTO @guillaumepotier Nicolas Chenet Javascript developer @nicolaschenet
  • 5. About us 4,9 yrs old 38 employees 10 tech + product
  • 7. Welcome to the javascript Jungle!
  • 8. Welcome to the javascript Jungle!
  • 9. Welcome to the javascript Jungle!
  • 10.
  • 12. Ce qu’on a choisi Because it’s a matter of choice
  • 13. Ce qu’on a choisi 13 Ember JS Ember CLI • The command line interface for ambitious web applications. Ember Data • A data persistence library for Ember.js Because it’s a matter of choice
  • 14. Ember JS ? En bref…
  • 15. Ember JS ? 15 Framework pour Single Page Applications Model / View / Controller • Model: Classe avec propriétés et comportements (data) • View: Interactions avec le DOM / Templates … • Controller: Présentation des datas / Actions … Rôle important des routes • Responsable du fetch des datas • Nesting • Application state En bref…
  • 16. Ember JS + Ember CLI Pourquoi on aime ?
  • 17. Ember JS Pourquoi on aime ? 17 TOMSTER !
  • 18. Ember JS + Ember CLI Pourquoi on aime ? 18 Data Binding et Computed Properties / Observers • L’interface reflète en permanence la data • Pas besoin d’écrire des listeners pour mettre à jour les templates => gain de temps / moins de boilerplate • Computed properties => des propriétés “fonctions” • Observers => Réaliser des traitements dès qu’une propriété est mise à jour
  • 19. Ember JS + Ember CLI Pourquoi on aime ? 19 Backburner, formerly “The Run Loop” • Not really a loop • Tout les traitements sont organisés dans des files spécialisées • Ex: on s’assure que toutes les opérations de sync soient terminées avant de rendre les views sync actions router transitions render after render destroy
  • 20. Ember JS + Ember CLI Pourquoi on aime ? 20 Les components • Approche DRY et “organique” de l’interface • Les éléments d’interface sont responsables d’eux-même et sont capables d’interagir avec l’extérieur • Simple à mettre en place Les actions, mieux que ng-click • Equivalent de ng-click mais pas que • Traitement “smart” des actions grâce au bubbling
  • 21. Ember JS + Ember CLI Pourquoi on aime ? 21 Ember Inspector, plugin Chrome incontournable • Arbre des vues et templates • Arbre des routes • Représentation des datas, model par model • Liste des Promises • Performances de rendu • Les modules chargés • …
  • 22. Ember JS + Ember CLI Pourquoi on aime ? 22 Convention over Configuration • Une architecture d’application structurée • Des comportements “automagiques”, qui sauvent du temps et pas mal de boilerplate • => Fast developer onboarding • => A mesure que l’app grossit en taille et complexité, code toujours clair, identique
  • 23. Ember JS Un hamster, c’est parfois difficile à apprivoiser
  • 24. Ember JS 24 La fameuse Learning Curve • Où je range mon code ? Je fais un MIXIN ou un SERVICE ? • Il s’est passé quoi là ? • La bipolarité du dévelopeur débutant avec Ember The “Ember way” to do things • Parfois on peut se sentir “enfermé” • Les overrides ne sont pas forcément toujours évidents I18n ? • Pas de support natif • Les plugins existants ne correspondaient pas à notre méthode • Création d’un plugin => ember-gettext Un hamster, c’est parfois difficile à apprivoiser
  • 26. Ember CLI 26 Interface en ligne de commande pour les applications Ember JS Inspiré par Ember App Kit Structure de projet Assets pipeline + Server Gestion des environnements (PROD / DEV / TEST) Rajoute de la convention dans la convention o/ Et plein d’autres trucs… En bref…
  • 28. Ember CLI 28 The future is now • Transpiler ES6: imports / exports sans passer par requireJS Générateurs et blueprints • “yeoman-like”: générer des routes / controllers / … en ligne de commande • basés sur des blueprints personnalisables: s’adapte à vos besoins • Up de productivité et de qualité du code Server + Live reload Des tests facilités • Built in QUnit, Ember Testing, Ember QUnit Pourquoi on aime ?
  • 30. Ember Data En bref… 30 Models • Représentation des datas sous forme d’“entités” • Relations Adapters • Abstraction des méthodes de fetch, de sauvegarde des models • 1 adapter global ou 1 adapter par model • RESTAdapter / LSAdapter / FIXTUREAdapter / … Store • Gère le cycle de vie des models • Communique avec les adapters à travers une API unifiée • Automatic caching
  • 32. Ember Data Pourquoi on aime ? 32 Adapters => Quick prototyping • Models pour lesquels l’API existe / est prête => RESTAdapter • Model sans API existante => FIXTUREAdapter • Quand l’API est prête, il “suffit” de changer l’adapter, et voilà Abstraction des calls à l’API • Ex: pour fetch 1 meeting => this.store.find(‘meeting’, 123) (peu importe l’adapter) • Les URLs sont buildées par Ember Data • Force la rigueur Records flags • record.isDirty => des changements pas synchro • record.isNew, record.isSaving, etc…
  • 33. Ember Data Les trucs moins cool
  • 34. Ember Data Les trucs moins cool 34 Très très “opinionated” • Et en plus pas du tout permissif “out of the box” => certains ont encore mal au crâne • Difficile à domestiquer avec une API pas forcément en phase avec son interprétation de la JSON API Certaines parties des adapters et du store ont du être réécrites Essentiellement fait pour la synchro des datas • Je fais comment si j’ai pas que du GET / POST / PUT / DELETE sur un model, mais que j’ai besoin de faire une “action” => augmente le store ;)
  • 35. Pour finir Parce qu’il faut bien une fin
  • 36. Pour finir 36 Alors heureux ? • Venant d’un univers Backbone, OUI ! • Moins de Boilerplate • Code plus concis • Meilleure qualité • Tests plus faciles / rapides à écrire Ce qui a été le plus douloureux ? • Essentiellement la couche data et comprendre la bête “de l’intérieur” pour expliquer la magie Si c’était à refaire, toujours Ember ? Angular ? • EMBER ! • Cadre / Réel framework qui apportent des fondations robustes à une app Parce qu’il faut bien une fin
  • 37. Nicolas Chenet nicolas@wisembly.com @nicolaschenet wisembly.com merci, à bientôt ! Guillaume Potier guillaume@wisembly.com @guillaumepotier