PHP快取之Opcode快取

2021-09-02 00:17:08 字數 2094 閱讀 3815

什麼是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

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

編輯php.ini,新增apc的配置

[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 語法分析 在詞法分析的基...