程式碼升級Java 8一次搞定 千萬用戶App無痛升級伺服器

程式碼升級Java 8一次搞定 千萬用戶App無痛升級伺服器

臺灣本土開發的即時通訊App程式Cubie Messenger團隊只用了1天,便將後端伺服器平臺程式碼從Java 7順利升級到最新版本的Java 8,技術長陳彥任(圖左二)表示,選擇成熟技術以及養成良好開發習慣是無痛升級的關鍵。

改版向來是系統營運人員的夢魘,尤其是開發平臺SDK的版本升級,只要稍有些微不相容,不只是服務不穩,甚至得大幅修改程式碼。不過,臺灣本土開發的即時通訊App程式Cubie Messenger團隊只用了1天,從Java 7順利升級到最新版本的Java 8,完成15萬行程式碼的後端伺服器平臺升級。

Cubie Messenger推出至今全球下載數超過1千萬人次,同時上線人數達百萬人,Cubie Messenger技術長陳彥任表示,升級過程服務完全不受影響沒有中斷,是一次無痛升級,選擇成熟技術以及養成良好開發習慣是關鍵。

談到想要將Java7升級成Java8的原因,陳彥任說,他們對新玩意充滿熱情,只要是新技術都會手癢的想要試試,尤其Java8是近年來的一次大改版,而他們專案後臺又是使用Java當作開發語言,因此在Java8釋出不久,他們就嘗試著使用Java8開發一些小專案,發現Java8新增的Lambda表示式語法讓人上癮,寫完Java8的程式後,再使用Java7的語法便極度無法適應,陳彥任直說「回不去了」。

Java8的Lambda表示式使開發者上癮

陳彥任強調,使用Lambda表示式的語法,其中一個效益便是能簡化for迴圈,不只程式碼行數大量減少,連程式的邏輯也變得更清楚,因為Lambda表示式能讓for之類的迴圈邏輯判斷與副作用(Side effect)得以分開,而使整體程式碼更加簡潔好維護,「Lambda表示式讓迴圈的語法變得像SQL語法一樣直覺。」他說。

這樣的效益在撰寫巢狀迴圈的程式碼時更加明顯,如存取資料庫的資料時,通常會使用到多層for迴圈。過去,開發者知道迴圈邏輯判斷與副作用分開的程式寫作方法是對的,但是當程式本身不支援Lambda表示式的語法,硬要用這樣的方法開發,將必須撰寫更多行的程式,程式可讀性也就更低了。而且陳彥任補充,不少語言都有支援Lambda表示式,但是其中有些語言使用Lambda表示式語法,有可能使程式效能降低,不過經過他實際測試,在Java8使用Lambda表示式語法並不影響效能。

而Java8最大的改變,陳彥任說,是引進函數式程式設計典範,如此更能方便地藉由平行化運算,增加程式的執行速度,以for迴圈為例子,函數式語言的邏輯判斷與副作用的程式能夠分開平行執行,因而能縮短運算時間。

不過,陳彥任也說,Java8的平行化運算並不好駕馭,函數式語言只是增加平行運算效能的機會,並非所有工作都能得到加速,因為處理器要將執行任務拆成多項子任務平行執行,需要增加額外的工作,所以陳彥任表示,開發者要非常清楚自己撰寫的程式碼所執行的任務,是否適合平行化,抑或是任務的運算量已達需要平行化運算,否則將白忙一場。