Running Zend-Framework faster

What are the best ways to make Zend-Framwork run faster than Zend Optimizer?

If I remember correctly, parsing .ini files in PHP takes a long time. Therefore, I cache it (the file will not change during the request)

Are there other ways to improve ZF performance?

+6
optimization php caching zend-framework zend-optimizer
source share
4 answers

I cache my application.ini like this:

Make sure you have the following directory (cache directory): /application/data/cache

I am extending Zend_Application with My_Application , see code:

 <?php require_once 'Zend/Application.php'; class My_Application extends Zend_Application { /** * Flag used when determining if we should cache our configuration. */ protected $_cacheConfig = false; /** * Our default options which will use File caching */ protected $_cacheOptions = array( 'frontendType' => 'File', 'backendType' => 'File', 'frontendOptions' => array(), 'backendOptions' => array() ); /** * Constructor * * Initialize application. Potentially initializes include_paths, PHP * settings, and bootstrap class. * * When $options is an array with a key of configFile, this will tell the * class to cache the configuration using the default options or cacheOptions * passed in. * * @param string $environment * @param string|array|Zend_Config $options String path to configuration file, or array/Zend_Config of configuration options * @throws Zend_Application_Exception When invalid options are provided * @return void */ public function __construct($environment, $options = null) { if (is_array($options) && isset($options['configFile'])) { $this->_cacheConfig = true; // First, let check to see if there are any cache options if (isset($options['cacheOptions'])) $this->_cacheOptions = array_merge($this->_cacheOptions, $options['cacheOptions']); $options = $options['configFile']; } parent::__construct($environment, $options); } /** * Load configuration file of options. * * Optionally will cache the configuration. * * @param string $file * @throws Zend_Application_Exception When invalid configuration file is provided * @return array */ protected function _loadConfig($file) { if (!$this->_cacheConfig) return parent::_loadConfig($file); require_once 'Zend/Cache.php'; $cache = Zend_Cache::factory( $this->_cacheOptions['frontendType'], $this->_cacheOptions['backendType'], array_merge(array( // Frontend Default Options 'master_file' => $file, 'automatic_serialization' => true ), $this->_cacheOptions['frontendOptions']), array_merge(array( // Backend Default Options 'cache_dir' => APPLICATION_PATH . '/data/cache' ), $this->_cacheOptions['backendOptions']) ); $config = $cache->load('Zend_Application_Config'); if (!$config) { $config = parent::_loadConfig($file); $cache->save($config, 'Zend_Application_Config'); } return $config; } } 

And I change my index.php (in the root of public ) to:

 <?php // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** My_Application */ require_once 'My/Application.php'; // Create application, bootstrap, and run $application = new My_Application( APPLICATION_ENV, array( 'configFile' => APPLICATION_PATH . '/configs/application.ini' ) ); $application->bootstrap() ->run(); 

Reload the page and you will see the ini file cached. Good luck.

+8
source share

Passing .ini files can be a little slow, but I did not expect it to be anywhere closer to the slowest part of a typical ZF application. Without seeing any results, it seems that including multiple files (Zend_Cache_ *) may in some cases be even slower than parsing a simple .ini file. Anyway, this is only one area ...

ZF has published a good optimization guide: http://framework.zend.com/manual/en/performance.classloading.html

In short,

  • Use caching where it matters: database queries / complex operations, full page cache, etc.
  • Compression of require_once calls in favor of automatic loading according to the documentation.
  • PluginLoader cache map file / class

If you want to get a little more,

  • Skip using the Zend_Application component
  • Enable op-code cache
  • Other PHP optimization methods (profiling, caching, etc.)
+5
source share

Why did you delete your last question? I had a good link for you:

I have heard such things before, but this combination is often associated with the transition from one platform to another.

Check out this link:

http://devblog.policystat.com/php-to-django-changing-the-engine-while-the-c

0
source share

All Articles