SlideShare a Scribd company logo
17 mei 2013Drupal is traag. Of niet?
duurzame websites
Waarom is snelheid belangrijk?
• Google:
100 ms = 10% minder traffic,
500 ms = 20% minder traffic
• Amazon: elke 100ms trager = 1% minder sales
• Google rankt snelle sites hoger
• De meeste rendertijd in de
front-end (JavaScript, CSS3)
Begin met de 80%
duurzame websites
CSS bovenaan & JS onderaan
• CSS blokkeert het renderen, zet deze dus in je <head>
• JS blokkeert downloaden, zet deze dus voor je </body>
• In Drupal kan dit vrij makkelijk met hook_js_alter en hook_css_alter.
duurzame websites
CSS bovenaan & JS onderaan
• CSS blokkeert het renderen, zet deze dus in je <head>
• JS blokkeert downloaden, zet deze dus voor je </body>
• In Drupal kan dit vrij makkelijk met hook_js_alter en hook_css_alter.
• Toch hier bezig? Dan gelijk ook minder code!
duurzame websites
Maak minder requests
• CSS & Javascript aggregatie aanzetten
• Lazy loading (content pas laden als het in beeld komt).
• Gebruik Image Sprites
duurzame websites
Sprites op Hero.nl
• 47 ingredienten
• Samengevoegd
tot 1 afbeelding
• Daarnaast nog 1
sprite voor icons
duurzame websites
Gebruik parallellisatie
• Gebruik een extra domein (of meer) voor je assets.
assets.domein.nl, static.domein.nl of beter: www.imgdomain.com
• Let wel: een DNS lookup is traag (20 - 120 ms).
Dit hoeft gelukkig maar 1x per domein.
• CSS daarom vanaf je hoofddomein (geen extra DNS lookup).
• Handvat: ~20 assets per domein.
• Let op cookies ivm caching. Serveer assets van een cookie-less
domein.
duurzame websites
Leg je focus op de CSS
CSS is een bottleneck (het blokkeert rendering), dus:
• Gooi onnodige CSS weg (hook_css_alter() of in je theme settings)
• Niet vanaf een CDN versturen, maar van zelfde domein als HTML
• Zet het in de <HEAD>
• Concatenate het:
$conf['preprocess_css'] = 1;
• Gzip (standaard Drupal) en minify het:
SASS: output_style = :compressed
• Cache maximaal!
duurzame websites
DNS prefetching
Externe scripts? Gebruik DNS prefetching:
<link rel="dns-prefetch" href="//widget.externdomein.com">
Kan ook voor assets handig zijn in geval van afbeeldingen:
<div class=”hidden”><img src=”sprite” alt=”” /></div>
<link rel="prefetch" href="sprite.png">
duurzame websites
Progressive JPG’s
• Veel belangrijker dan de exacte laadtijd is de beleving van de
gebruiker. Beter een wazig plaatje dan een half plaatje.
• Of nog beter: helemaal geen plaatjes (SVG, CSS)
duurzame websites
Progressive JPG’s
• Veel belangrijker dan de exacte laadtijd is de beleving van de
gebruiker. Beter een wazig plaatje dan een half plaatje.
• Of nog beter: helemaal geen plaatjes (SVG, CSS)
duurzame websites
Hoe meet je het?
Google Page Speed en Firebug / Chrome DEV Tools
duurzame websites
Caching in Drupal: settings
• Page caching zet
max-age headers.
• Page caching
voor uitgelogd
• 10 min cache
lifetime altijd aan
• Block caching
wordt genegeerd
bij page caching
duurzame websites
Caching in Drupal: code
Voor caching binnen 1 page request.
Wordt bijvoorbeeld gebruikt in node_load().
function my_module_function() {
$my_data = &drupal_static(__FUNCTION__);
if (!isset($my_data)) {
// Hier een zware berekening.
}
return $my_data;
}
duurzame websites
Caching in Drupal: code
Database-caching (tot een cache clear).
function my_module_function() {
$my_data = &drupal_static(__FUNCTION__);
if (!isset($my_data)) {
if ($cache = cache_get('my_module_data')) {
$my_data = $cache->data;
}
else {
// Zware berekening.
cache_set('my_module_data', $my_data,'cache');
}
}
return $my_data;
}
duurzame websites
Caching in Drupal: code
Caching in een render array.
$content['my_content'] = array(
'#cache' => array(
'cid' => 'my_module_data',
'bin' => 'cache',
'expire' => time() + 360,
),
);
duurzame websites
Back-end performance
• Apache: mod_php of FastCGI ipv CGI.
.htaccess settings in httpd.conf opslaan
• Cache PHP code met APC/eAccellerator
• MySQL tuning: MySQL query cache, persistent DB connections
http://drupal.org/node/51263
• Varnish/Squid/Boost voor anonieme bezoekers
• Authenticated User Page Caching (Authcache) voor ingelogde
bezoekers
duurzame websites
Nog twee tips
Specifieke selectors in CSS
.selector is sneller dan .body .page .selector
DOM aanpassen met jQuery is traag
Doe dit zo min mogelijk. Beter eerst je aanpassingen in JS doen en ineens wegschrijven
naar de DOM.
duurzame websites
Leesvoer
• https://developers.google.com/speed/docs/best-practices/request
• http://developer.yahoo.com/performance/rules.html
• http://csswizardry.com/2013/01/front-end-performance-for-web-
designers-and-front-end-developers/
Vragen?
baris@limoengroen.nl | @BarisW | www.limoengroen.nl | 020 - 737 1880

