Php go vrooom!
Upcoming SlideShare
Loading in...5
×
 

Php go vrooom!

on

  • 1,934 views

Given at php tek 2011, a frontend to server setup tour of how to squeeze performance out of your PHP powered website.

Given at php tek 2011, a frontend to server setup tour of how to squeeze performance out of your PHP powered website.

Statistics

Views

Total Views
1,934
Views on SlideShare
1,934
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Php go vrooom! Php go vrooom! Presentation Transcript

    • PHP Go VROOOM! How to take a site from slow to go
    •  This talk is for beginners This is not “how to profile PHP” This is not “how to use HipHop” This is not how to profile your network Velma would be bored (you might be too) I will no doubt rantDisclaimer
    • PHP is NOT your problem!**95.99% of the time
    •  Client Side  IO Server Side  Database  Frameworks  Hardware Let the Lecture Begin!Why your app is slow…
    • Client SideDo you want some Expires with that?
    •  http://developer.yahoo.com/yslow/ http://code.google.com/speed/page- speed/ http://tools.pingdom.com/ http://www.fiddler2.com/fiddler2/Profile – Don’t Guess!
    •  Make it external One file – minimized and compressed (minify) Put it at the top Use sprites for images Avoid expressions No @import Use conditional tags for IE issues, not css hacks Specific Selectors Give images dimensionsCSS
    •  Make it external One file – minimized and compressed (minify) Put it at the bottom Or defer the loading completely Use a well maintained framework document.write is a bad bad thingJavascript
    •  Use the right format – png, gif or jpg Compress that image – lots of compression tools available Keep them small Scale them on the server, not with html size/width Have a small, cacheable favicon.ico Use sprites for layoutsImages
    •  Keep them small Keep them very domain specificCookies (om nom nom)
    •  Compress, compress, compress Use a CDN and/or media server Reduce DNS Lookups No 404‟s, empty img/hrefs Avoid redirects Parallelize downloads Watch external script use! (fb, google, social anything)HTTP Requests
    •  Use cache control headers! ◦ Expires ◦ Last-Modified ◦ (best) ◦ Cache-Control ◦ Etag ◦ (harder to get right) Be kind to proxies as wellClient Side Caching
    •  http://developer.yahoo.com/performance/ rules.html http://code.google.com/speed/page- speed/docs/rules_intro.html http://www.w3.org/Protocols/rfc2616/rfc2 616.html Use the GoogleReference
    • Server SetupHave you hugged your sysadmin today?
    •  Apache Bench Siege Http_Load JMeterProfile, Don’t Guess!
    •  Security Speed Some Pain (worth it) Compile your own – it‟s faster then the distros! ◦ Drop your debug data ◦ Tune to your architecture ◦ At the very least do PHP, Server, DatabaseUpgrade your Software
    • “memcache does precisely f**k all for opcode caching” – Michael MacleanThis is the #1 best way to speed up your PHP siteInstall APC (or something)
    •  Simple servers for static content Cache full pages and bypass PHP Dynamic images and CSS are a pain, find another solution CDN solutions are more affordable then ever before run a reverse proxy-cacheDon’t Use PHP and Use a CDN
    • Pick the right Tools
    •  Add more CPUs or more cores Add more RAM Use RAID or Solid State drives Network can definitely be a bottleneck – but like PHP it‟s the last thing to fix - hire a really smart guyHardware
    •  http://assets.en.oreilly.com/1/event/44/S calable%20Internet%20Architectures%20 Presentation%202.pdf http://ilia.ws/files/Moscow2010_Optimizat ion_Mistakes.pdf http://people.apache.org/~sctemme/Apco nEU2006/FR4/FR4_Performance_Up.pdf http://omniti.com/surge/2011Resources
    • DatabaseUse indexes people!
    •  Mysql – has profiler built in Postgresql – turn on logging and use analyzer on logs SQL Server – built in profiler MongoDB – built in profilerProfile – Don’t Guess!
    •  Do not guess Add indexes where needed Sometimes it‟s faster to do the work in PHP Log on the PHP side, count on the PHP side… then do it on the server side too Always try to do fewer queriesAnalyze your Queries
    •  Query Caching ◦ PHP side – cache generated queries ◦ Server side – query cache Results Caching ◦ Memcached is your friend  Libmemcached = php‟s memcached (faster, non- portable)  php sockets = php‟s memcache (slower, completely portable) ◦ File caching – sometimes IO is faster then dbCache Everything
    •  Use transactions as appropriate Normalize your data (or use nosql) Minimize connections to the db Foreign keys can be slower, use cautiouslyBest Practices are “Best” for aReason
    •  http://dev.mysql.com/doc/refman/5.0/en/ optimization.html http://wiki.postgresql.org/wiki/Performan ce_Optimization http://msdn.microsoft.com/en- us/library/ff647793.aspxResources
    • PHP Optimizationecho not print… are you kidding me?
    •  XhProf Xdebug DBG (free and pay versions) APD – older but serviceable Inclued Memtrack Scream (also in xdebug)Profile – Don’t Guess
    • “We should forget about small efficiencies,say about 97% of the time: premature optimization is the root of all evil.”- Donald Knuth“Knowing when optimization is premature defines the difference between the master engineer and the apprentice.”- Theo SchlossnagleThe Boss knows Best
    •  In-memory sessions are faster than disk or database equivalents. (mm, apc, wincache or memcache) Cache pages partially, or fully – store in memcache, have apache bypass PHP Cache any and everything Cache in layers – browser, full page, partial page, data, query results, application settingsCache
    •  Gearman it Fork it Cron it Exec it Parallelization needs communication though!Farm it out
    •  Reflection is nice – but it is VERY slow and memory heavy This kind of job is much better when handed off to C (yaml extension, for example) Writing extra code is worth the performance improvement Just because you CAN do something in PHP just like $lang doesn‟t mean that‟s the best solutionAvoid Runtime Introspection
    •  Avoid lots of stats Use an opcode cache (yes, I‟m saying it AGAIN) Try not to have too many files in a directory include_path as short as possible Use absolute pathsFile and I/O
    • “Im saying that if your autoloader is a significant fraction of the work your app does, then you are either Doing It Wrong™, or really unlikely, Doing It Very Well Indeed™ I know which I favour” -Michael MacleanBalance Speed and MaintainabilityAutoload and Includes
    •  NFS is of the devil – do not use it Errors are always created, even if you don‟t see them ◦ error_reporting(-1); @ is terrible! Set and restore error handler if you know something will spit, it‟s STILL fasterVery Bad Things
    •  „‟ is a wee bit faster than “” echo not print Don‟t use magic methods ++$i not $i++ $_SERVER[REQUEST_TIME] not time() static methods are faster $function() not call_user_func(„function‟) arrays are faster then objectsMicro Optimizations (Here be Evil)
    •  http://xdebug.org https://github.com/jokkedk/webgrind https://github.com/facebook/xhprof http://pecl.php.net/package/inclued https://github.com/eexit/Inclued http://pecl.php.net/package/scream http://pecl.php.net/package/memtrackResources
    • FrameworksSure you wrote the code faster…Trick them into running faster…
    • “You are trading „development speed‟ for „processing speed‟ … all you do is waste all day reading docs to produce a half-assed project”– Bob Majdak Jr“ORMs are great for automating the sort of query that an idiot could write, and useless for anything non-trivial.”– Greg Chiassonhttp://highscalability.com/blog/2011/5/2/stack- overflow-makes-slow-pages-100x-faster-by- simple-sql-tu.htmlORMS
    •  Remove require/include calls and use autoloader or include_all files Avoid lots of configuration in parseable files (yaml, ini, etc) Turn off Debug features Use any sort of database caching available Watch your “dispatch loops” – write something custom if you need to Watch Plugin loading of all typesFrameworks
    •  Switch to another system (lots of importers) Use a cache plugin – or two, or three Keep wordpress up to date Don‟t use a lot of plugins Don‟t use the wp-db-abstraction plugin or any other plugin doing crazy things to the core It‟s just PHP, do all the PHP things too!Wordpress
    •  Install a Cache  Install a Cache plugin plugin Limit other Plugins  Limit other Plugins in use in use Disable anonymous  Make sure sessions debugging is off in Use a simple theme production All the other PHP  Turn off statistics stuff  All the other PHP stuffDrupal, Joomla
    •  http://groups.drupal.org/high-performance http://codex.wordpress.org/WordPress_Opti mization http://www.joomlaperformance.com/ http://www.brandonsavage.net/micro- optimizations-that-dont-matter/ http://weierophinney.net/matthew/archives/ 245-Autoloading-Benchmarks.html http://framework.zend.com/manual/en/perfo rmance.html http://www.endyourif.com/optimizing- cakephp-websites/ http://trac.symfony- project.org/wiki/OptimizationResources
    • Write it in CWhen PHP actually IS the problem
    •  http://emsmith.net http://joind.in/3422 auroraeosrose@gmail.com IRC – freenode – auroraeosrose #php-gtk #coappQuestions?