pni在2023年10月之前支援php5系列的版本。9月份時進行公升級,使其支援php7。
pni是什麼? 具體參考這邊博文《php native inte***ce》。pni**規模只有1000行左右,公升級大概花費了一周時間(工作外時間),其中包含2天尋找思路、2天的**公升級,3-4天的問題排查。
這篇部落格記錄了一下pni公升級過程,包括自己學習php7擴充套件框架、api定義的過程,除錯、壓測、修復bug的過程等。
把這些東西記錄下來,主要是為了總結出自己的學習方法和操作方法。寫成部落格後,可以更好地幫助自己反思公升級過程中是否有操作不好的地方。當然其中也會有自己的成功經驗。
搜尋引擎搜到了幾篇寫,php7和php5的 zend api 不同的網文。隨意瀏覽了一下,感覺幫助不是特別大。
看了後收穫特別大, 了解了 php7擴充套件編寫的幾個特點:
公升級的思路就有了。
依據發現的php7擴充套件**的特點,決定以php5版本的pni的**為基礎,進行公升級。**不需要做太大的變動,更不需要完全重寫。
設立3個目標,並按順序分步驟實現。 1. 公升級**,編譯通過。 2. 功能驗證通過。 3穩定性驗證通過。
為了達到第乙個目標,使編譯通過,使用下面方法:
達到第2個目標的方法,則多寫功能驗證的測試case。
達到第3個目標的方法,是做壓力測試,觀察記憶體和cpu的使用情況。
在公升級過程中遇到過最大的乙個問題是,pni中遇到記憶體洩漏,為了定位記憶體洩漏,花了非常多的時間。
總體上說,這次公升級pni比較順利。
在做的過程中,思路其實並沒有上面寫的那麼清楚,心中也只有個大概思路。在剛開始,尋找從何下手的過程中,還是走了一點彎路,浪費的時間不多。
走的最大的彎路則是,上文說的定位和解決pni記憶體洩漏的那個問題, 沒有首先想到去觀察物件或變數的引用計數的。這使pni公升級的過程直接阻塞了。今後遇到記憶體洩漏的情況,應該首先觀察zval的引用計數數目是否為0.
下面還是做各種假設,假設我會面臨不同的情況(實際並不存在),我該設計什麼樣的思路和方法進行pni的公升級呢?
大規模的**,邏輯上可以好分層和抽象。 公升級**前, 先寫乙個小的php7擴充套件,熟悉新的php7框架介面。
作程的技術部落格
《工程師手記-公升級pni以支援php7》
從程式設計師公升級到工程師
大多數象我這樣對軟體有濃厚興趣的人,畢業後義無反顧地走進了企業,開始了程式設計師的生涯。那時,我們迷戀 大全 秘籍 一類的書籍,心中只有 當我看到一行行枯燥的 變成了能夠打 的裝置,變成了螢幕上漂亮的 變成了動聽的 成就感油然而生。我覺得自己也是乙個出色的程式設計師了。在使用者的機房中苦熬三晝夜解決...
從程式設計師公升級到工程師
大多數象我這樣對軟體有濃厚興趣的人,畢業後義無反顧地走進了企業,開始了程式設計師的生涯。那 時,我們迷戀 大全 秘籍 一類的書籍,心中只有 當我看到一行行枯燥的 變成了 能夠打 的裝置,變成了螢幕上漂亮的 變成了動聽的 成就感油然而生。我覺得自己 也是乙個出色的程式設計師了。在使用者的機房中苦熬三晝...
軟體開發工程師「打怪公升級」,如何技術高階?
天生稟賦的人不多,看數學概率正態分佈就知道了,絕大數人都是普通人,需要通過努力學習一步一步往上爬。學習如逆水行舟,不進則退。網際網路偏年輕化的特點,軟體技術也是吃青春的飯碗,類似運動員多少歲會退役一樣,沒有必要大驚小怪。如何規劃職業生涯是每乙個人需要面對的難題?計畫往往趕不上變化,你有你的計畫,世界...