High Performance
Drupal Web Sites

360°
jbguerraz@skilld.fr
Who's that punk ?!
●

●

●

A French nerd !
Used to manage complex IT projects for the
last 10 years
And many more nights ...
Summary








Cache
Upload & Download
Browser rendering
Compression
Drupal pages architecture
Analyze
Cache
What should we cache ?
EVERY POSSIBLE THING !!!
●

PHP (opcode)

●

Computations (functions results)

●

Datas (view...
Cache
How should we cache ?
PHP (opcode) :
●
●

// allocate one segment of 32Mb
apc.shm_segments=1
apc.shm_size=32
// do n...
Cache
How should we cache ?
function mymodule_complex_calculation_crazy_cache() {
static $cache ;
Computations (functions ...
Cache
How should we cache ?
Datas (views, DB requests) :
●

Views cache

●

Views per user cache

●

Note :
A custom cache...
Cache
How should we cache ?
Entities (nodes, comments, taxonomy terms,
user profiles,…) :
Entity cache
Entity cache
second...
Cache
How should we cache ?
Images (imagecache/styles) :
●

ImageCache

●

ImageCache External

jbguerraz@skilld.fr
Cache
How should we cache ?
HTML (page, block, panel, pane, views) :
●

Panels Page Cache

●

Panels Hash Cache

●

Varnis...
Cache
How should we cache ?
Any static ressource (CSS, JS, SWF, SVG,
PDF, ZIP, Video, Sound, …) :
●

Varnish

●

Nginx

●
...
Cache
What cache backends ?

http://janezurevc.name/static/bcn_cache

jbguerraz@skilld.fr
Cache
What about cache invalidation ?
●

Cache actions

●

Cachetags

●

Views content cache

●

Expire

●

Entity cache f...
Upload & Download
Cookie free domains
CDN module in order to use static resources
dedicated domain(s) which differ from ma...
Upload & Download
Aggregates
JS (Advanced aggregate)
●
CSS (Advanced aggregate)
●
Images & CSS (CSS
embeded image)
●
Image...
Upload & Download
Parrallelization
CDN (URL
sharding)
●
Head.js
●
Yepnopejs
●

CSS

(Interesting but not yet drupal integr...
Browser rendering
JS
●

Rendering sequence : request as soon as it
parse
●

●

JS in footer scope

Head.js / lab.js (defer...
Browser rendering
CSS
Translate3D, no DOM position change
●
Pay attention to selectors performances ! No
CSS3 selectors (g...
Compression
What should we compress ?
Images
●
CSS
●
JS
●
HTML
●
«Any» static file
●

jbguerraz@skilld.fr
Compression
How should we compress ?
Images
●

Imageapi optimize
●

jpegtran

●

advpng

jbguerraz@skilld.fr
Compression
How should we compress ?
CSS
Advagg CSS compress
●
CSS Compressor
●

●

●

faster than CSSTidy

gzip

jbguerra...
Compression
How should we compress ?
JS
Advagg JS compress
●
JSMin
●

●

●

faster than JSMin+

Gzip

jbguerraz@skilld.fr
Compression
How should we compress ?
HTML
●

Gzip

jbguerraz@skilld.fr
Compression
How should we compress ?
Any static files
●

Gzip

jbguerraz@skilld.fr
Drupal pages architecture
How to build a performant page ?
USE AS FEW MODULES AS POSSIBLE !
Search_api (solr, mongo)
●Mong...
Drupal pages architecture
Why homogeneity maters ?
Blocks, panes, pick one !
One single way of managing « blocks » helps
u...
Analyze
Browser level
Gtmetrix.com
●
Yslow
●
Firebug
●
Chrome / Safari developer tools
●
Whichloadsfaster.com
●

jbguerraz...
Analyze
Drupal level
Devel
●
Watchdog (redirected to syslog if needed on live
server)
●

jbguerraz@skilld.fr
Analyze
PHP level
FirePHP / ChromePHP
●
Xhprof (eventually in addition to Xdebug)
●
PHP error log
●
PHP-FPM slow logs
●
My...
Analyze
System level
strace
●
tcpdump & wireshark
●

jbguerraz@skilld.fr
Spasibo bolshoe !
Your time now, any question ?

Wanna get these slides ?
Search for jbguerraz on Slideshare ;)

jbguerraz...
Upcoming SlideShare
Loading in …5
×

Drupal Camp Kiev 2012 - High Performance Drupal Web Sites

3,169
-1

Published on

Published in: Technology, Design
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,169
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
9
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide
  • {}
  • Drupal Camp Kiev 2012 - High Performance Drupal Web Sites

    1. 1. High Performance Drupal Web Sites 360° jbguerraz@skilld.fr
    2. 2. Who's that punk ?! ● ● ● A French nerd ! Used to manage complex IT projects for the last 10 years And many more nights on performances issues ● ... :) ... who just created his own company
    3. 3. Summary       Cache Upload & Download Browser rendering Compression Drupal pages architecture Analyze
    4. 4. Cache What should we cache ? EVERY POSSIBLE THING !!! ● PHP (opcode) ● Computations (functions results) ● Datas (views, DB requests) ● Entities & Fields (nodes, comments, taxonomy terms, user profiles,…) ● Images (imagecache/styles) ● HTML (page, block, panel, pane, views) ● Any static ressource (CSS, JS, SWF, SVG, PDF, ZIP, Video, Sound, …) jbguerraz@skilld.fr
    5. 5. Cache How should we cache ? PHP (opcode) : ● ● // allocate one segment of 32Mb apc.shm_segments=1 apc.shm_size=32 // do not check if php file was updated apc.stat= 0 APC Eaccelerator (a bit faster, seg fault) jbguerraz@skilld.fr // never expire apc.ttl = 0 // use kernel anonymous memory apc.mmap_file_mask = /dev/zero.
    6. 6. Cache How should we cache ? function mymodule_complex_calculation_crazy_cache() { static $cache ; Computations (functions results) : if (isset($cache)) { return $cache ; } ($cache = &drupal_static(__FUNCTION__)) { ● drupal_static (sometime static if big ifreturn $cache; amount of calls within a page load) } if ($cache = cache_get('my_cache_item', 'my_cache_bin')) { $cache = $cache->data; } ● cache_set / cache_get (use your own else { heavy calculations that kills bin if lot of data to store and/or need // some = complex_calculation(); kitten $cache cache_set('my_cache_item', $cache, 'my_cache_bin'); more control over your cache) } return $cache ; } jbguerraz@skilld.fr
    7. 7. Cache How should we cache ? Datas (views, DB requests) : ● Views cache ● Views per user cache ● Note : A custom cache bin require, at module install, to create a new cache table using the same schema as core cache tables (see table below). Copy/paste from : includes/system.install Field Type Null cid Own cache bin for DB requests (if somehow there is a good reason to request DB directly) varchar(255) no data longblob yes expire int no created int no headers text yes serialized smallint jbguerraz@skilld.fr no
    8. 8. Cache How should we cache ? Entities (nodes, comments, taxonomy terms, user profiles,…) : Entity cache Entity cache seconds ● Load 1 000 users 50 45 40 35 30 25 20 15 10 5 0 First load Next loads No entity cache jbguerraz@skilld.fr Entity cache
    9. 9. Cache How should we cache ? Images (imagecache/styles) : ● ImageCache ● ImageCache External jbguerraz@skilld.fr
    10. 10. Cache How should we cache ? HTML (page, block, panel, pane, views) : ● Panels Page Cache ● Panels Hash Cache ● Varnish ● Varnish ESI jbguerraz@skilld.fr
    11. 11. Cache How should we cache ? Any static ressource (CSS, JS, SWF, SVG, PDF, ZIP, Video, Sound, …) : ● Varnish ● Nginx ● CDN far-future jbguerraz@skilld.fr
    12. 12. Cache What cache backends ? http://janezurevc.name/static/bcn_cache jbguerraz@skilld.fr
    13. 13. Cache What about cache invalidation ? ● Cache actions ● Cachetags ● Views content cache ● Expire ● Entity cache flusher jbguerraz@skilld.fr
    14. 14. Upload & Download Cookie free domains CDN module in order to use static resources dedicated domain(s) which differ from main domain (for instance, static.mysite.com) $cookie_domain have to be set to main domain in settings.php (for instance www.mysite.com) jbguerraz@skilld.fr
    15. 15. Upload & Download Aggregates JS (Advanced aggregate) ● CSS (Advanced aggregate) ● Images & CSS (CSS embeded image) ● Images (spritesheets) ● jbguerraz@skilld.fr Note : Sprites are now obselete, use CSS embeded image instead (for IE, images <32Kb can be embeded)
    16. 16. Upload & Download Parrallelization CDN (URL sharding) ● Head.js ● Yepnopejs ● CSS (Interesting but not yet drupal integrated) JS jbguerraz@skilld.fr
    17. 17. Browser rendering JS ● Rendering sequence : request as soon as it parse ● ● JS in footer scope Head.js / lab.js (defer) jbguerraz@skilld.fr
    18. 18. Browser rendering CSS Translate3D, no DOM position change ● Pay attention to selectors performances ! No CSS3 selectors (great but slow) ● Avoid blinking > no JS to hide an element on load, hide by CSS and show from JS (perception matters!) ● jbguerraz@skilld.fr
    19. 19. Compression What should we compress ? Images ● CSS ● JS ● HTML ● «Any» static file ● jbguerraz@skilld.fr
    20. 20. Compression How should we compress ? Images ● Imageapi optimize ● jpegtran ● advpng jbguerraz@skilld.fr
    21. 21. Compression How should we compress ? CSS Advagg CSS compress ● CSS Compressor ● ● ● faster than CSSTidy gzip jbguerraz@skilld.fr
    22. 22. Compression How should we compress ? JS Advagg JS compress ● JSMin ● ● ● faster than JSMin+ Gzip jbguerraz@skilld.fr
    23. 23. Compression How should we compress ? HTML ● Gzip jbguerraz@skilld.fr
    24. 24. Compression How should we compress ? Any static files ● Gzip jbguerraz@skilld.fr
    25. 25. Drupal pages architecture How to build a performant page ? USE AS FEW MODULES AS POSSIBLE ! Search_api (solr, mongo) ●Mongodb ●Redis ●Memcache ●Elysia cron ● Panels ●Panels everywhere ●Views ●Rules ●Entities ● jbguerraz@skilld.fr
    26. 26. Drupal pages architecture Why homogeneity maters ? Blocks, panes, pick one ! One single way of managing « blocks » helps using ESI caching for instance; it also makes easier the cache invalidation management for these «blocks». Keep it simple : one API to implement jbguerraz@skilld.fr
    27. 27. Analyze Browser level Gtmetrix.com ● Yslow ● Firebug ● Chrome / Safari developer tools ● Whichloadsfaster.com ● jbguerraz@skilld.fr
    28. 28. Analyze Drupal level Devel ● Watchdog (redirected to syslog if needed on live server) ● jbguerraz@skilld.fr
    29. 29. Analyze PHP level FirePHP / ChromePHP ● Xhprof (eventually in addition to Xdebug) ● PHP error log ● PHP-FPM slow logs ● MySQL Slow query logs ● jbguerraz@skilld.fr
    30. 30. Analyze System level strace ● tcpdump & wireshark ● jbguerraz@skilld.fr
    31. 31. Spasibo bolshoe ! Your time now, any question ? Wanna get these slides ? Search for jbguerraz on Slideshare ;) jbguerraz@skilld.fr
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×