I'm trying to get as much performance as I can out of my application, which uses the Zend Framework.
I'm considering using the Zend Server, with APC enabled. However, I need to know a few things first.
Is there any benefit of using Zend Server + Zend Framework, or should I just use any ordinary system to host this?
Shamil
My tips for faster ZF (try from top to bottom):
Optimize include path
- zend path first
- models next
- rest at the end
Use PHP 5.5 with OPCache enabled [NEW]
- I can't stress this enough
- gains around 50%
Cache table metadata
- should be cached even if no other caching is needed
- one of our application performance improved by ~30% on Oracle server ;)
Favour viewHelpers over using action() view helper
- create view helper that access your model
- or pass only the data from model and format them with view helpers
Use classmap autoloader
- since ZF1.11
- preferably with stripped require_once calls
Minimize path stacks
- there are a lot of path stacks in ZF
- form elements
- view helpers
- action helpers
- each path stack lookup means stat call = performance loss
- default classes are more and more expensive with every path on stack
Strip require_once
- strip require_once from Zend's classes in favour of autoloading using find & sed
Favour render() over partial() view helper
- no new view instance is created
- you need to set variables outside the rendered view scope, inside the main view!
- you can also replace partialLoop() with foreach + render()
Cache anything possible
- small chunks that require lot of work and change seldomly (like dynamic menus)
- use profiler to find low-hanging fruit
- what you think is slow may not really be so slow
- cache everything that can have cache set statically
- see manual -
Zend_Locale::setCache(), Zend_Currency::setCache(), Zend_Db_Table::setDefaultMetadataCache(), configs...
Never use view helper action() or action helper actionStack()
- Never use them unless 100% needed - for example for complicated data output, but mind the performance loss they pose
- They create whole new dispatch loop and are performance killers!
Disable viewRenderer
Try my superlimunal plugin
- it merges included classes to one long file to minimize stat calls
- get if from GitHub
- measure performance gain
Server-side file minification
- It makes sense for really big files - HDD is always the bottleneck
- Even micro-optimization works fine sometimes
- classmap with all ZF classes' paths is HUGE, striping whitespace and replacing long variables with
$a
and $b
brought performance gain when having "dry" opcode cache and HDD under pressure.
Any opcode cache is of course a must have ;) (APC, ZendOptimizer, etc.)