View on GitHub

yii2-cookbook-chinese

Yii Application Development Cookbook(Third Edition)中文翻译

使用最佳实践

在本小节中,你将会看到如何配置Yii2,得到最好的性能,以及额外的创建响应式应用的原则。这些原则既是常用的也是Yii相关的。因此,我们将能使用这些原则,甚至不使用Yii2时也可以。

准备

按照官方指南http://www.yiiframework.com/doc-2.0/guide-start-installation.html的描述,使用Composer包管理器创建一个新的yii2-app-basic应用。

如何做…

  1. 更新你的PHP到最新的稳定版本。PHP的主发布版可能会带来非常大的性能提升。关掉调试模式,并设置为prod环境。这可以通过编辑web/index.php
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod');

注意:在yii2-app-advanced应用框架中,你可以使用shell命令php init,以及选择生产环境,用于加载优化的index.php和配置文件。

  1. 激活cache组件:
'components' => [
    'cache' => [
        'class' => 'yii\caching\FileCache',
    ],
],

你可以使用任何缓存存储,不只是FileCache。此外,你可以注册多个缓存应用组件,并使用Yii::$app->cacheYii::$app->cache2来获取不同的数据类型:

'components' => [
    'cache' => [
        'class' => 'yii\caching\MemCache',
        'useMemcached' => true,
    ],
    'cache2' => [
        'class' => 'yii\caching\FileCache',
    ],
],

这个框架默认在它自己的类中使用cache组件。

  1. db组件激活表schema缓存:
return [
    // ...
    'components' => [
        // ...
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=mydatabase',
            'username' => 'root',
            'password' => '',
            'enableSchemaCache' => true,
            // Optional. Default value is 3600 seconds
            'schemaCacheDuration' => 3600,
            // Optional. Default value is 'cache'
            'schemaCache' => 'cache',
        ],
    ],
];
  1. 使用纯数据,而不是ActiveRecord对象来列出元素的集合。
$categoriesArray = Categories::find()->asArray()->all();
  1. foreach中使用each()而不是all()来获取大量的结果:
foreach (Post::find()->each() as $post) {
    // ...
}
  1. 因为Composer的autoloader被用于包含大部分的第三方类文件,你应该考虑通过如下命令优化它:
composer dump-autoload -o

工作原理…

YII_DEBUG被设置为false时,Yii关闭了所有trace级别的日志,并使用较少的错误处理代码。此外,当你设置YII_ENVprod时,你的应用不会加载Yii和Debug面板模块。

设置schemaCachingDuration为一个以秒为单位的数字,允许Yii的ActiveRecord缓存数据的schema。对于生产环境,我们非常建议这样做,它会大幅提高ActiveRecord的性能。为了使它能功能,你需要正确的配置cache

'cache' => [
    'class' => 'yii\cache\FileCache',
],

激活缓存对其它Yii组件也有正面的影响。例如,Yii路由或者urlManager从cache路由开始。

当然,你可以进入到一种情况,先前的设置对于显著的提升性能没有帮助。在大部分情况下,这意味着这个应用本身是一个瓶颈,你需要更多的硬件。

参考

欲了解更多关于性能调优和缓存的信息,参考如下地址: