php大多數(shù)時候是用文件的形式來存儲配置,在代碼項目中建立一個config目錄存儲.php文件,無論是以數(shù)組還是json的格式存儲,其實每次在獲取配置文件的內(nèi)容時都得進行文件操作,這個過程是比較費時的,且在多人開發(fā)也不方便。
現(xiàn)介紹一款php的高性能的配置管理擴展—Yaconf。Yaconf是一個高性能的PHP配置容器, 它在PHP啟動的時候把格式為INI的配置文件Parse后存儲在PHP的常駐內(nèi)存中,不需要每次請求的時候都來分析配置文件,并且在獲取配置項的時候"zero-copy"。
Yaconf有以下幾點優(yōu)勢:
1.它使用單獨的一個配置目錄(在yaconf.directory指定), 不和代碼在一起.
2.它在PHP啟動的時候, 處理所有的要處理的配置, 然后這些配置就會常駐內(nèi)存, 隨著PHP的生命周期存亡. 避免了每次請求的時候解析配置文件.
3.所有的配置內(nèi)容都是immutable的, 這就可以借助于Fork的COW, 降低內(nèi)存占用, 并且在訪問配置的時候, 幾乎不需要任何的內(nèi)存Copy, 也不會有無謂的引用計數(shù)增減
4.最重要的, 配置目錄和代碼分離以后, 可以借助一個配置管理后臺, 來實現(xiàn)配置的統(tǒng)一化管理.
5.它支持(對于非ZTS)配置變更重新加載, 也就是說配置如果有變化(建議更改配置一定使用mv, 不要使用cp), 它會reload, 不需要重啟(檢測的頻率由yaconf.check_delay控制).
6.它支持豐富的配置類型, 包括字符串, 數(shù)組, 分節(jié), 分節(jié)繼承, 并且還可以在配置中直接寫PHP的常量和環(huán)境變量等.
7.最新的1.1版本發(fā)布后更是有40%速度提升
8.最重要的是, 它很簡單.
當然他也有一些缺點:
1.不支持多級目錄。
2.不可能把各種配置參數(shù)全部寫在一個文件里,這樣一個文件會越來越大。
3.即便把配置分門別類,多個項目無法共用同一個目錄,只能用前綴的形式解決。
4.配置數(shù)組的下標的key本身就帶了很多點號;導致被解析成若干個key
Yaconf 只提供了兩個方法:
比如在/tmp/yaconf文件夾內(nèi)有兩個文件
foo.ini
bar.ini