60
RENAULTSHOP @hikkyu @chuxiuqiang @nicolasmassouh @cbalit @fredoche

Meetup angular rshop

Embed Size (px)

Citation preview

Page 1: Meetup angular rshop

RENAULTSHOP

@hikkyu@chuxiuqiang@nicolasmassouh@cbalit@fredoche

Page 2: Meetup angular rshop

EKINO

WWW.EKINO.COMAGENCE DIGITALEFRONT, JAVA ET PHP

@NewsDuFront@3k1n0

Page 3: Meetup angular rshop

INTRODUCTION

Page 4: Meetup angular rshop

RENAULT QUOI ?

WWW.RENAULTSHOP.FREXISTE DEPUIS 2009FLEXAPPLICATION

Mise en relation client-revendeurMoteur de recherche

Page 5: Meetup angular rshop

LA VERSION 2

Page 6: Meetup angular rshop

L’ÉQUIPE

NicolasCyril Xiu

Damien Fred

Page 7: Meetup angular rshop

LANCEMENT DU PROJET

Page 8: Meetup angular rshop

PHASE PRÉLIMINAIRE

PROTOTYPAGE / HISTORIQUE

Promoflash Renault Shop

Page 9: Meetup angular rshop

PHASE PRÉLIMINAIRE

WAR-ROOMANALYSE DU FONCTIONNELDÉCOUPAGE DES TÂCHESCONCEPTION ANGULARMISE EN PLACE DES FLUX DE DONNÉES

Page 10: Meetup angular rshop

CHOIX DES OUTILS

Page 11: Meetup angular rshop

CHOIX DES OUTILS

Front Back

Mock

Charles

Page 12: Meetup angular rshop

PHASE DE DÉVELOPPEMENT

REPRISE DES ÉLÉMENTS DU PROTOTYPE

Quelques directives ou services

PARALLÉLISATION DES TÂCHES

Montage de toutes les vues HTML/CSSÉcriture des services et des controllersAngularisation des vues

Page 13: Meetup angular rshop

LES COMPOSANTS

CHOIX DE LA LIBRAIRIE

Angular UI : UI-bootstrap• modal• pagination

LES AUTRES (AVEC UNE DIRECTIVE DE SURCOUCHE)

SelectboxitFlexSliderjQuery UI Slider

Page 14: Meetup angular rshop

TOUT AU LONG DU PROJET

DES STAND UP QUOTIDIENNES

TEST UNITAIRES AVEC KARMA

Plutôt TDD868 tests• 88% des filtres• 67% des services• 50% des controllers• 22% des directives

Page 15: Meetup angular rshop

TOUT AU LONG DU PROJET

DES STAND UP QUOTIDIENNES

TEST UNITAIRES AVEC KARMA

Plutôt TDD868 tests• 88% des filtres• 67% des services• 50% des controllers• 22% des directives

Page 16: Meetup angular rshop

INITIALISATION DE LA DIRECTIVE

EXEMPLE D’UTILISATION

TESTS UNITAIRES DES DIRECTIVES

Page 17: Meetup angular rshop

LE TEMPLATE URL

TESTS UNITAIRES DES DIRECTIVES

Page 18: Meetup angular rshop

QUELQUES CHIFFRES

4 Développeurs front

5 Développeurs back

4 Consultants

Env. 800 tickets bugs et tâches

2 UX 1 Graphiste

1 Module

22 Directives

7 Filtres 28 Services

21 Controllers

Page 19: Meetup angular rshop

RESPONSIVE DESIGN

Page 20: Meetup angular rshop

SCOPE

DESKTOP

Chrome : latest releaseFirefox : latest releaseSafari 5 et 6IE 8, 9 et 10

TABLETTE

iOS 5.1 à 6.1Android 3.2 à 4.2Microsoft Surface RT

MOBILE

iOS 6Android 4.1Android 2.3

Page 21: Meetup angular rshop

RESPONSIVE DESIGN

DESKTOP FIRST ET NON MOBILE FIRSTLAYOUT ADAPTIF POUR TABLETTEPAS DE FRAMEWORK CSS

MAIS PAS QUE !

Page 22: Meetup angular rshop

POURQUOI ADAPTIF DESIGN (AWD) ?

CONTRAINTES FONCTIONNELLES

MISE EN PAGE FLUIDE (RWD) AVEC UNE AMÉLIORATION PROGRESSIVE

Page 23: Meetup angular rshop
Page 24: Meetup angular rshop

POUR LES IMAGES

UNE CONVENTION3 tailles d’images SMALL, MEDIUM,LARGEUn pattern d’url /monurl/[size]/vehicle-cool.png

Page 25: Meetup angular rshop

ON DOIT CONNAÎTRE LE CONTEXTE

MATCHMEDIAREFRESH (RESIZE)

Page 26: Meetup angular rshop

MATCHMEDIA

POLYFILL FROM WEBLINC FOR < IE10 FASTER THAN NATIVE MATCHMEDIA (DEPEND ON THE BROWSER)

https://github.com/weblinc/media-matchhttp://jsperf.com/matchmedia

Page 27: Meetup angular rshop

UTILISATION DE MATCHMEDIA

Page 28: Meetup angular rshop

Inclusion d’un fragment HTML en fonction du flag

MACROTYPE

DESKTOP_TABLETMOBILE

TYPE

DESKTOPTABLETMOBILE

2 FAMILLES DE TYPE DE DEVICE

Page 29: Meetup angular rshop

SNIFFING (USER AGENT)

Page 30: Meetup angular rshop

UN DOM RESPONSIVE NE SERA PAS ALTÉRÉ PAR ANGULAR

Page 31: Meetup angular rshop

TIPS AND TRICKS

