首页 > IT资讯 > 正文

UC浏览器开发语言的选择

有人把开发语言比喻成武侠中的门派:少林、武当、峨眉、崆峒等,每个门派武功的招式、修炼方法和宗旨都不相同,因此新人投奔某个门派后再改投新门派的门槛很高,而各个门派之间也是三六九等。也有人把开发语言比喻成各种工具:锤子、钳子、螺丝刀、小刀、大棒等,各个工具没有强弱之分。


对于一般程序员来说,切换语言的门槛是存在的,因为开发语言不仅包括语法,还包括开发语言和框架等整套技术堆栈。从公司角度来看,确定公司内部的主流开发语言也有利于人才培养和招聘,能够促进企业的健康发展。


本文将分享一下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已经覆盖了国内所有主流手机平台,下面是开发语言的的列表。


值得一提的是,我们的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写复杂的脚本。


从人才培养的角度看,选择这些开发语言,主要是考虑到移动互联网和互联网行业的现状。这有利于开发人员复用以前的技术积累,也有利于开发人员长期的职业发展。通过内部讨论,让大家意识到几种开发语言的优缺点,能在更高的视角选择合适的开发语言。


最后,适合的开发语言有利于团队的技术储备、提升工作效率和跨团队的人员调动。

上一篇:亚马逊的电子书业务份额高达70%,仍未披露Kindle销量
下一篇:你得会写代码。。。

PythonTab微信公众号:

Python技术交流互助群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854