More Related Content

Similar to Drupal is Traag: handvatten voor een snelle site.

Refresher HTML(5) and CSS(3) - CC FE & UX
Refresher HTML(5) and CSS(3) - CC FE & UXRefresher HTML(5) and CSS(3) - CC FE & UX
Refresher HTML(5) and CSS(3) - CC FE & UX
JWORKS powered by Ordina
 
Presentatie drupal sass
Presentatie drupal sassPresentatie drupal sass
Presentatie drupal sass
Kees
 
Best Practice: Joomla! templating
Best Practice: Joomla! templatingBest Practice: Joomla! templating
Best Practice: Joomla! templating
Hans Kuijpers
 
Drupal6 Css Theming
Drupal6 Css ThemingDrupal6 Css Theming
Drupal6 Css Theming
Roy Scholten
 
Joomla Website optimaliseren - jug073 augustus 2018
Joomla Website optimaliseren - jug073 augustus 2018Joomla Website optimaliseren - jug073 augustus 2018
Joomla Website optimaliseren - jug073 augustus 2018
Hans Kuijpers
 
NL Front-end Guidelines (HTML,CSS,Javascript)
NL Front-end Guidelines (HTML,CSS,Javascript)NL Front-end Guidelines (HTML,CSS,Javascript)
NL Front-end Guidelines (HTML,CSS,Javascript)
Mathijs Jong
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknetHans Rossel
 
Joomladagen 2015 Joomla Performance
Joomladagen 2015 Joomla PerformanceJoomladagen 2015 Joomla Performance
Joomladagen 2015 Joomla Performance
Simon Kloostra
 
Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010
Remkus de Vries
 
Speeding up WordPress
Speeding up WordPressSpeeding up WordPress
Speeding up WordPress
Brecht Ryckaert
 
Magento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMagento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beheren
Michel Doens
 
Hoe beheer je custom database tabellen in WordPress
Hoe beheer je custom database tabellen in WordPressHoe beheer je custom database tabellen in WordPress
Hoe beheer je custom database tabellen in WordPress
Wim Van Cauwenbergh
 
Website-tool: CMS of Framework
Website-tool: CMS of FrameworkWebsite-tool: CMS of Framework
Website-tool: CMS of Framework
Nils Breunese
 
