优化你的 PHP 环境
  • 使用最新稳定版本的 PHP 。 PHP 的主要版本可能带来显著的性能提升。
  • 启用字节码缓存 Opcache(PHP 5.5或更高版本) 或 APC (PHP 5.4或更早版本)。字节码缓存省去了每次解析和加载 PHP 脚本所带来的开销。
 
开启 Schema 缓存
Schema 缓存是一个特殊的缓存功能, 每当你使用活动记录时应该要开启这个缓存功能。如你所知, 活动记录能智能检测数据库对象的集合(例如列名、列类型、约束)而不需要手动地描述它们。 活动记录是通过执行额外的SQL查询来获得该信息。 通过启用 Schema 缓存,检索到的数据库对象的集合将被保存在缓存中并在将来的请求中重用。 要开启 Schema 缓存,需要配置一个 cache 应用组件来储存 Schema 信息, 并在 配置 中设置 yii\db\Connection::enableSchemaCache 为 true :
'components' => [
'cache'=> [
     'class'=>'yii\caching\FileCache',
],
'db'=> [
'class'=>'yii\db\Connection',
'dsn'=>'mysql:host=localhost;dbname=mydatabase',
'username'=>'root',
'password'=>'',
'enableSchemaCache'=>true,
// Duration of schema cache.
'schemaCacheDuration'=>3600,
// Name of the cache component used to store schema information
'schemaCache'=>'cache',
],
],
 
合并和压缩资源
一个Web页面可以包含很多CSS 和/或 JavaScript 文件,为减少HTTP 请求和这些下载文件的大小, 通常的方式是在页面中合并并压缩多个CSS/JavaScript 文件为一个或很少的几个文件, 并使用压缩后的文件而不是原始文件。
 
 
优化会话存储
默认会话数据被存储在文件中。 这是好的对处于发展项目或小型项目。 但是,当涉及要处理大量并发请求时, 最好使用其他的会话存储方式,比如数据库。 Yii 支持各种会话存储。 你可以通过在配置中配置 session 组件来使用这些存储.
'components' => [
'session'=> [
     'class'=>'yii\web\DbSession',
],
],

以上配置是使用数据库来存储会话数据。默认情况下, 它会使用 db 应用组件连接数据库并将会话数据存储在 session 表。 因此,你必须创建如下的 session 表,

CREATE TABLE session (

    id CHAR(40) NOT NULL PRIMARY KEY,

    expire INTEGER,

    data BLOB

)
你也可以通过使用缓存来存储会话数据 yii\web\CacheSession 。 理论上讲,你可以使用只要支持数据缓存。 但是请注意,某些缓存的存储当达到存储限制会清除缓存数据。出于这个原因,你应主要在不存在存储限制时才使用这些缓存存储。 如果你的服务器支持 Redis,强烈建议你通过使用 yii\redis\Session 来作为会话存储。
 
使用普通数组
尽管活动记录对象使用起来非常方便, 但当你需要从数据库中检索大量数据时它的效率不如使用普通的数组。 在这种情况下,你可以考虑在使用活动记录查询数据时调用 asArray() , 使检索到的数据被表示为数组而不是笨重的活动记录对象。
 
优化 Composer 自动加载
因为 Composer 自动加载用于加载大多数第三方类文件, 应考虑对其进行优化,通过执行以下命令:
composer dumpautoload -o
 
处理离线数据
当一个请求涉及到一些资源密集操作, 你应该想办法在无需用户等待他们完成脱机模式时来执行这些操作。
有两种方法可以离线数据处理:推和拉。
在拉中,只要有请求涉及到一些复杂的操作,你创建一个任务,并将其保存在永久存储,例如数据库。然后, 使用一个单独的进程(如 cron 作业)拉任务,并进行处理。 这种方法很容易实现,但它也有一些缺点。 例如,该任务过程中需要定期地从任务存储拉。如果拉频率太低,这些任务可以延迟处理; 但是如果频率过高,将引起的高开销。
在推中,你可以使用消息队列(如 RabbitMQ ,ActiveMQ , Amazon SQS 等)来管理任务。 每当一个新的任务放在队列中,它会启动或者通知任务处理过程去触发任务处理。

