雖然是在疫情期間,可是咱們仍是要不斷投資本身的大腦,這樣才能在從此的職場道路中讓本身更值錢。
首先,咱們先了解下解釋型語言PHP的工做原理,這有利於咱們瞭解PHP Opcache。php
對於PHP,咱們經常使用的是cli模式和php-fpm模式。下面咱們拿cli模式來描述下php執行腳本的運行過程:nginx
對於cli模式來講,每次執行php腳本,都會將以上流程完整執行一遍。segmentfault
而對於php-fpm模式來講,php初始化環節(步驟1)會在php-fpm啓動時執行,而以後的步驟則是會在每次請求執行時重複執行(php-fpm+nginx的工做原理,不瞭解的同窗能夠翻看一下以前的文章nginx+php執行請求的工做原理)。瀏覽器
對於大流量高併發項目來講,每次執行腳本或者請求時都須要從新編譯固定不變的腳本文件,生成固定的opcode,確實有些浪費資源了,因此opcache應運而生。緩存
Opcache,簡單來講,是php應對每次都須要重複編譯的腳本文件而開發的組件,能夠節省上文所說的解析腳本文件的開銷。服務器
目前,Opcache緩存的內容包括:微信
Opcache工做原理實際上是使用了共享內存機制,將須要緩存的內容放入到共享內存中,供其餘進程使用。併發
由於Opcache在建立緩存的過程當中不會阻止其餘進程讀取,因此在使用Opcache時要注意兩點,否則會大量消耗資源:高併發
切記!php-fpm
說了這麼多,下面咱們來看下Opcache如何配置呢?
Opcache配置是放置在php.ini文件中的(沒有安裝該擴展的同窗能夠自行百度安裝該擴展),咱們接下來主要講解一些重要的配置,以來提高PHP總體性能。
//添加Opcache擴展 zend_extension=opcache.so //開啓Opcache opcache.enable=1 //cli環境下啓用Opcache opcache.enable_cli=1 //浪費內存的上限,以百分比計,若是達到該上限,Opcache則會清空並從新生成緩存。默認5% opcache.max_wasted_percentage=5 //配置共享內存存儲大小,單位MB opcache.memory_consumption=128 //用來存儲臨時字符串的內存大小,單位MB。這個配置就是上面說到的Opcache緩存的interned_string,它會在第一次使用到interned_string時緩存到共享內存中,供其餘進程後續使用 opcache.interned_strings_buffer=8 //用於控制共享內存最多能夠緩存多少個文件,該值最小範圍是200,在php5.5.6版本以後,最大值是1000000 opcache.max_accelerated_files=4000 //設置緩存的過時時間,爲0的話則每次都要檢查 opcache.revalidate_freq=60 //若是啓用,OPcache會在opcache.revalidate_freq設置的秒數去檢測文件的時間戳(timestamp)檢查腳本是否更新。若是這個選項被禁用(設置爲0),opcache.revalidate_freq會被忽略,PHP文件永遠不會被檢查。這意味着若是你修改了你的代碼,而後你把它更新到服務器上,再在瀏覽器上請求更新的代碼對應的功能,你會看不到更新的效果 opcache.validate_timestamps=0 //因此像我上面說的,在大流量高併發場景下,該項不要啓用,切記 //啓用後,能夠將依賴Zend引擎的內存管理模塊一次釋放所有請求變量的內存,而不是依次釋放每個已分配的內存塊。 opcache.fast_shutdown=1 //啓用文件緩存(設置緩存路徑),這樣Opcache就能夠將Opcode緩存到文件中,實現跨php生命週期緩存 opcache.file_cache=/tmp
經歷過19年的裁人和20年的疫情以後,咱們應該明白只有不斷投資本身才是最重要的。只有不斷提高本身,才能讓本身應對不可控的變化!
最後,祝願你們在新的一年裏都能找到本身誠心如意的好工做。也歡迎你們關注個人微信公衆號和專欄:許錚的技術成長之路
(id:xavier-tech-growth),來一塊兒學習技術知識。個人成長也許也是你的~