Presentatie webrichtlijnen
Presentatie webrichtlijnenPresentatie webrichtlijnen
Presentatie webrichtlijnen
Tjitte Folkertsma
 
Magento webwinkel starten & optimaliseren
Magento webwinkel starten & optimaliserenMagento webwinkel starten & optimaliseren
Magento webwinkel starten & optimaliseren
Michel Doens
 
Logeion2007
Logeion2007Logeion2007
Logeion2007
Stephen Hay
 
Een webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessieEen webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessie
Combell NV
 
Een goede DEV omgeving opzetten
Een goede DEV omgeving opzettenEen goede DEV omgeving opzetten
Een goede DEV omgeving opzetten
Matthias Vandermaesen
 
Drupal 7 Theming
Drupal 7 ThemingDrupal 7 Theming
Drupal 7 ThemingHans Rossel
 

Similar to Drupal is Traag: handvatten voor een snelle site. (20)

Refresher HTML(5) and CSS(3) - CC FE & UX
Refresher HTML(5) and CSS(3) - CC FE & UXRefresher HTML(5) and CSS(3) - CC FE & UX
Refresher HTML(5) and CSS(3) - CC FE & UX
 
Presentatie drupal sass
Presentatie drupal sassPresentatie drupal sass
Presentatie drupal sass
 
Best Practice: Joomla! templating
Best Practice: Joomla! templatingBest Practice: Joomla! templating
Best Practice: Joomla! templating
 
Drupal6 Css Theming
Drupal6 Css ThemingDrupal6 Css Theming
Drupal6 Css Theming
 
Joomla Website optimaliseren - jug073 augustus 2018
Joomla Website optimaliseren - jug073 augustus 2018Joomla Website optimaliseren - jug073 augustus 2018
Joomla Website optimaliseren - jug073 augustus 2018
 
NL Front-end Guidelines (HTML,CSS,Javascript)
NL Front-end Guidelines (HTML,CSS,Javascript)NL Front-end Guidelines (HTML,CSS,Javascript)
NL Front-end Guidelines (HTML,CSS,Javascript)
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknet
 
Joomladagen 2015 Joomla Performance
Joomladagen 2015 Joomla PerformanceJoomladagen 2015 Joomla Performance
Joomladagen 2015 Joomla Performance
 
Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010Presentatie WordPress Theme Frameworks WordCamp NL 2010
Presentatie WordPress Theme Frameworks WordCamp NL 2010
 
Speeding up WordPress
Speeding up WordPressSpeeding up WordPress
Speeding up WordPress
 
Magento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMagento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beheren
 
Hoe beheer je custom database tabellen in WordPress
Hoe beheer je custom database tabellen in WordPressHoe beheer je custom database tabellen in WordPress
Hoe beheer je custom database tabellen in WordPress
 
Website-tool: CMS of Framework
Website-tool: CMS of FrameworkWebsite-tool: CMS of Framework
Website-tool: CMS of Framework
 
Drupal7 Theming
Drupal7 ThemingDrupal7 Theming
Drupal7 Theming
 
Presentatie webrichtlijnen
Presentatie webrichtlijnenPresentatie webrichtlijnen
Presentatie webrichtlijnen
 
Magento webwinkel starten & optimaliseren
Magento webwinkel starten & optimaliserenMagento webwinkel starten & optimaliseren
Magento webwinkel starten & optimaliseren
 
Logeion2007
Logeion2007Logeion2007
Logeion2007
 
Een webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessieEen webshop bouwen in WooCommerce – advanced sessie
Een webshop bouwen in WooCommerce – advanced sessie
 
Een goede DEV omgeving opzetten
Een goede DEV omgeving opzettenEen goede DEV omgeving opzetten
Een goede DEV omgeving opzetten
 
Drupal 7 Theming
Drupal 7 ThemingDrupal 7 Theming
Drupal 7 Theming
 

More from LimoenGroen

