Yii2 性能優化 來源yii2官方文檔


優化你的 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 等)來管理任務。 每當一個新的任務放在隊列中,它會啟動或者通知任務處理過程去觸發任務處理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM