一種語言的極限:PHP
在 2020 年 3月尾的時候,我向內部其他幫忙開發 ArOZ Online Beta 系統的工程師(Programmer / 程式員 / 開發者)宣布 ArOZ Online 系統將會停止支援 PHP 。你可能會問:為甚麼要終止支援 PHP? 這系統的核心不是一向也是由 php 開發的嗎? Apache + PHP 是一個好用而且適合大型系統開發的程式語言 開始開發 ArOZ Online Beta 版時,在選擇到底應該選擇使用 PHP 或是 Nodejs 開發 ArOZ Online 系統。當時在網上也找到不少意見是說如果要開發大型系統, php 的 project structure (項目結構)的確是會比較適合。再之後,我亦在網上找到了一篇講述為甚麼 Nodejs 不適合開發大型系統的文章,讓這個想法得以確實。然而,這問題仍然比我想像中的複雜,我直接跳到結論來看: PHP 是適合開發 靜態 大型系統 甚麼是靜態系統?一般常見的 CMS、BMS 如 warehouse management system (倉庫管理系統), Learning management system (學習管理系統)等。這些系統不需要太大量的即時互動性,資料只需要在頁面載入的一刻提供就可以了,不必要即時對頁面更新。 PHP 的設計本來就是這個用途,而一開始 ArOZ Online 系統也是只提供這個簡單的用途: 在頁面載入的時候提供一個音樂 / 影片列表當用戶點擊媒體之後,JavaScript 把該媒體載入(用 Apache modXSendFile)播放 這個設計在 ArOZ Online Alpha 跟 Beta 初階段也沒甚麼問題,畢竟就只是一個簡單的影片網頁而已。 當 PHP 遇上網頁桌面系統 到了 ArOZ Online Beta 開發的中期,Virtual Desktop Mode (虛擬 / 網頁桌面模式)被開發出來了。由於桌面的互動性設計(例如使用者拉動桌面上的圖示之類的),客戶端對伺服器的請求數目多了很多,由原本只是使用者有按按鈕才會做一次 request 變成了每 5 秒做一次請求,看看有沒有桌面圖示或是檔案變動。如果你在 ArOZ Online Beta 的桌面模式打開 Developer Console,你將會看到以下一大堆的 Ajax Request。當然,這種 request 方法完全說不同是 best practice。 桌面模式下超多次的 AJAX Request 在 Windows 的工作管理員明顯能看到每次 AJAX Request 時的 CPU 負載尖端(Load Spike) 然而,桌面的難題還是透過不斷 request 來算是暫時解決了。可是真正讓我發現 PHP 真的不夠用的部分是 File Explorer (檔案管理員)的部分。 PHP 與 檔案管理員 — 一種語言的極限 對,就是因為要開發一個基於 PHP 的檔案管理員,就把 PHP 這個語言推到了它的能力極限。 ArOZ Online Beta 下使用 PHP 開發的檔案管理員 這個工作管理員一開始是使用 100% 純 PHP 開發而成。但是如果你對 PHP + Apache 有一點的開發經驗,你就會知道一個 PHP 在處理的時候是會把另一個 PHP request 卡住。即是說,伺服器每次只能處理一個 request。當你把這個 request 用作處理 file operation 如 檔案移動、複制等等,如果檔案是比較小的還好,但是如影片檔案(1 - 2GB)一個的話,你整個伺服器就卡住了。 就是在這個時候我發現了 Golang 就是這個時候,我學會了基本的 Golang。這個時候我為 ArOZ Online 的 File Explorer 開發了三大系統: fsexec / fszip / fsconv…