Managing Drupal interface translation
Managing Drupal interface translationManaging Drupal interface translation
Managing Drupal interface translation
LimoenGroen
 
Drupal Quick wins for an accessible website
Drupal Quick wins for an accessible websiteDrupal Quick wins for an accessible website
Drupal Quick wins for an accessible website
LimoenGroen
 
Open drupal DrupalCamp Gent 2018
Open drupal DrupalCamp Gent 2018Open drupal DrupalCamp Gent 2018
Open drupal DrupalCamp Gent 2018
LimoenGroen
 
24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)
24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)
24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)
LimoenGroen
 
The Myths, Musts and Migraines of Migrations - DrupalJam 2018
The Myths, Musts and Migraines of Migrations - DrupalJam 2018The Myths, Musts and Migraines of Migrations - DrupalJam 2018
The Myths, Musts and Migraines of Migrations - DrupalJam 2018
LimoenGroen
 
Being a better mentor
Being a better mentorBeing a better mentor
Being a better mentor
LimoenGroen
 
Continuous Integration & Drupal
Continuous Integration & DrupalContinuous Integration & Drupal
Continuous Integration & Drupal
LimoenGroen
 

More from LimoenGroen (7)

Managing Drupal interface translation
Managing Drupal interface translationManaging Drupal interface translation
Managing Drupal interface translation
 
Drupal Quick wins for an accessible website
Drupal Quick wins for an accessible websiteDrupal Quick wins for an accessible website
Drupal Quick wins for an accessible website
 
Open drupal DrupalCamp Gent 2018
Open drupal DrupalCamp Gent 2018Open drupal DrupalCamp Gent 2018
Open drupal DrupalCamp Gent 2018
 
24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)
24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)
24Kitchen, the no. 1 platform for food lovers (Showcase LimoenGroen)
 
The Myths, Musts and Migraines of Migrations - DrupalJam 2018
The Myths, Musts and Migraines of Migrations - DrupalJam 2018The Myths, Musts and Migraines of Migrations - DrupalJam 2018
The Myths, Musts and Migraines of Migrations - DrupalJam 2018
 
Being a better mentor
Being a better mentorBeing a better mentor
Being a better mentor
 
Continuous Integration & Drupal
Continuous Integration & DrupalContinuous Integration & Drupal
Continuous Integration & Drupal
 

