High PerformanceDrupal Web Sites     360°      jbguerraz@skilld.fr
Whos that punk ?!●    A French nerd !●   Used to manage complex IT projects for the    last 10 years●    And many more nig...
Summary    Cache    Upload & Download    Browser rendering    Compression    Drupal pages architecture    Analyze
CacheWhat should we cache ?                            EVERY POSSIBLE THING !!!●   PHP (opcode)●   Computations (functions...
CacheHow should we cache ?PHP (opcode) :                                // allocate one segment of 32Mb                   ...
CacheHow should we cache ?                                         function mymodule_complex_calculation_crazy_cache() {Co...
Cache                                                 Note :How should we cache ?                            A custom cach...
CacheHow should we cache ?Entities (nodes, comments, taxonomy terms, user profiles,…) :             Entity cache          ...
CacheHow should we cache ?Images (imagecache/styles) :●    ImageCache●    ImageCache External                    jbguerraz...
CacheHow should we cache ?HTML (page, block, panel, pane, views) :●    Panels Page Cache●    Panels Hash Cache●    Varnish...
CacheHow should we cache ?Any static ressource (CSS, JS, SWF, SVG, PDF, ZIP, Video, Sound, …) :●    Varnish●    Nginx●    ...
CacheWhat cache backends ?             http://janezurevc.name/static/bcn_cache                    jbguerraz@skilld.fr
CacheWhat about cache invalidation ?●    Cache actions●    Cachetags●    Views content cache●    Expire●    Entity cache f...
Upload & DownloadCookie free domainsCDN module in order to use static resources dedicated domain(s) which differ from main...
Upload & DownloadAggregates●  JS (Advanced aggregate)                                        Note :●  CSS (Advanced aggreg...
Upload & DownloadParrallelization●  CDN (URL  sharding)●  Head.js                                                         ...
Browser renderingJS●    Rendering sequence : request as soon as it    parse       ●           JS in footer scope●    Head....
Browser renderingCSS●  Translate3D, no DOM position change●  Pay attention to selectors performances ! No  CSS3 selectors ...
CompressionWhat should we compress ?●  Images●  CSS●  JS●  HTML●  «Any» static file                       jbguerraz@skilld...
CompressionHow should we compress ?Images●    Imageapi optimize       ●           jpegtran       ●           advpng       ...
CompressionHow should we compress ?CSS●  Advagg CSS compress●  CSS Compressor       ●           faster than CSSTidy●    gz...
CompressionHow should we compress ?JS●  Advagg JS compress●  JSMin       ●           faster than JSMin+●    Gzip          ...
CompressionHow should we compress ?HTML●    Gzip                jbguerraz@skilld.fr
CompressionHow should we compress ?Any static files●    Gzip                    jbguerraz@skilld.fr
Drupal pages architectureHow to build a performant page ?      USE AS FEW MODULES AS POSSIBLE !  ●Search_api (solr, mongo)...
Drupal pages architectureWhy homogeneity maters ?           Blocks, panes, pick one !One single way of managing « blocks »...
AnalyzeBrowser level●  Gtmetrix.com●  Yslow●  Firebug●  Chrome / Safari developer tools●  Whichloadsfaster.com            ...
AnalyzeDrupal level●  Devel●  Watchdog (redirected to syslog if needed on live  server)                    jbguerraz@skill...
AnalyzePHP level●  FirePHP / ChromePHP●  Xhprof (eventually in addition to Xdebug)●  PHP error log●  PHP-FPM slow logs●  M...
AnalyzeSystem level●  strace●  tcpdump & wireshark                   jbguerraz@skilld.fr
Spasibo bolshoe !Your time now, any question ?         Wanna get these slides ?    Search for jbguerraz on Slideshare ;)  ...
Upcoming SlideShare
Loading in...5
×

Drupal Camp Kiev 2012 - High Performance Drupal Web Sites

2,701

Published on

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

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

No notes for slide

Drupal Camp Kiev 2012 - High Performance Drupal Web Sites

  1. 1. High PerformanceDrupal Web Sites 360° jbguerraz@skilld.fr
  2. 2. Whos 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. CacheWhat 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. CacheHow 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 // never expire apc.ttl = 0● Eaccelerator (a bit faster, // use kernel anonymous memory seg fault) apc.mmap_file_mask = /dev/zero. jbguerraz@skilld.fr
  6. 6. CacheHow should we cache ? function mymodule_complex_calculation_crazy_cache() {Computations (functions results) : static $cache ; if (isset($cache)) { return $cache ; }● drupal_static (sometime static if big if ($cache = &drupal_static(__FUNCTION__)) { return $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 { bin if lot of data to store and/or need // some = complex_calculation(); kitten $cache heavy calculations that kills more control over your cache) cache_set(my_cache_item, $cache, my_cache_bin); } return $cache ; } jbguerraz@skilld.fr
  7. 7. Cache Note :How should we cache ? 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 :Datas (views, DB requests) : includes/system.install● Views cache Field Type Null cid varchar(255) no● Views per user cache data longblob yes● Own cache bin for DB requests (if expire int no somehow there is a good reason created int no to request DB directly) headers text yes serialized smallint no jbguerraz@skilld.fr
  8. 8. CacheHow should we cache ?Entities (nodes, comments, taxonomy terms, user profiles,…) : Entity cache Load 1 000 users● Entity cache 50 45 40 35 First load 30 Next loads seconds 25 20 15 10 5 0 No entity cache Entity cache jbguerraz@skilld.fr
  9. 9. CacheHow should we cache ?Images (imagecache/styles) :● ImageCache● ImageCache External jbguerraz@skilld.fr
  10. 10. CacheHow should we cache ?HTML (page, block, panel, pane, views) :● Panels Page Cache● Panels Hash Cache● Varnish● Varnish ESI jbguerraz@skilld.fr
  11. 11. CacheHow should we cache ?Any static ressource (CSS, JS, SWF, SVG, PDF, ZIP, Video, Sound, …) :● Varnish● Nginx● CDN far-future jbguerraz@skilld.fr
  12. 12. CacheWhat cache backends ? http://janezurevc.name/static/bcn_cache jbguerraz@skilld.fr
  13. 13. CacheWhat about cache invalidation ?● Cache actions● Cachetags● Views content cache● Expire● Entity cache flusher jbguerraz@skilld.fr
  14. 14. Upload & DownloadCookie free domainsCDN 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 & DownloadAggregates● JS (Advanced aggregate) Note :● CSS (Advanced aggregate) Sprites are now obselete, use CSS embeded image instead● Images & CSS (CSS (for IE, images <32Kb can be embeded image) embeded)● Images (spritesheets) jbguerraz@skilld.fr
  16. 16. Upload & DownloadParrallelization● CDN (URL sharding)● Head.js CSS● Yepnopejs(Interesting but not yet drupal integrated) JS jbguerraz@skilld.fr
  17. 17. Browser renderingJS● Rendering sequence : request as soon as it parse ● JS in footer scope● Head.js / lab.js (defer) jbguerraz@skilld.fr
  18. 18. Browser renderingCSS● 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. CompressionWhat should we compress ?● Images● CSS● JS● HTML● «Any» static file jbguerraz@skilld.fr
  20. 20. CompressionHow should we compress ?Images● Imageapi optimize ● jpegtran ● advpng jbguerraz@skilld.fr
  21. 21. CompressionHow should we compress ?CSS● Advagg CSS compress● CSS Compressor ● faster than CSSTidy● gzip jbguerraz@skilld.fr
  22. 22. CompressionHow should we compress ?JS● Advagg JS compress● JSMin ● faster than JSMin+● Gzip jbguerraz@skilld.fr
  23. 23. CompressionHow should we compress ?HTML● Gzip jbguerraz@skilld.fr
  24. 24. CompressionHow should we compress ?Any static files● Gzip jbguerraz@skilld.fr
  25. 25. Drupal pages architectureHow to build a performant page ? USE AS FEW MODULES AS POSSIBLE ! ●Search_api (solr, mongo) ●Panels ●Mongodb ●Panels everywhere ●Redis ●Views ●Memcache ●Rules ●Elysia cron ●Entities jbguerraz@skilld.fr
  26. 26. Drupal pages architectureWhy 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. AnalyzeBrowser level● Gtmetrix.com● Yslow● Firebug● Chrome / Safari developer tools● Whichloadsfaster.com jbguerraz@skilld.fr
  28. 28. AnalyzeDrupal level● Devel● Watchdog (redirected to syslog if needed on live server) jbguerraz@skilld.fr
  29. 29. AnalyzePHP 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. AnalyzeSystem 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.

×