SlideShare uma empresa Scribd logo
1 de 43
Les performances de rendu
Jean-Pierre Vincent
Architecte itinérant
Consultant et Formateur Perfs ou JS
@theystolemynick
POURQUOI FAIRE ?
Pour faire plaisir à l’utilisateur (et ton
CA)
Temps de réponse :
• < 150 ms : instantané
– Le but de toute interface touch
• 150 ms — 1 s : c’est la machine qui bosse
– L’utilisateur stresse
• > 10s : bye bye
Animations :
• 60 Fps : fluide et naturel
• < 30 Fps : bye bye
Pour faire plaisir à Dieu
Pour faire des interfaces très réactive
Pour des interactions plus riches
Avoir 60 Fps ou pas
Comment fluidifier ?
$(‘.el1’).animate(
{ left: ‘-=600’
},
{ duration: 350,
easing:
‘bounce’
}
);
$(‘.el2’).animate …
Les ordres de grandeur
60 Hz = 16 ms pour :
• JS
– Récupérer la position de l’élément
– Calcul de la nouvelle position
– Appliquer la nouvelle position
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
Les manipulations DOM en JS
• el.offsetLeft …, el.clientLeft…, el.
getBoundingClientRect()…
• el.scrollTo(), el.scrollTop, w.innerHeight
• el.getComputedStyle()
• evt.layerX, evt.offsetX
• SVG.getCharNumAtPosition(),
SVG.getNumberOfChars()
jQuery.animate() utilise tout cela !
Animation prédictible ? JS quasi inutile
• On trash jQuery.animate
• Pré-calcul des styles
• JS se limite à ajouter / supprimer des classes
El1.addClass(‘disappear-to-left’)
El2.addClass(‘appear-from-right’)
Animation prédictible : transition CSS
.elements {
transition-property : left;
transition-timing-function: cubic-
bezier(0,0,0.25,1);
transition-duration : 350 ms;
left: 600px;
}
.appear-from-right {
left: 0;
}
.disappear-to-left {
left: -600px;
}
Transitions CSS
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position
– Appliquer la nouvelle position
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
Les propriétés qui coûtent cher
Elles déclenchent Layout + Paint + Composite
• top, left, width, height, float
• font-*, border-*, padding-*, margin-*
• display, visibility
csstriggers.com
Les propriétés qui vont bien
.move-left{
transform: translateX(-600px);
}
.enlarge-your p {
transform : scale(1.3, 0) ;
}
• IE 8 : ms-filters, IE9 : prefix ms-
• IE10, chrome, Fx, OS mobile : standard
CSS transform / opacity
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position
– Appliquer la nouvelle position
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
Bonus : forcer le GPU (parfois)
.move-left {
transform:translate3d(-600px, 0, 0);
}
.enlarge-your p {
transform:scale3d(1.3, 0, 0);
}
Transition + translation + GPU = <3
.elements {
transition-property : transform;
transition-timing-function: cubic-
bezier(0,0,0.25,1);
transition-duration : 350 ms;
left: 600px;
}
.appear-from-right {
transform: translate3d(-600px, 0px, 0px);
}
.disappear-to-left {
transform: translate3d(-1200px, 0px, 0px);
}
Transition + translation + GPU = <3
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position
– Appliquer la nouvelle position
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
60 FPS FTW
LES ANIMATIONS IMPRÉVISIBLES
Et pour les animations imprévisibles ?
• Parallax
• Drag
• Jeux vidéos
• …
Reprenons
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position
– Appliquer la nouvelle position
• Navigateur
– Calculs de Layout <= optimisé en CSS
– Paint des zones modifées <= optimisé en CSS
– Pousser vers la carte graphique
Récupérer la position : mise en cache
• Plutôt que
$(el).on(‘touchmove’, function move() {
// get + set du DOM en boucle : BOOM
this.style.width = (this.offsetWidth + X);
}
• Préférer
var width = el.offsetWidth;
$(el).on(‘touchmove’, function move() {
// un set, et même plusieurs d’affilé : SMOOTH
this.style.width = ( width += Y );
}
Reprenons
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position
– Appliquer la nouvelle position
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
Quand mettre à jour le DOM ?
// JAMAIS
setInterval( move, 16 );
// MIEUX, mais agressif et imprécis
(function boucle() {
setTimeout( boucle, 16);
move();
}());
// AU TOP
(function boucle() {
requestAnimationFrame(
boucle);
move();
}());
Alléger
var height = el.offsetHeight,
Y = 0;
$(el).on(‘touchmove’, function calculateDelta() {
… // Calcul séparé de Y (delta du doigt)
});
requestAnimationFrame( function move() {
… // check de la nécessité puis Raf(move)
this.style.height = (height += Y);
});
Reprenons
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position <= dissocié
– Appliquer la nouvelle position <= optimisé
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
Calculs lourds ?
var IA = new Worker(‘game-ia.js’);
var positions;
IA.addEventListener(‘moves’,function(e){
positions = e.data;
});
(function boucle() {
requestAnimationFrame( boucle );
moveUnits( positions );
})();
Calculs lourds ?
La technique ancestrale du
setTimeout( fn, 0);
Universel, increvable, lisible avec le bon snippet
Reprenons
• JS :
– Récupérer la position de l’élément
– Calcul de la nouvelle position <= dissocié et optimisé
– Appliquer la nouvelle position <= optimisé
• Navigateur
– Calculs de Layout
– Paint des zones modifées
– Pousser vers la carte graphique
DOM : la taille compte
(et la manière dont on s’en sert)
DOM Monster yellowlab.tools
Touche pas (trop) à mon DOM
• Peu de requête DOM
– Mise en cache des résultats en dehors des boucles
• Appliquer en batchs
– $el.addClass(‘error’) plutôt que $el.css
– .innerHTML marche encore !
– Pas d’alternance get / set
Apprends à faire tes sélecteurs
• Natif quand tu peux :
$(document.getElementById(‘id’)) VS $(‘#id’)
document.querySelector(‘.item’) VS
$(‘.item’).first()
• Limiter l’étendue de la recherche
$container.find(‘.item’)
$container.find(‘ > li.item’)
• Déléguer
$container.on( ‘click’, ‘li’, function(){} )
MAÎTRISER SES OUTILS
Assez de règles
Profilers — Android & Desktop
Profilers — Firefox & Firefox OS
Profilers — Windows
Profilers natifs — iOS & desktop
Les autres
• Opera : dragonfly
• IE8 : profiling JS
À l’instinct™ :
• iOS < 7
• Navigateur Android
• …
Librairies d’animation CSS 3
• Librairies CSS:
– animate.css,
– Effekt.css
• Librairies JS :
– D3.js,
– GSAP,
– TweenJS,
– jQuery 4
Conclusion
• JS seul est performant, merci de demander
• Watch your DOM !
• Use the CSS 3 / HTML5 force Luke
Je testerais, tu testeras,
nous testerons …
MERCI
Jean-Pierre Vincent
@theystolemynick
Un audit ou une petite formation Perfs ? jp@braincracking.fr

Mais conteúdo relacionado

Destaque

Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft
Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft
Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft Aline Custodio
 
Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011Eric D.
 
HTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantiqueHTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantiqueJean-Pierre Vincent
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsJean-Pierre Vincent
 
Practical web performance - Site Confidence Web Performance Seminar
Practical web performance - Site Confidence Web Performance SeminarPractical web performance - Site Confidence Web Performance Seminar
Practical web performance - Site Confidence Web Performance SeminarStephen Thair
 
Measuring Mobile Web Performance v2
Measuring Mobile Web Performance v2Measuring Mobile Web Performance v2
Measuring Mobile Web Performance v2Stephen Thair
 
Microsoft et l'Open Source
Microsoft et l'Open SourceMicrosoft et l'Open Source
Microsoft et l'Open Sourcedavrous
 
Responsive logic - Kiwiparty
Responsive logic - KiwipartyResponsive logic - Kiwiparty
Responsive logic - KiwipartyJulien Cabanès
 
Barcamp Prestashop - Améliorer la disponibilité
Barcamp Prestashop - Améliorer la disponibilitéBarcamp Prestashop - Améliorer la disponibilité
Barcamp Prestashop - Améliorer la disponibilitéOxalide
 
Faire le pont entre designers et développeurs avec Sass au Guardian
Faire le pont entre designers et développeurs avec Sass au GuardianFaire le pont entre designers et développeurs avec Sass au Guardian
Faire le pont entre designers et développeurs avec Sass au GuardianKaelig Deloumeau-Prigent
 
Les outils de monitoring
Les outils de monitoringLes outils de monitoring
Les outils de monitoringYan Luong
 
Un peu de sécurité dans ce monde de Kiwi
Un peu de sécurité dans ce monde de KiwiUn peu de sécurité dans ce monde de Kiwi
Un peu de sécurité dans ce monde de KiwiLaurie-Anne Bourdain
 
BEM, vos CSS sous vitamines !
BEM, vos CSS sous vitamines !BEM, vos CSS sous vitamines !
BEM, vos CSS sous vitamines !Thomas ZILLIOX
 
Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013
Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013
Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013Patrick Lauke
 
Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Jean-Pierre Vincent
 
Soirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDNSoirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDNEric D.
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJean-Pierre Vincent
 

Destaque (20)

Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft
Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft
Conférence Open Data par où commencer ? Intervention J.M.Lazard Open datasoft
 
Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011Webpagetest en 5 minutes - Sud Web 2011
Webpagetest en 5 minutes - Sud Web 2011
 
HTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantiqueHTML5 maintenant partie 1 : la sémantique
HTML5 maintenant partie 1 : la sémantique
 
La performance sur mobile
La performance sur mobileLa performance sur mobile
La performance sur mobile
 
HTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIsHTML5 maintenant partie 2 : APIs
HTML5 maintenant partie 2 : APIs
 
Html5 now light
Html5 now lightHtml5 now light
Html5 now light
 
Practical web performance - Site Confidence Web Performance Seminar
Practical web performance - Site Confidence Web Performance SeminarPractical web performance - Site Confidence Web Performance Seminar
Practical web performance - Site Confidence Web Performance Seminar
 
Measuring Mobile Web Performance v2
Measuring Mobile Web Performance v2Measuring Mobile Web Performance v2
Measuring Mobile Web Performance v2
 
Physical web
Physical webPhysical web
Physical web
 
Microsoft et l'Open Source
Microsoft et l'Open SourceMicrosoft et l'Open Source
Microsoft et l'Open Source
 
Responsive logic - Kiwiparty
Responsive logic - KiwipartyResponsive logic - Kiwiparty
Responsive logic - Kiwiparty
 
Barcamp Prestashop - Améliorer la disponibilité
Barcamp Prestashop - Améliorer la disponibilitéBarcamp Prestashop - Améliorer la disponibilité
Barcamp Prestashop - Améliorer la disponibilité
 
Faire le pont entre designers et développeurs avec Sass au Guardian
Faire le pont entre designers et développeurs avec Sass au GuardianFaire le pont entre designers et développeurs avec Sass au Guardian
Faire le pont entre designers et développeurs avec Sass au Guardian
 
Les outils de monitoring
Les outils de monitoringLes outils de monitoring
Les outils de monitoring
 
Un peu de sécurité dans ce monde de Kiwi
Un peu de sécurité dans ce monde de KiwiUn peu de sécurité dans ce monde de Kiwi
Un peu de sécurité dans ce monde de Kiwi
 
BEM, vos CSS sous vitamines !
BEM, vos CSS sous vitamines !BEM, vos CSS sous vitamines !
BEM, vos CSS sous vitamines !
 
Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013
Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013
Getting touchy - an introduction to touch events / Sud Web / Avignon 17.05.2013
 
Performances web - quoi de neuf ?
Performances web - quoi de neuf ?Performances web - quoi de neuf ?
Performances web - quoi de neuf ?
 
Soirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDNSoirée webperf du 29 nov 2010 - Latence et CDN
Soirée webperf du 29 nov 2010 - Latence et CDN
 
Javascript : fondamentaux et OOP
Javascript : fondamentaux et OOPJavascript : fondamentaux et OOP
Javascript : fondamentaux et OOP
 

Mais de Jean-Pierre Vincent

Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pagesJean-Pierre Vincent
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyJean-Pierre Vincent
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages webJean-Pierre Vincent
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance frontJean-Pierre Vincent
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech daysJean-Pierre Vincent
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Jean-Pierre Vincent
 
Télés connectées et développement Web
Télés connectées et développement WebTélés connectées et développement Web
Télés connectées et développement WebJean-Pierre Vincent
 
Inclure du Javascript de manière performante
Inclure du Javascript de manière performanteInclure du Javascript de manière performante
Inclure du Javascript de manière performanteJean-Pierre Vincent
 
HTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaJean-Pierre Vincent
 

Mais de Jean-Pierre Vincent (12)

Mesurer la performance : onload, pages
Mesurer la performance : onload, pagesMesurer la performance : onload, pages
Mesurer la performance : onload, pages
 
Techniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwipartyTechniques accélération des pages web #kiwiparty
Techniques accélération des pages web #kiwiparty
 
Techniques d'accélération des pages web
Techniques d'accélération des pages webTechniques d'accélération des pages web
Techniques d'accélération des pages web
 
Le monitoring de la performance front
Le monitoring de la performance frontLe monitoring de la performance front
Le monitoring de la performance front
 
Les performances Web mobile
Les performances Web mobileLes performances Web mobile
Les performances Web mobile
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
Fondamentaux portée - contexte - function ms tech days
Fondamentaux   portée - contexte - function ms tech daysFondamentaux   portée - contexte - function ms tech days
Fondamentaux portée - contexte - function ms tech days
 
Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010Retours sur le concours Webperf 2010
Retours sur le concours Webperf 2010
 
Télés connectées et développement Web
Télés connectées et développement WebTélés connectées et développement Web
Télés connectées et développement Web
 
Html5 bonnes-pratiques
Html5 bonnes-pratiquesHtml5 bonnes-pratiques
Html5 bonnes-pratiques
 
Inclure du Javascript de manière performante
Inclure du Javascript de manière performanteInclure du Javascript de manière performante
Inclure du Javascript de manière performante
 
HTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimediaHTML5 maintenant partie 3 : multimedia
HTML5 maintenant partie 3 : multimedia
 

Último

BOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleur
BOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleurBOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleur
BOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleuridelewebmestre
 
BOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsBOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsidelewebmestre
 
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatiqueBOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatiqueidelewebmestre
 
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...idelewebmestre
 
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsBow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsidelewebmestre
 
Cours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pagesCours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pagesPierreFournier32
 
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresBOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresidelewebmestre
 
BOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresBOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresidelewebmestre
 
Cadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en FranceCadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en Franceidelewebmestre
 
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...idelewebmestre
 
Agrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en DordogneAgrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en Dordogneidelewebmestre
 
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équineBOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équineidelewebmestre
 
BOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinBOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinidelewebmestre
 
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresBOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresidelewebmestre
 
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...idelewebmestre
 
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VLBOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VLidelewebmestre
 
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsBOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsidelewebmestre
 
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasBOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasidelewebmestre
 
BOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chairBOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chairidelewebmestre
 
Accompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la NièvreAccompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la Nièvreidelewebmestre
 

Último (20)

BOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleur
BOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleurBOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleur
BOW 2024 - 3-5 - Des solutions numériques pour se préparer aux pics de chaleur
 
BOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminantsBOW 2024-3-10 - Batcool Petits ruminants
BOW 2024-3-10 - Batcool Petits ruminants
 
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatiqueBOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
BOW 2024 - 3 1 - Les infrastructures équestres et le changement climatique
 
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
BOW 2024 - 3-8 - Adaptation des bâtiments d'élevages de volailles au changeme...
 
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminantsBow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
Bow 2024 - Plein air à l'intérieur des bâtiments d'élevage de ruminants
 
Cours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pagesCours polymère presentation powerpoint 46 pages
Cours polymère presentation powerpoint 46 pages
 
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitièresBOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
BOW 2024 -3-7- Impact bâtiment stress thermique Vaches laitières
 
BOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitièresBOW 2024 - L'enrichissement du milieu des chèvres laitières
BOW 2024 - L'enrichissement du milieu des chèvres laitières
 
Cadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en FranceCadre réglementaire et développement de l'agrivoltaïsme en France
Cadre réglementaire et développement de l'agrivoltaïsme en France
 
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
BOW 2024 - Nouveaux modes de logement pour des veaux de boucherie avec accès ...
 
Agrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en DordogneAgrivoltaïsme et filière ovine en Dordogne
Agrivoltaïsme et filière ovine en Dordogne
 
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équineBOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
BOW 2024 - L'écurie ouverte : un concept inspirant pour la filière équine
 
BOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcinBOW 2024 - Le bâtiment multicritère porcin
BOW 2024 - Le bâtiment multicritère porcin
 
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitièresBOW 2024 - 3-2 - Stress thermique impact vaches laitières
BOW 2024 - 3-2 - Stress thermique impact vaches laitières
 
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
Accompagnement de l'agrivoltaisme - Focus sur l'étude système en Merthe et Mo...
 
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VLBOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
BOW 2024 -3-9 - Matelas de logettes à eau refroidie VL
 
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcinsBOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
BOW 24 - De la réflexion de groupe à l'immersion dans des bâtiments porcins
 
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pasBOW 2024 - Dedans/Dehors quand voir ne suffit pas
BOW 2024 - Dedans/Dehors quand voir ne suffit pas
 
BOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chairBOW 2024 - Jardins d'hiver en poulets de chair
BOW 2024 - Jardins d'hiver en poulets de chair
 
Accompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la NièvreAccompagnement de l'agrivoltaïsme dans le département de la Nièvre
Accompagnement de l'agrivoltaïsme dans le département de la Nièvre
 

Les Performance de rendu sur mobile

  • 1. Les performances de rendu Jean-Pierre Vincent Architecte itinérant Consultant et Formateur Perfs ou JS @theystolemynick
  • 3. Pour faire plaisir à l’utilisateur (et ton CA) Temps de réponse : • < 150 ms : instantané – Le but de toute interface touch • 150 ms — 1 s : c’est la machine qui bosse – L’utilisateur stresse • > 10s : bye bye Animations : • 60 Fps : fluide et naturel • < 30 Fps : bye bye
  • 5. Pour faire des interfaces très réactive
  • 6. Pour des interactions plus riches
  • 7. Avoir 60 Fps ou pas
  • 8. Comment fluidifier ? $(‘.el1’).animate( { left: ‘-=600’ }, { duration: 350, easing: ‘bounce’ } ); $(‘.el2’).animate …
  • 9. Les ordres de grandeur 60 Hz = 16 ms pour : • JS – Récupérer la position de l’élément – Calcul de la nouvelle position – Appliquer la nouvelle position • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 10. Les manipulations DOM en JS • el.offsetLeft …, el.clientLeft…, el. getBoundingClientRect()… • el.scrollTo(), el.scrollTop, w.innerHeight • el.getComputedStyle() • evt.layerX, evt.offsetX • SVG.getCharNumAtPosition(), SVG.getNumberOfChars() jQuery.animate() utilise tout cela !
  • 11. Animation prédictible ? JS quasi inutile • On trash jQuery.animate • Pré-calcul des styles • JS se limite à ajouter / supprimer des classes El1.addClass(‘disappear-to-left’) El2.addClass(‘appear-from-right’)
  • 12. Animation prédictible : transition CSS .elements { transition-property : left; transition-timing-function: cubic- bezier(0,0,0.25,1); transition-duration : 350 ms; left: 600px; } .appear-from-right { left: 0; } .disappear-to-left { left: -600px; }
  • 13. Transitions CSS • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position – Appliquer la nouvelle position • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 14. Les propriétés qui coûtent cher Elles déclenchent Layout + Paint + Composite • top, left, width, height, float • font-*, border-*, padding-*, margin-* • display, visibility csstriggers.com
  • 15. Les propriétés qui vont bien .move-left{ transform: translateX(-600px); } .enlarge-your p { transform : scale(1.3, 0) ; } • IE 8 : ms-filters, IE9 : prefix ms- • IE10, chrome, Fx, OS mobile : standard
  • 16. CSS transform / opacity • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position – Appliquer la nouvelle position • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 17. Bonus : forcer le GPU (parfois) .move-left { transform:translate3d(-600px, 0, 0); } .enlarge-your p { transform:scale3d(1.3, 0, 0); }
  • 18. Transition + translation + GPU = <3 .elements { transition-property : transform; transition-timing-function: cubic- bezier(0,0,0.25,1); transition-duration : 350 ms; left: 600px; } .appear-from-right { transform: translate3d(-600px, 0px, 0px); } .disappear-to-left { transform: translate3d(-1200px, 0px, 0px); }
  • 19. Transition + translation + GPU = <3 • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position – Appliquer la nouvelle position • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 22. Et pour les animations imprévisibles ? • Parallax • Drag • Jeux vidéos • …
  • 23. Reprenons • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position – Appliquer la nouvelle position • Navigateur – Calculs de Layout <= optimisé en CSS – Paint des zones modifées <= optimisé en CSS – Pousser vers la carte graphique
  • 24. Récupérer la position : mise en cache • Plutôt que $(el).on(‘touchmove’, function move() { // get + set du DOM en boucle : BOOM this.style.width = (this.offsetWidth + X); } • Préférer var width = el.offsetWidth; $(el).on(‘touchmove’, function move() { // un set, et même plusieurs d’affilé : SMOOTH this.style.width = ( width += Y ); }
  • 25. Reprenons • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position – Appliquer la nouvelle position • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 26. Quand mettre à jour le DOM ? // JAMAIS setInterval( move, 16 ); // MIEUX, mais agressif et imprécis (function boucle() { setTimeout( boucle, 16); move(); }()); // AU TOP (function boucle() { requestAnimationFrame( boucle); move(); }());
  • 27. Alléger var height = el.offsetHeight, Y = 0; $(el).on(‘touchmove’, function calculateDelta() { … // Calcul séparé de Y (delta du doigt) }); requestAnimationFrame( function move() { … // check de la nécessité puis Raf(move) this.style.height = (height += Y); });
  • 28. Reprenons • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position <= dissocié – Appliquer la nouvelle position <= optimisé • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 29. Calculs lourds ? var IA = new Worker(‘game-ia.js’); var positions; IA.addEventListener(‘moves’,function(e){ positions = e.data; }); (function boucle() { requestAnimationFrame( boucle ); moveUnits( positions ); })();
  • 30. Calculs lourds ? La technique ancestrale du setTimeout( fn, 0); Universel, increvable, lisible avec le bon snippet
  • 31. Reprenons • JS : – Récupérer la position de l’élément – Calcul de la nouvelle position <= dissocié et optimisé – Appliquer la nouvelle position <= optimisé • Navigateur – Calculs de Layout – Paint des zones modifées – Pousser vers la carte graphique
  • 32. DOM : la taille compte (et la manière dont on s’en sert) DOM Monster yellowlab.tools
  • 33. Touche pas (trop) à mon DOM • Peu de requête DOM – Mise en cache des résultats en dehors des boucles • Appliquer en batchs – $el.addClass(‘error’) plutôt que $el.css – .innerHTML marche encore ! – Pas d’alternance get / set
  • 34. Apprends à faire tes sélecteurs • Natif quand tu peux : $(document.getElementById(‘id’)) VS $(‘#id’) document.querySelector(‘.item’) VS $(‘.item’).first() • Limiter l’étendue de la recherche $container.find(‘.item’) $container.find(‘ > li.item’) • Déléguer $container.on( ‘click’, ‘li’, function(){} )
  • 37. Profilers — Firefox & Firefox OS
  • 39. Profilers natifs — iOS & desktop
  • 40. Les autres • Opera : dragonfly • IE8 : profiling JS À l’instinct™ : • iOS < 7 • Navigateur Android • …
  • 41. Librairies d’animation CSS 3 • Librairies CSS: – animate.css, – Effekt.css • Librairies JS : – D3.js, – GSAP, – TweenJS, – jQuery 4
  • 42. Conclusion • JS seul est performant, merci de demander • Watch your DOM ! • Use the CSS 3 / HTML5 force Luke Je testerais, tu testeras, nous testerons …
  • 43. MERCI Jean-Pierre Vincent @theystolemynick Un audit ou une petite formation Perfs ? jp@braincracking.fr

Notas do Editor

  1. Plus rapide OK, mais à quel point ? Nvidia et sa plateforme GRID (jeu dans le cloud) : > 150 ms Facebook A/B testing sur la fréquence en Hertz en passant de en passant de 60 fps à 30 fps : scroll baisse de l’« engagement » (moins de post, moins d’ouverture de l’app …)
  2. Rumeur et test de Google, mais cela montre l’idée de Google depuis toujours.
  3. L’interface fait semblant de marcher même offline. En cas de détection offline, penser à rajouter un petit message bien technique : votre connexion est faible Ça passe par des transitions visuelles : si elles rament, c’est pire Ebay et Youtube utilisent la technique du loader discret Les applications utilisent la technique du faux layout
  4. http://engineeringblog.yelp.com/2015/01/animating-the-mobile-web.html
  5. Un peu de moins de FPS = moins d’engagement Comment amener notre milieu de gamme (Galaxy Note 1, 600€ il y a 3 ans) au niveau d’un haut de gamme
  6. Carroussel : Left de 2 images
  7. Get / set de position : demande au DOM, coûte cher. Layout : dimensions, position Paint : shadow, radius …
  8. Le simple fait de demander va bypasser le cache des valeurs déjà set, et forcer un recalcul Une liste : https://gist.github.com/paulirish/5d52fb081b3570c81e3a Liste complémentaire en SVG : http://gent.ilcore.com/2011/03/how-not-to-trigger-layout-in-webkit.html
  9. Manière plus compliquée : 1 classe pour tout le slider, mais il faut générer dynamiquement les styles De toute façon les navigateurs batchent les modifications du DOM
  10. Durée des transitions : rester sous la demie seconde, sinon ça rame même quand c’est fluide Marche partout, sans préfixes
  11. Modèle de boite : on touche un truc, tout se recalcule, parents compris En plus width et height font parfois des arrondis de pixels == bords flous
  12. translateX et Y pour left / right, margin, padding Scale pour width / height rotate, skew(X|Y), matrix(3d) …
  13. Moins de CPU, plus de RAM Certains mobiles ignorent l’option 3D pour se préserver D’autres mettent translate normal directement dans le GPU
  14. Utilisation de will-change : trop tôt pour être sur de ce que ça fait
  15. À réserver aux petites zones
  16. On a mieux séparé nos responsabilités entre la vue et le modèle pour une animation simple
  17. Yelp on va bouger les dimensions de la photo, son opacité, bouger le layout, le tout en suivant uniquement le doigt
  18. Get / set de position : demande au DOM, coûte cher. Layout et Paint réglés grâce à transform + translate, scale, opacity
  19. 1 : lecture + écriture : allers retours DOM trop fréquents Au passage, c’est le comportement par défaut de jQuery (logique pour une librairie car c’est le plus safe) X = delta du doigt depuis le dernier mouvement 2 : et en plus le navigateur peut batcher les Set successifs (4 ms) Y = delta du doigt depuis le début
  20. Récupération le moins possible Quand appliquer la nouvelle position ?
  21. setInterval demande au navigateur de rappeler quoi qu’il arrive : si une action dure plus de 16 ms, les callbacks s’empilent jusqu’à ce que la callstack sature setTimeout laisse au navigateur le temps de souffler (avec de grands chiffres), mais des frames sont ratées alors qu’elles auraient pu être honorées. Avec des petites chiffres ( 5 ms), on surconsomme le CPU. RaF : Le navigateur te rappelle lorsqu’il se sent chaud. Note que le move() se fait APRÈS le RaF
  22. Du coup on calcule la position du doigt pendant l’événement touch Mais on n’applique le style que lorsque c’est nécessaire Rajouter un petit check « if moving »
  23. IA.postMessage(); iOS, Android 4.4, IE 11 mobile, Fx (s’émule avec setTimeout 0 )
  24. MS avait proposé setImmediate, Google a dit non : non merci on préfère optimiser setTimeout 0
  25. Calculs : séparé de l’animation, au touch ou via Web Workers / setTimeout Nouvelle position : RaF
  26. Yellow Lab tools DOM Monster 5000 nœuds c’est beaucoup mais classique si on fait du RWD de bourrin
  27. Les librairies de data-binding comme Knockout et Angular font de l’atomique, mais c’est patchable React tente le mix entre changements atomiques et batchs grâce à JSX
  28. Si c’est pas ton quotidien : investis dans les outils
  29. Se branche en USB sur la machine Connu car poussé par les évangélistes Google Tutoriels et post de blog sont vite obsolète Pas super clair Il ne fait que Chrome, pas le navigateur Android
  30. http://blogs.msdn.com/b/visualstudioalm/archive/2014/04/04/diagnosing-mobile-website-issues-on-windows-phone-8-1-with-visual-studio.aspx Visual Studio 2013 + Windows Phone 8.1 Tout aussi poussé, mais meilleure ergonomie que l’outil chrome devtools
  31. USB / Wifi Mac OS obligatoire Depuis iOS 6