Optimising the Zend Framework

zend-framework, zend-server

Solution

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

- take care of view rendering yourself

Try my superlimunal plugin

- it merges included classes to one long file to minimize stat calls

- get if from GitHub

- it's port from ZF2 version from EDP

- but beware - it's not tested in production yet, use with care

- measure performance gain

- there was a loss for me on slow HDD and all ZF classes in it

- try minimizing it with strip whitespace function

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.)

Problem

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

Original source

Related problems