Yii2 性能优化 来源yii2官方文档的更多相关文章

  1. Mysql优化(出自官方文档) - 第三篇

    目录 Mysql优化(出自官方文档) - 第三篇 1 Multi-Range Read Optimization(MRR) 2 Block Nested-Loop(BNL) and Batched K ...

  2. Mysql优化(出自官方文档) - 第五篇

    目录 Mysql优化(出自官方文档) - 第五篇 1 GROUP BY Optimization 2 DISTINCT Optimization 3 LIMIT Query Optimization ...

  3. Mysql优化(出自官方文档) - 第八篇(索引优化系列)

    目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexe ...

  4. Mysql优化(出自官方文档) - 第九篇(优化数据库结构篇)

    目录 Mysql优化(出自官方文档) - 第九篇(优化数据库结构篇) 1 Optimizing Data Size 2 Optimizing MySQL Data Types 3 Optimizing ...

  5. Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇)

    Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 目录 Mysql优化(出自官方文档) - 第十二篇(优化锁操作篇) 1 Internal Locking Methods Row-Leve ...

  6. Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇)

    Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 目录 Mysql优化(出自官方文档) - 第十篇(优化InnoDB表篇) 1 Optimizing Storage Layout f ...

  7. Mysql优化(出自官方文档) - 第六篇

    Mysql优化(出自官方文档) - 第六篇 目录 Mysql优化(出自官方文档) - 第六篇 Optimizing Subqueries, Derived Tables, View Reference ...

  8. Mysql优化(出自官方文档) - 第七篇

    Mysql优化(出自官方文档) - 第七篇 目录 Mysql优化(出自官方文档) - 第七篇 Optimizing Data Change Statements 1 Optimizing INSERT ...

  9. Mysql优化(出自官方文档) - 第四篇

    Mysql优化(出自官方文档) - 第四篇 目录 Mysql优化(出自官方文档) - 第四篇 1 Condition Filtering 2 Constant-Folding Optimization ...

随机推荐

  1. ios -网络加载json和本地加载json

    1网络加载json的时候,要在模型的实现文件里写: - (void)setValue:(id)value forKey:(NSString *)key { } 2本地加载json的时候,要在模型的实现 ...

  2. Android调试小技巧(LogCat不输出、Log自动清空、install时timeout)

    问题:有时候明明连接了设备,而LogCat却没有输出 解决方法:在device界面点一下对应设备,使其处于选中状态(它适用于查看手机文件不显示的情况) 问题:前面记录的Log看着看着突然被清空了 解决 ...

  3. java_method_stringUtils

    /** * 字符串英文单双引号处理,将中英文引号转为中文的引号 * @param temp * @return */ public static String getStringDatabase(St ...

  4. linux替换文件指定字符串前面的内容

    sed 's/.*user_id/user_id/' wechat_log2 > target_log

  5. Mac 终端命令大全

    目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 ...

  6. notepad++ 离线插件下载

    http://www.cnblogs.com/findumars/p/5180562.html

  7. JavaWeb 学习004-增删改查的编写

    完成了grade,student模块的 数据库连接部分,还需要不断重复这个过程,熟练掌握JDBC的编写. 在不断编写的过程中,加深理解代码. 下一步 1.biz层面的知识内容 2.还有就是登陆成功后跳 ...

  8. (转)SQL Server 性能调优(cpu)

    摘自:http://www.cnblogs.com/Amaranthus/archive/2012/03/07/2383551.html 研究cpu压力工具 perfom SQL跟踪 性能视图 cpu ...

  9. Java CopyOnWriteArrayList

    1. 为什么需要 CopyOnWriteArrayList ArrayList 的内部实现是一个数组, 并且是动态扩容的, 当插入数据时, 先判断数组是否需要扩容, 如果需要扩容, 则先扩容, 再插入 ...

  10. linux下查看cpu物理个数、核数、逻辑cpu数

    一.首先要明确物理cpu个数.核数.逻辑cpu数的概念 1.物理cpu数:主板上实际插入的cpu数量,可以数不重复的 physical id 有几个(physical id) 2.cpu核数:单块CP ...