什麼是opcode快取?
當直譯器完成對指令碼**的分析後,便將他們聲稱可以直接執行的中間**,也成為操作碼(operate code, opcode)。opcode cache的目的是避免重複編譯,減少cpu和記憶體的開銷。但是一般動態**的效能瓶頸都在io操作以及資料庫操作,那麼opcode快取能夠帶來的優化效果是有限的。
opcode快取的原理是什麼?
當請求php指令碼時,會經歷以下幾個過程:
zend引擎從檔案系統讀取檔案、掃面器詞典和表示式、解析檔案、建立要執行的計算機**(opcode),最後執行opcode。每一次請求都會執行以上步驟,如果我們的php沒有變化,納悶opcode也應該是沒有變化的,所以不必要每次都重新生成opcode。根據這個原理,我們可以把opcode快取下來,再次訪問相同檔案時,可以直接從opcode執行檔案,啟用opcode後檔案的執行流程如下:
有哪些php opcode快取外掛程式?
optimizer+(optimizer+於2023年3月中旬改名為opcache,php 5.5整合opcache,其他的會不會消失?)、eaccelerator、xcache、apc …
使用apc實現opcode快取
apc提供兩種快取功能,即快取opcode(目標檔案),我們稱之為apc_compiler_cache。同時它還提供一些介面用於php開發人員將使用者資料駐留在記憶體中,我們稱之為apc_user_cache。我們這裡主要討論apc_compiler_cache的配置。
最新版本為apc-3.1.6.tgz
編輯php.ini,新增apc的配置wget
tar -zxvf apc-3.1.6.tgz
cd apc-3.1.6
/home/ad/php/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/home/ad/php/bin/php-config
make
make install
配置說明:[apc]
extension=apc.so
apc.enabled=1
apc.shm_segments = 1
apc.shm_size = 128
apc.ttl = 0
apc.user_ttl = 7200
apc.num_files_hint = 1000
apc.write_lock=1
apc.stat = 0
apc.max_file_size=1m
apc.filters = a.php,b.php
apc.cache_by_default=1
本文參考:apc.enabled 開啟apc 設定為0關閉,1為開啟
apc.shm_segments 共享記憶體塊數
apc.shm_size 共享記憶體大小,但是是m
那麼顯然共享記憶體的總數就是apc.shm_segments*apc.shm_size
apc.num_files_hint 允許多少個opcode被快取
apc.stat 為1的時候會自動檢查opcode對應的php檔案是否有更新,有更新的話會自動更新。設定為0的話就不會去檢查了這樣會提高apc的效率,但是要使php的修改生效的話就必須重啟apache了,或者使用函式apc_cache_clear()來清空快取
apc.ttl opcode快取的過期時間,設定為0表示不過期,如果不為0會檢查兩次請求之間的時間,如果時間大於設定值那麼會更新opcode快取
apc.write_lock 表示多個程序同時更新乙份opcode快取的時候那麼只讓最先的乙個生效,可以有效避免寫衝突
apc.max_file_size 超過設定值大小的檔案不被快取
apc.filters 需要特例的檔案,多個檔案用逗號(,)相隔
apc.filters 與 apc.cache_by_default結合使用,
當apc.cache_by_default為1時apc.filters檔案不被快取,當apc.cache_by_default為0時僅apc.filters檔案被快取
PHP配置檔案快取opcode設定步驟
引言 安裝zendoptimizer或apc2.0等可以加速php 訪問,主要用於快取opcode而不是每次重複編譯,進而減少cpu和記憶體開銷 php5.5 後不需要安裝第三方軟體,直接開啟php配置檔案中opcache即可。步驟1 開啟php配置檔案 php.ini 輸入下屬 並 重啟apach...
php 快取 加速快取
eaccelerator,xcache,opcache 5.5預設 linux下安裝php時記得加上 enable opcache apc 偏資料庫快取,分系統和使用者快取,不推薦5.5將棄之?是php快取擴充套件,memcached快取是資料庫快取擴充套件 apc比較偏向資料庫快取的 一般兩者只有...
PHP編譯原理之Opcode
一.編譯原理的過程 編譯程式的工作過程一般可以劃分為五個階段 1 詞法分析 輸入源程式,對構成源程式的字串進行掃瞄和分解,識別出乙個個的單詞 如基本字 標識 符 常量 運算子 標點符 左右括號等 描述詞法規則通常用 正規式 和 有限自動機 依循的原則 詞法規則。線性分析。2 語法分析 在詞法分析的基...