91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在PHP中利用opcode進行緩存

發布時間:2021-04-02 17:35:47 來源:億速云 閱讀:165 作者:Leah 欄目:開發技術

怎么在PHP中利用opcode進行緩存?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1.什么是opcode

解釋器分析代碼之后,生成可以直接運行的中間代碼,就稱做操作碼,opcode

2.解釋器與編譯器的區別

解釋器是生成了中間代碼后直接運行中間代碼,運行時的控制權還是在解釋器手里。

編譯器則是生成了中間代碼之后還進一步優化代碼,生成可以直接運行的目標程序 ,但不執行,等待用戶觸發執行,他的控制權在目標程序,和編譯器無關。

3.php是解釋型語言,他的原理與編譯有點相似,包括詞法分析,語法分析,語義分析.....,php解釋器的核心引擎就是zend engine

4.php如何查看一段代碼的opcode

安裝php的parsekit擴展,通過擴展的api就可以查看php的opcode,如parsekit_compile_string()

php -r "var_dump(parsekit_compile_string('print 1+1;'));"

5.opcode有生成

首先要經過詞法分析,腳本代碼可以看做是一系列單詞組合,解釋器要對這些單詞進行分類,并打上記號

比如print,我們查看php源碼包中的zend/zend_language_scanner.l在這個文件中我們就可以查找到pirnt對應的標記。T_PRINT

找到標記之后接下來就是語法分析,在zend/zend_language_parser.y中,我們可以找到T_PRINT對應的函數

接著在zend/zend_compile.c中找到這個函數實現代碼,這個函數就是實現 了opcode的轉換。所有的opcode都是用戶整數來表示 的。

6、 開啟opcode緩存

生成opcode是需要系統開銷的,每一次執行都要生成一次opcode,這樣的開銷還是可觀的,所以php的優化必須開啟opcode的緩存,來避免重復的編譯。

php的opcode緩存有APC,eAccelerator,XCache,這些都是把opcode放在共享內存中。

以APC為例:在php.ini中設置

apc.cache_by_default = on

通過

<?php print_r(apc_cache_info());?>

可以查看緩存的情況,

7.opcode緩存過期

opcode緩存是會過期的,如果過期就要得新生成一次,當然也可以跳過過期檢查的機制,在php.ini中設置

apc.stat=off

這樣程序代碼的修改得通過重啟服務器來生效。

8.腳本的跟蹤與分析,可以使用xdebug來跟蹤,用xdebug可以實現性能跟蹤器,找到程序的執行瓶頸,從而優化程序。

xdebug.profiler_output_dir = /tmp/xdebug
xdebug.profiler_output_name = cachegrind.out.%p

xdebug的函數跟蹤:

xdebug.trace_output_dir = /tmp/xdebug
xdebug.trace_output_name = trace.%c

window下可以用wincachegrind查看xdebug的報告文件。

看完上述內容,你們掌握怎么在PHP中利用opcode進行緩存的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖口县| 化隆| 罗江县| 铜陵市| 调兵山市| 黄梅县| 清流县| 德清县| 柏乡县| 布拖县| 额尔古纳市| 凤翔县| 镇赉县| 交城县| 雷州市| 青阳县| 安乡县| 略阳县| 关岭| 巴马| 宁明县| 曲松县| 寻甸| 揭西县| 眉山市| 博野县| 德州市| 德保县| 阜南县| 兖州市| 治县。| 威海市| 阜康市| 浠水县| 兴隆县| 泸西县| 长汀县| 景宁| 咸宁市| 西贡区| 黄山市|