Drupal is Traag: handvatten voor een snelle site.

  • 1. 17 mei 2013Drupal is traag. Of niet?
  • 2. duurzame websites Waarom is snelheid belangrijk? • Google: 100 ms = 10% minder traffic, 500 ms = 20% minder traffic • Amazon: elke 100ms trager = 1% minder sales • Google rankt snelle sites hoger • De meeste rendertijd in de front-end (JavaScript, CSS3)
  • 4. duurzame websites CSS bovenaan & JS onderaan • CSS blokkeert het renderen, zet deze dus in je <head> • JS blokkeert downloaden, zet deze dus voor je </body> • In Drupal kan dit vrij makkelijk met hook_js_alter en hook_css_alter.
  • 5. duurzame websites CSS bovenaan & JS onderaan • CSS blokkeert het renderen, zet deze dus in je <head> • JS blokkeert downloaden, zet deze dus voor je </body> • In Drupal kan dit vrij makkelijk met hook_js_alter en hook_css_alter. • Toch hier bezig? Dan gelijk ook minder code!
  • 6. duurzame websites Maak minder requests • CSS & Javascript aggregatie aanzetten • Lazy loading (content pas laden als het in beeld komt). • Gebruik Image Sprites
  • 7. duurzame websites Sprites op Hero.nl • 47 ingredienten • Samengevoegd tot 1 afbeelding • Daarnaast nog 1 sprite voor icons
  • 8. duurzame websites Gebruik parallellisatie • Gebruik een extra domein (of meer) voor je assets. assets.domein.nl, static.domein.nl of beter: www.imgdomain.com • Let wel: een DNS lookup is traag (20 - 120 ms). Dit hoeft gelukkig maar 1x per domein. • CSS daarom vanaf je hoofddomein (geen extra DNS lookup). • Handvat: ~20 assets per domein. • Let op cookies ivm caching. Serveer assets van een cookie-less domein.
  • 9. duurzame websites Leg je focus op de CSS CSS is een bottleneck (het blokkeert rendering), dus: • Gooi onnodige CSS weg (hook_css_alter() of in je theme settings) • Niet vanaf een CDN versturen, maar van zelfde domein als HTML • Zet het in de <HEAD> • Concatenate het: $conf['preprocess_css'] = 1; • Gzip (standaard Drupal) en minify het: SASS: output_style = :compressed • Cache maximaal!
  • 10. duurzame websites DNS prefetching Externe scripts? Gebruik DNS prefetching: <link rel="dns-prefetch" href="//widget.externdomein.com"> Kan ook voor assets handig zijn in geval van afbeeldingen: <div class=”hidden”><img src=”sprite” alt=”” /></div> <link rel="prefetch" href="sprite.png">
  • 11. duurzame websites Progressive JPG’s • Veel belangrijker dan de exacte laadtijd is de beleving van de gebruiker. Beter een wazig plaatje dan een half plaatje. • Of nog beter: helemaal geen plaatjes (SVG, CSS)
  • 12. duurzame websites Progressive JPG’s • Veel belangrijker dan de exacte laadtijd is de beleving van de gebruiker. Beter een wazig plaatje dan een half plaatje. • Of nog beter: helemaal geen plaatjes (SVG, CSS)
  • 13. duurzame websites Hoe meet je het? Google Page Speed en Firebug / Chrome DEV Tools
  • 14. duurzame websites Caching in Drupal: settings • Page caching zet max-age headers. • Page caching voor uitgelogd • 10 min cache lifetime altijd aan • Block caching wordt genegeerd bij page caching
  • 15. duurzame websites Caching in Drupal: code Voor caching binnen 1 page request. Wordt bijvoorbeeld gebruikt in node_load(). function my_module_function() { $my_data = &drupal_static(__FUNCTION__); if (!isset($my_data)) { // Hier een zware berekening. } return $my_data; }
  • 16. duurzame websites Caching in Drupal: code Database-caching (tot een cache clear). function my_module_function() { $my_data = &drupal_static(__FUNCTION__); if (!isset($my_data)) { if ($cache = cache_get('my_module_data')) { $my_data = $cache->data; } else { // Zware berekening. cache_set('my_module_data', $my_data,'cache'); } } return $my_data; }
  • 17. duurzame websites Caching in Drupal: code Caching in een render array. $content['my_content'] = array( '#cache' => array( 'cid' => 'my_module_data', 'bin' => 'cache', 'expire' => time() + 360, ), );
  • 18. duurzame websites Back-end performance • Apache: mod_php of FastCGI ipv CGI. .htaccess settings in httpd.conf opslaan • Cache PHP code met APC/eAccellerator • MySQL tuning: MySQL query cache, persistent DB connections http://drupal.org/node/51263 • Varnish/Squid/Boost voor anonieme bezoekers • Authenticated User Page Caching (Authcache) voor ingelogde bezoekers
  • 19. duurzame websites Nog twee tips Specifieke selectors in CSS .selector is sneller dan .body .page .selector DOM aanpassen met jQuery is traag Doe dit zo min mogelijk. Beter eerst je aanpassingen in JS doen en ineens wegschrijven naar de DOM.
  • 20. duurzame websites Leesvoer • https://developers.google.com/speed/docs/best-practices/request • http://developer.yahoo.com/performance/rules.html • http://csswizardry.com/2013/01/front-end-performance-for-web- designers-and-front-end-developers/
  • 21. Vragen? baris@limoengroen.nl | @BarisW | www.limoengroen.nl | 020 - 737 1880