Page 32: Meetup angular rshop

ORIENTÉ URL

Page 33: Meetup angular rshop

Action utilisateur

URL

Mise à jour du modèle Appel serveur

Page 34: Meetup angular rshop

ORIENTÉ SERVICE

Page 35: Meetup angular rshop

SearchForm

Criteria Range Query Search SearchResult

Page 36: Meetup angular rshop

‘$APPLY / $DIGEST ALREADY IN PROGRESS’ ERROR

Page 37: Meetup angular rshop

SELECT SKIN TIPS

Page 38: Meetup angular rshop
Page 39: Meetup angular rshop

LES ANIMATIONS

Page 40: Meetup angular rshop
Page 41: Meetup angular rshop

DEBUG SUR LES DEVICES

Page 42: Meetup angular rshop

SUR IOS POUR LES MACS USERS

SIMULATEUR IOSAPPAREIL BRANCHÉ USBIOS 6, SAFARI 6

42

Page 43: Meetup angular rshop

SUR ANDROID

ANDROID 3.2APPAREIL BRANCHÉ EN USBPAS DE DÉBUG POSSIBLE HORMIS AVEC CHROME

https://developers.google.com/chrome-developer-tools/docs/remote-debugging

Page 44: Meetup angular rshop

LA PERFORMANCE

Page 45: Meetup angular rshop

Séquence de chargement

Page 46: Meetup angular rshop

SEO

Page 47: Meetup angular rshop

L’EXISTANT

DES URL DÉJÀ INDEXÉES À CONVERTIRDYNAMISATION DU SITEMAP.XML

Page 48: Meetup angular rshop

1. UNE CONVENTION …

Page 49: Meetup angular rshop

POUR UN BOT

http://www.renaultshop.fr/#!/home

http://www.renaultshop.fr/?_escaped_fragment_=/home

devient

Page 50: Meetup angular rshop

2. UNE REDIRECTION…

<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /prerender-test/ # Virtual/pushState URIs (requests not matching an existing file get forwarded to index.html) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule .* index.html [L] <IfModule mod_proxy_http.c> # Enable prerendering for .html and directory index files RewriteCond %{HTTP_USER_AGENT} googlebot|yahoo|bingbot|baiduspider [NC,OR] RewriteCond %{QUERY_STRING} _escaped_fragment_|prerender=1 RewriteCond %{HTTP_USER_AGENT} !^Prerender RewriteRule ^(.*\.html)?$ http://prerender.herokuapp.com/http://www.yourdomain.com/prerender-test/$1 [P,L] </IfModule></IfModule> # Optionally add a ProxyPassReverse directive to ensure that 301/302 redirects# issued by the prerender service are correctly forwarded to the client.# Note that this must be located in your Apache config rather than .htaccess # <IfModule mod_proxy_http.c># ProxyPassReverse /prerender-test/ http://prerender.herokuapp.com/http://www.yourdomain.com/prerender-test/# </IfModule>

Ex: https://gist.github.com/Stanback/7028309

Page 51: Meetup angular rshop

3. UN RENDERING STATIC

## Démarrer phantomJs et pour voir l'utiliser depuis node.jsphantom = require "phantom" ## avec le pont phantomjs-nodephantom.create (ph)-> ph.createPage (page)-> ## Sérialisation du dom page.evaluate -> # Exécution dans le runtime nodejs return JSON.stringify({dom : encodeURIComponent(document.documentElement.outerHTML)}) # Et là au sein de phantomJs , (result)-> ... ## on écrit le dom dans le fichier ph.exit() ## TA-DAA!

Page 52: Meetup angular rshop

SEO

RENAULT SHOP

FILT

RE

renaultshop.fr/#!/home

renaultshop.fr/?_escaped_fragment_=/home

Page 53: Meetup angular rshop

SOLUTIONS

SEO4AJAX (PAYANT)BROMBONE (PAYANT)PRERENDER.IO (OPEN-SOURCE)OU …. SOLUTION MAISON

GOOGLE WEBMASTER TOOLS (POUR LE DEBUG)

Page 54: Meetup angular rshop

SCALABILITÉ

Page 55: Meetup angular rshop

File System

Sitemap.js

proxy.js

beanstalkd

Page 56: Meetup angular rshop

QUELQUES CHIFFRES …

30 SITES INDEXÉS3000 URL /SITE1GO DE FICHIERS/SITE20000 URL POUR RENAULTSHOP1 REQUÊTE DE BOT/SITE/SECONDE5 À 7 SECONDES DE CALCUL PAR PAGE

Page 57: Meetup angular rshop

BILAN

OK POUR LA TECHNIQUE

MAIS ON VEUT DES RÉPONSES PERTINENTES

Pour un SEO efficace il faut du contenuPertinence des url à indexer, de leurs nombres …• « cool uris don’t change » Tim Berners-Lee

Pertinence des informations (géolocalisation)

ATTENTION AU JAVASCRIPT

Page 58: Meetup angular rshop

DONC …

Page 59: Meetup angular rshop

ON A AIMÉL’INDÉPENDANCE DES ÉQUIPESL’ARCHITECTURE ANGULARLES TESTS UNITAIRES

ON AURAIT AIMÉENCORE PLUS ORIENTÉ SERVICESPLUS DE TESTS ET AVEC LES TESTS E2E

NE PAS SOUS ESTIMERLA MONTÉE EN COMPÉTENCE DES ÉQUIPESLE DEBUG SUR LES DIFFÉRENTS DEVICES CIBLESLE SEO

//TODO

Page 60: Meetup angular rshop

@NewsDuFront@3k1n0

@nicolasmassouh@cbalit @chuxiuqiang

@hikkyu @fredoche