front-end performance in drupal

16
25 april 2013 Front-end performance

Upload: limoengroen

Post on 31-May-2015

1.420 views

Category:

Technology


2 download

DESCRIPTION

Backend tools als APC, Memcache en Varnish helpen natuurlijk om je site sneller te maken en die gebruiken we daarom ook graag. Echter, de kans is groot dat de meeste performanceproblemen zich bevinden in de front-end: te veel externe resources, een niet-optimale HTML opmaak en JavaScript dat op de verkeerde plek geladen wordt. Wist je dat 80 tot 90% van de laadtijd van een pagina puur front-end is? Laten we daar dan beginnen met optimaliseren!

TRANSCRIPT

Page 1: Front-end Performance in Drupal

25 april 2013Front-end performance

Page 2: Front-end Performance in Drupal

Waarom focus op front-end?

• De meeste rendertijd gebeurtin de front-end (JavaScript, CSS3)

• Google: 100 ms = 10% minder traffic,500 ms = 20% minder traffic

• Amazon: elke 100ms trager = 1% minder sales

• Google rankt snelle sites hoger

Page 3: Front-end Performance in Drupal

De basics

• Minder requestsCSS / JS aggregatie & Image sprites

• Minder codeMinify (JSHint, Speedy module) & verwijder ongebruikte CSS / JS

• Minder dataGzip compressie

• Gebruik een CDN (Content Delivery Network)

• Maximize browser caching (cache control directive)

• Stylesheets in head, JavaScript in footer (en geen inline)

Page 4: Front-end Performance in Drupal

Beginsituatie

• Geen caching

• Geen compressie

• Veel resources

• 138 requests87.3 KB, 2.63 s

Page 5: Front-end Performance in Drupal

Caching aanzetten helpt

• Caching aanzetten (settings.php)

• Al iets beter 121 requests47.8 KB, 1.32 s

>

Page 6: Front-end Performance in Drupal

Minder CSS / JS

• Gebruik hook_css_alter() en hook_js_alter()

• Verwijder ongebruikte files

• Groepeer CSS in dezelfde groep

Page 7: Front-end Performance in Drupal

JavaScript naar de footer

Modernizr script in de header en zet de andere scripts in de footer (JS_DEFAULT).

function hero_js_alter(&$javascript) { // Place the modernizr JS in the header, so the rest can be in the footer. $modernizer_script = drupal_get_path('theme', 'hero') . '/js/foundation/modernizr.foundation.js'; $javascript[$modernizer_script]['in_header'] = TRUE; foreach ($javascript as &$js) { if ($js['in_header'] != TRUE && $js['type'] != 'inline') { $js['group'] = JS_DEFAULT; $js['scope'] = 'footer'; } }}

Page 8: Front-end Performance in Drupal

Requests verminderen met sprites

• Elk ingredient heeft een eigen afbeelding. Dat zijn al 39 requests.

Page 9: Front-end Performance in Drupal

Requests verminderen met sprites

In plaats van veel losse afbeeldingen 1 grote afbeelding die alle afbeeldingen bevat

Voor:

a.button-add { background: url(button-add.png); }

a.button-add:hover { background: url(button-add-active.png); }

Na:

a.button-add { background: url(sprite.png); background-position: 0 0; }

a.button-add:hover { background-position: 0 50px; }

Page 10: Front-end Performance in Drupal

Spriting in Compass - SCSS

$ingredients-layout: horizontal;

@import "ingredients/*.png";

.product-ingredients-desktop > li {

@include ingredients-sprite('mango');

}

@each $ingredient in aardbeien, appel, banaan, etc {

&[data-id="#{$ingredient}"] {

@include ingredients-sprite-position("#{$ingredient}");

}

}

Page 11: Front-end Performance in Drupal

Spriting in Compass - CSS

.product-ingredients-desktop > li {

background: url('../images/ingredients-sa16d376cfe.png') no-repeat;

}

.product-ingredients-desktop > li {

background-position: -1750px 0;

}

.product-ingredients-desktop > li[data-id="aardbei"] {

background-position: -210px -5px;

}

.product-ingredients-desktop > li[data-id="appel"] {

background-position: -420px -5px;

}

.product-ingredients-desktop > li[data-id="banaan"] {

background-position: -630px -5px;

}

Page 12: Front-end Performance in Drupal

Spriting: het resultaat

• En weer iets sneller: 74 requests, 16.8 KB, 939 ms

Page 13: Front-end Performance in Drupal

Content Delivery Network

• Module: http://drupal.org/project/cdn

• Haal files van een server dichtbij

• Domein zet geen cookies (veel sneller)

• Veel minder requests op de webserver

75 requests, 25.0 KB, 962 ms

Page 14: Front-end Performance in Drupal

Nog twee tips

Specifieke selectors in CSS.selector is sneller dan .body .page .selector

DOM aanpassen met jQuery is traagDoe dit zo min mogelijk. Beter eerst je aanpassingen in JS doen en ineens wegschrijven naar de DOM.

Page 15: Front-end Performance in Drupal

Leesvoer

• https://developers.google.com/speed/docs/best-practices/request

• http://www.sitepoint.com/web-site-optimization-steps/

• http://developer.yahoo.com/performance/rules.html

• http://www.metaltoad.com/blog/drupal-7-taking-control-css-and-js-aggregation

Page 16: Front-end Performance in Drupal

Vragen?

[email protected] | www.limoengroen.nl | 020 - 737 1880