【转】为何大型网站前端使用 PHP 后台逻辑用 Java?

转自http://blog.sina.com.cn/s/blog_6aa178410101ftvl.html php

最近纠结了一下,若是开发一个大型的网站,我到底应该使用php仍是jsp,后台到底使用php仍是用java,个人选择要么是php要么是java,由于我喜欢linux、unix,固然window平台也必须支持,以便哦的妹纸能够查看。这就要求用一些跨平台至关好的软件+工具+语言,因此选择只能是这么几个。最后个人决定是php+java,一个前端一个后,理由以下:
 
php和java在开源社区的活跃度严重超过了其余的语言,使用人数也都是至关之多;活跃的开发工程师们可以给我帮助,且这俩都能很好的跨平台,不用花费大量的人力物力去维护
我也作过一个物联网的网关网站,比较复杂,当时采用的是jsp+java,复杂程度可想而知,单单说开发过程,网站部分繁琐,每次想查看结果运行网站的时候还须要从新打包部署一下,严重影响了哦的开发效率,天天的时间都是在等待(由于网站比较复杂,打包部署须要浪费一些时间)。相对来讲呢,php就没有了,php灵活,好学,上手快,容易修改,容易发布,关键是热部署,这个真让哦眼睛大亮。固然看待任何事物都须要两种眼光,php也会有缺点,好比没有太好的开发IDE,因此拼写错误很正常,且php的sql注入危险较大点,执行效率不高,安全性不如java。 html


还有一些理由,来自知乎的米米们给的建议:
Java的优势则是稳定可靠、运行效率高(尤为是JIT的出现以后差距更大了)、不容易犯错(强类型、预编译、必须拦截异常等等),缺点是开发和发布的效率相对较低。尽管优秀的工程师能在必定程度上改变以上的问题,但一般而言,哪能处处都是高手多如狗的梦之队?
从MVC的层次结构上说,在通常网站项目的开发周期中,需求变动最频繁、调整最多的是View,其次是Controller,最后是Model。这很是好理解,没事干谁每天改数据结构?每次版本升级控制结构都要改的啦,或多或少而已。
再次是二者之间的通讯,目前RPC技术已经足够成熟,不管是Web Service/Hessian/RESTful API都可以让开发人员专一在功能开发上,而不须要过多的考虑异构平台的差别和通信的细节。这也就意味着在大公司里同时应用两种语言的方案并不会引入过多的复杂度和工做量。固然,文档量的下限却是所以被拔高了很多,但事实上大部分团队对此其实都是喜闻乐见的:别天天说文档重要但没空了,你不写其余同事怎么配合?
靠近用户的前端,使用PHP可以更快的完成前端频繁而琐碎的更新,自如的应对各类需求的变化。页面的结构调整、用户输入内容的基本验证、仅只和用户交互有关的简单逻辑等都很适合使用PHP来开发,甚至能够经过相似Smarty等模板技术将其页面的变更迁移到前端团队。而基本的业务逻辑和数据的更新采用Java开发,能够有效的提升复用度、提高性能和吞吐能力、规避安全问题等。而开发效率稍有下降换来的是可维护性的提高,发布速度慢就更不是问题了,由于一般对于基础业务逻辑的调整每每都是总体修改,并层层测试确认才能发布的。
因此,大型网站前端采用PHP后端采用Java,既好招人又好维护、系统稳定还性能高、连安全性都大大增长。代码复用、文档完备度竟然也都改善了。让你在以上这些好处触手可及时,对架构师知识谱系在广度上要求更高一些这事根本就不是个问题。
为何不是仅用PHP或是仅用Java?
其实也有不少公司为了保证团队组织不至于过分复杂,会更倾向于采用单一语言,尤为是中小公司。
单一方案其实同样能够作良好的隔离,PHP一样能够提供Service,而性能问题其实不少时候是算法和架构的问题而不是语言差别的问题。如Velocity或JSTL等也是很优秀的隔离方案。
但这些方案在高压力下会暴露出不少问题而体现双语言的优点,这些在上面其实都提到,详细说明一些很可贵到改变的点:
1. PHP因为其动态脚本语言的特性,包括类、函数、常量在内都须要在每次请求周期中重复执行后才能创建运行环境;为了保证解析速度而牺牲编译质量;应用了FastCGI但仅仅只是复用进程处理请求减小fork成本而不是像其余语言,初始化完毕后经过FastCGI的接口得到数据并以对应接口返回数据等几个缘由,基本上已经不可能在性能上追回当初更烂如今开着JIT牌跑车的Java了。
2. 在PHP里是如此的容易犯错而难以发现,即便你用实质上出自官方的Zend Studio,也没法改变一个事实:要保证你的程序高质量无大错,得要有充足的经验、足够的严谨、以及——负责任的QA。淘宝的黄裳就曾经拿IDE这事开过玩笑。而玩笑背后的那个缘由“缺少中间件”最近几年有很多的改善,主要是很多中间件的支持变得更普遍了从而让PHP得益,但发展的根源其实仍是在C和Java社区。性能和易犯错则是语言特性形成的技术难点,也是用来换取灵活、快捷的必要代价,很难去期望有根本的改善。
3. Java的世界里也有JSTL、Velocity和Freemaker等,但和PHP灵活而强大的动态能力、丰富的函数和类库、轻松的学习成本、多到使人发指的文档相比,简直就是渣,就是渣啊!JSTL改完了要重启Context啊有木有?Velocity不关缓存也要重启啊有木有?Velocity开缓存性能低下啊有木有?即便这些都无论,调整下某个数据校验规则要改Action也要重启有木有?


实际工做中性能问题能够经过良好的架构解决,容易犯错的问题能够经过框架和规范以及全面的测试来解决,中间件选择少些但其实该有的都有了,Java的灵活性同样有很多可供考虑的解决方案哪怕是挫得要死的摘掉节点重启,完成后从新上节点的策略。
因此,你们会看到单一语言的技术团队也不少,这个问题的真正考虑仍是更多在团队自身的特色、积累等等。用了双语言的,也知道本身为何要用这些,不用的也清楚本身的路该怎么走。最后的最后说一句:若是你不知道本身为何要用双语言方案的话,基本上你也就不须要考虑它了。 前端

相关文章
相关标签/搜索