6

Zend Optimizer以外に、Zend-Framworkをより高速に実行するための最良の方法は何ですか?

私の記憶が正しければ、PHPでの.iniファイルの解析には長い時間がかかります。そのため、キャッシュします(リクエスト中にファイルは変更されません)

ZFのパフォーマンスを向上させる他の方法はありますか?

4

4 に答える 4

8

私は自分のapplication.iniを次のようにキャッシュします:

次のディレクトリ(キャッシュディレクトリ)があることを確認してください。/application/data/cache

私はで拡張Zend_ApplicationMy_Applicationます、コードを参照してください:

<?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's 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;
    }
}

そして、index.php(publicルート内)を次のように変更します。

<?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();

ページをリロードすると、iniファイルがキャッシュされているのがわかります。幸運を。

于 2010-10-25T16:27:40.607 に答える
5

.iniファイルの解析は少し遅いかもしれませんが、典型的なZFアプリケーションの最も遅い部分の近くにあるとは思いません。結果が表示されない場合、一連のファイル(Zend_Cache_ *)を含めると、単純な.iniファイルの解析よりもさらに遅くなる場合があります。とにかく、それはただ一つの領域です...

ZFは、最適化に関する優れたガイドを公開しています:http: //framework.zend.com/manual/en/performance.classloading.html

要するに、

  1. 重要な場所でキャッシュを利用する:データベースクエリ/複雑な操作、フルページキャッシュなど。
  2. ドキュメントに従って、自動ロードを優先してrequire_once呼び出しを削除します。
  3. キャッシュPluginLoaderファイル/クラスマップ

もう少し詳しく知りたい場合は、

  1. Zend_Applicationコンポーネントの使用をスキップする
  2. ある種のオペコードキャッシュを有効にする
  3. 他の典型的なPHP最適化方法(プロファイリング、メモリキャッシュなど)を実行します
于 2010-11-17T17:26:28.497 に答える
0

http://www.kimbs.cn/2009/06/caching-application-ini-for-zend-framework-apps/も参照してください

于 2010-11-17T07:45:22.480 に答える
0

なぜ最後の質問を削除したのですか?私はあなたのために良いリンクを持っていました:

以前にこのようなことを聞​​いたことがありますが、この組み合わせは、あるプラットフォームから別のプラットフォームへの移行に関連していることがよくあります。

このリンクを確認してください:

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

于 2010-11-18T16:31:57.947 に答える