UC瀏覽器開發語言的選擇

pythontab發表於2013-01-31

有人把開發語言比喻成武俠中的門派:少林、武當、峨眉、崆峒等,每個門派武功的招式、修煉方法和宗旨都不相同,因此新人投奔某個門派後再改投新門派的門檻很高,而各個門派之間也是三六九等。也有人把開發語言比喻成各種工具:錘子、鉗子、螺絲刀、小刀、大棒等,各個工具沒有強弱之分。


對於一般程式設計師來說,切換語言的門檻是存在的,因為開發語言不僅包括語法,還包括開發語言和框架等整套技術堆疊。從公司角度來看,確定公司內部的主流開發語言也有利於人才培養和招聘,能夠促進企業的健康發展。


本文將分享一下UC在選擇開發語言方面的一些經驗和思考。


UC的業務定位


選擇開發語言時首先要考慮的就是它要和整個公司的業務定位相契合。UC是做瀏覽器起家的,瀏覽器就是所有研發的核心。同時我們也會圍繞瀏覽器擴充一些附屬業務,如資訊頻道、軟體下載頻道、遊戲下載頻道等。


2004年我們剛開始創業時,使用了伺服器客戶端混合運算架構去解決使用手機瀏覽器瀏覽Web網頁的問題。這種架構將大部分複雜的運算工作放在伺服器上完成。使用者在使用UC瀏覽器瀏覽Web網頁時,“伺服器”會先將頁面內容進行預處理。例如,當頁面出現JavaScript、CSS等手機端無法很好處理的元素時,伺服器會採用高容錯策略進行自動過濾。當頁面需要顯示圖片時,伺服器會根據終端返回的螢幕引數對圖片進行匹配壓縮。考慮到上網瀏覽頁面的特性,所有伺服器處理工作基本都是實時進行的。


而隨著終端效能的提升、網路環境變好,我們發現,客戶端支援的事情變得更多了。於是我們從2008年起組織了一個單獨的團隊,開始打造新一代的手機瀏覽器核心。U3核心將原先主要放在“雲”的頁面解析功能,向本地客戶端做了相應的遷移。現在,U3核心已經可以很好地符合HTML5的相關標準。而瀏覽器核心對跨平臺、效能要求都是很高的。


UC的客戶端開發語言


2004年剛開始做UC瀏覽器時,使用者手機基本都只能支援Java,於是UC的客戶端開發語言就選擇了Java。2007年前後,我們看到基於Symbian 60的智慧機開始興起,作業系統也開始支援效能更好的C/C++,因此,我們開始跟進使用C/C++進行Symbian客戶端的改造和開發。我們應該是最早一批進行原生開發的手機軟體研發團隊,UC在Symbian上佔有很高的市場份額也正是得益於此。2010年之後,iOS和Android等智慧平臺開始出現,UC也快速跟進,開發了原生產品。


目前,UC已經覆蓋了國內所有主流手機平臺,下面是開發語言的的列表。

UC瀏覽器開發語言的選擇

值得一提的是,我們的U3核心主要採用C/C++進行開發,這樣做的好處是,可以做到很好的跨平臺。目前U3核心已經在Android和iPad上上線。我們計劃用一年時間使之支援iPhone、Android平板還有Windows Phone。此外,由於MTK的平臺也是可以使用C/C++開發的,所以,未來我們也希望U3核心可以登陸諸如MTK這樣的平臺,服務更廣大的使用者群。


UC的伺服器端開發語言


伺服器端開發一直是UC業務的核心之一。在初創階段,UC的伺服器端只是UC瀏覽器的雲端,僅僅是為了實現網頁壓縮和加速,提高渲染的效果。伺服器端開發團隊的開發語言採用的是C/C++(核心模組)和Python(業務邏輯),比較統一。2007年左右,我們開始圍繞瀏覽器發展了很多周邊業務,算上後臺的統計分析等專案,可以說是五花八門。當時,各個專案分屬不同團隊,一般來講,團隊Leader熟悉什麼語言,團隊就使用什麼開發語言,涉及PHP、C/C++、C#、Boo、Python、Java等。同種開發語言中使用的框架、庫也都各自為政,由各團隊自己克服困難和積累技術。


在2011年底~2012年第一季度,我們在公司範圍內進行了一次集中討論,最終確定以PHP、C/C++、Java作為UC伺服器端的主流語言。


在以下場景建議使用PHP:

“頁面展示”:帶有Web頁面的產品和專案,用PHP方便結合前臺其他開發技術,如HTML/XHTML、CSS、JavaScript、JSON等,不需編譯,可快速調整頁面;


“模組粘合”:將一個大專案分解出多個邏輯相對固定且獨立的模組,採用C/C++、PHP等做成獨立模組提供服務,用PHP呼叫這類服務後,結合其他靈活多變的業務邏輯組裝起來。


在以下場景建議使用C/C++:

“高效能、大併發、高實時”:效能高是C/C++的優點,相對於PHP或Java,使用者量大、併發訪問的程式使用C/C++能節省大量機器;


“耗CPU、管理大量記憶體、高磁碟I/O或者網路I/O”:對物理資源的管理以及靈活方便的操作是C/C++的天生優勢,但缺點要求開發人員有著豐富的開發經驗。


在以下場景建議使用Java:

“兼顧業務靈活性、規範性、效能和安全”:Java類被組織成等級層次,純粹物件導向、規範、類庫多、業務抽象較好、跨平臺、業務邏輯變更方便,而且效能相對較高;


很多銀行系統、銀行網站、製造企業的系統都是基於Java平臺,因此,網際網路企業跟其他企業有互動介面的專案常用Java。


要求掌握2種開發語言


UC現在要求每個開發人員應該熟練使用至少2種開發語言。一種是目前工作時主要使用的“母語”,另一種是根據興趣或工作需要選擇的“外語”。在學習“外語”時,一般是要求快速掌握其語法,然後瞭解相關函式列表和庫,知道用的時候在哪兒查,瞭解專案檔案如何組裝以及開發框架、開發規範。


從公司的角度看,因為網際網路企業節奏快,我們經常從各個團隊抽調人員快速組建新的團隊,所以開發人員熟悉2種語言可以讓公司的運轉更為流暢,我們在人員調動時也會徵詢各自的意願和了解其對語言的掌握情況。


從團隊內看,需要有一部分人可以工作在幾個領域,例如使用PHP的人中有一部分還需要會用C/C++寫PHP擴充套件;或者在用Java為主的團隊裡,需要有一部分人能用C/C++開發底層服務。另外,部分專案還需一些輔助的後臺指令碼,我們要求開發者會用Linux Shell寫簡單指令碼,部分開發還會用Python寫複雜的指令碼。


從人才培養的角度看,選擇這些開發語言,主要是考慮到移動網際網路和網際網路行業的現狀。這有利於開發人員複用以前的技術積累,也有利於開發人員長期的職業發展。通過內部討論,讓大家意識到幾種開發語言的優缺點,能在更高的視角選擇合適的開發語言。


最後,適合的開發語言有利於團隊的技術儲備、提升工作效率和跨團隊的人員調動。

相關文章