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

Php go vrooom!



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.



Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



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.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
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?
    •  speed/ – 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
    •  rules.html speed/docs/rules_intro.html 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
    •  calable%20Internet%20Architectures%20 Presentation%202.pdf ion_Mistakes.pdf nEU2006/FR4/FR4_Performance_Up.pdf
    • 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
    •  optimization.html ce_Optimization 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)
    • 
    • 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 Chiasson 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
    •  mization optimizations-that-dont-matter/ 245-Autoloading-Benchmarks.html rmance.html cakephp-websites/ http://trac.symfony-
    • Write it in CWhen PHP actually IS the problem
    •  IRC – freenode – auroraeosrose #php-gtk #coappQuestions?