Your SlideShare is downloading. ×
Drupal Camp Kiev 2012 - High Performance Drupal Web Sites
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Drupal Camp Kiev 2012 - High Performance Drupal Web Sites

3,034
views

Published on

Published in: Technology, Design

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • {}
  • Transcript

    • 1. High Performance Drupal Web Sites 360° jbguerraz@skilld.fr
    • 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. Summary       Cache Upload & Download Browser rendering Compression Drupal pages architecture Analyze
    • 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. 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. 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. 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. 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. Cache How should we cache ? Images (imagecache/styles) : ● ImageCache ● ImageCache External jbguerraz@skilld.fr
    • 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. 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. Cache What cache backends ? http://janezurevc.name/static/bcn_cache jbguerraz@skilld.fr
    • 13. Cache What about cache invalidation ? ● Cache actions ● Cachetags ● Views content cache ● Expire ● Entity cache flusher jbguerraz@skilld.fr
    • 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. 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. Upload & Download Parrallelization CDN (URL sharding) ● Head.js ● Yepnopejs ● CSS (Interesting but not yet drupal integrated) JS jbguerraz@skilld.fr
    • 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. 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. Compression What should we compress ? Images ● CSS ● JS ● HTML ● «Any» static file ● jbguerraz@skilld.fr
    • 20. Compression How should we compress ? Images ● Imageapi optimize ● jpegtran ● advpng jbguerraz@skilld.fr
    • 21. Compression How should we compress ? CSS Advagg CSS compress ● CSS Compressor ● ● ● faster than CSSTidy gzip jbguerraz@skilld.fr
    • 22. Compression How should we compress ? JS Advagg JS compress ● JSMin ● ● ● faster than JSMin+ Gzip jbguerraz@skilld.fr
    • 23. Compression How should we compress ? HTML ● Gzip jbguerraz@skilld.fr
    • 24. Compression How should we compress ? Any static files ● Gzip jbguerraz@skilld.fr
    • 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. 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. Analyze Browser level Gtmetrix.com ● Yslow ● Firebug ● Chrome / Safari developer tools ● Whichloadsfaster.com ● jbguerraz@skilld.fr
    • 28. Analyze Drupal level Devel ● Watchdog (redirected to syslog if needed on live server) ● jbguerraz@skilld.fr
    • 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. Analyze System level strace ● tcpdump & wireshark ● jbguerraz@skilld.fr
    • 31. Spasibo bolshoe ! Your time now, any question ? Wanna get these slides ? Search for jbguerraz on Slideshare ;) jbguerraz@skilld.fr