Web开发技术选型之Java与PHP
作为一个Javaer,闲来无事,在W3Cschool中看了下PHP的相关教程,随即联想到了关于网站开发PHP与Java编程语言技术选型,一些小的感悟,记载如下。
PHP与J2EE的对比
网上有很多关于PHP与J2EE之间的对比,细观无非以下几点:
1.语言特征
PHP为脚本语言,解释型语言,弱类型,专为Web开发打造。Java为C语言系编程语言,编译型,强类型,有跨平台的特征。从语法简洁性来说,PHP比Java简洁,毕竟PHP诞生比Java晚,同样的逻辑在PHP中表达起来会简洁于Java,这一特性导致同样熟练度的PHPer与Javaer相比PHPer编程速度要快于Javaer。在这里我要强调的是同一熟练度,这个概念很重要,在没有前提假定的情况下比较两种编程语言的熟练度是没有意义的,比如一个新Phper在开发时对PHP语言不熟练,开发过程中需要频繁的查阅相关文档,那么这个新PHPer开发速度肯定比不上老Javaer,因为新PHPer在查阅文档的时间内,老Javaer可以完全依靠熟练度填平语法上的效率差异甚至超过新PHPer。
2.执行速度
语言特征决定了执行速度,在执行速度上,网上也有很多对比,总结而言Java优于PHP,但事实上比较两者的执行速度意义不大,因为Web应用的效率瓶颈是在对数据库的相关操作上,需要强调的是PHP与Java同样是作为Web服务器开发语言,功能都是操作数据库服务器以及动态网页呈现而已,如果网站多数以静态页面的形式呈现给用户,那两者比较毫无意义。
3.部署方式
PHP典型的部署方式是LAMP,即Linux系统+Apache服务器 +MySQL数据库+PHP语言,而JavaEE的部署方式有Linux系统+Tomcat服务器+Mysql数据库+Java语言,不同之处只在于服务器与语言的选择,Tomcat与Apache都是开源免费的服务器,从部署上来讲两种语言都有可行的解决方案。但在这里重点讲的是虚拟机主机,国内的虚拟主机大多不支持Java,即便支持Java也贵于PHP,而且Java应用大多使用Tomcat服务器,而java虚拟主机是共享Tomcat进程,如果部署到该服务器的其它应用影响到了Tomcat进程会导致所有应用都无法使用Tomcat进程,因而主机服务商维护Java服务器成本高于PHP服务器,所以这也导致了PHP在Web端独大的现状。当然不用虚拟主机则完全没有这样的顾虑,如使用云服务器,云服务器可以自行配置相关环境,而自由是把双刃剑,安全但是价格高。在这里PHPer与Javaer的不同是在编程环境上,有人说PHP可以热部署,不用像Javaer编写Web应用时每次改代码都需要开关服务器,部署应用,再调试,事实上Javaer也可以热部署,在Intellij中只需要一个按钮。
5.团队配合
在提倡前后端分离的互联网环境下,模板开发方式导致的前后端高耦合越来越遭人摒弃,如今,Web应用后端只需要提供相应的数据接口供前端调用即可,典型思想如RestFul。所以在团队前后端配合角度,PHP与Java并无太大的区别。若Web应用考虑SEO搜索引擎优化仍采用模板开发的模式,则PHP语言对前端的友好程度则高于Java。
5.系统架构
在系统架构这方面,Java毫无疑问完胜,Java拥有多种架构选择,常见的SSH框架即Struts+Spring+Hibernate、SSM即Spring MVC+Spring+Mybatis、SM即Spring boot+Mybatis都可以作为web应用的框架选型,这些框架能够很好的将后端模块进行分离,根据具体需求的不同选取不同的MVC层、业务层、持久层框架进行开发。有人说PHP也可以做到,说PHP有很多的框架也可以做到分层架构,ThinkPHP不就是国人开发的PHP MVC框架么?PHP有框架这点毋庸置疑,但是PHP从语言特性上来讲并不适合做框架,框架和面向对象编程思想有很强的联系,而PHP语言特性上对面向对象并不友好,这也就导致了PHP在框架这条路上其天花板与Java相去甚远。在这里有些PHPer毫无疑问会义愤填膺,但事实如此,PHP的语言特性偏向与面向过程,其旨在开发特定的业务逻辑,这也是PHP适合Web开发的原因。又有人会说,PHP5.0之后也支持面向对象,但事实上PHP也是不得已而为之。关于面向对象和面向过程的区别此处不表,但总而言之所以对于系统架构而言,PHP和Java都有各自的应用场景,在没有前提假定的情况下去比较两者,难分优劣。
技术选型 到底用PHP还是J2EE?
涉及到这个问题,作为应用拥有者,考虑问题无非从以下几点:
1.人力成本
与Java相比,PHP作为后起只秀,在人才库上少于Java乃是不争之实,其实这也跟当今教育有关。当今教育系统多半以学院派编程语言作为入手语言即C语言系,如C/C++、C#、Java,所以学历教育下的Web编程语言以Java居多。而PHP语言的学习大多在职业教育下,也不乏一些在社会教育中自行学习的。这一现状也导致了PHP人才在社会中的稀缺。供求关系决定了人力资源价值,PHP人才价格高于Java人才由此也由此得到体现。
2.项目需求
在基于B/S架构的Web应用中,项目需求复杂程度跨度比较大,从企业展示网站、个人博客搭建,到电商平台、CRM系统,再到金融平台、银行系统,项目需求复杂程度以指数级递增。再加上Web应用运营阶段时版本更迭对项目需求的影响,Web应用在开发之初就需要建立起一个完整的系统设计。与国家5年计划类似,系统设计在最初版本一定有着一定的空间与时间假定,例如一个最初设计为企业展示网站的Web应用,在一定时间与一定发展程度的影响下也绝不会跳出企业展示需求而变成银行系统。这样一个系统设计的假定与技术选型息息相关,而PHP和Java在Web领域的也有着不同应用场景。简单的系统设计PHP完全可以胜任, 而复杂的系统设计意味着后端代码需要模块化,要高内聚/低耦合以及代码重用,无疑面向对象的Java语言更适合这种复杂的场景。
3.运营成本
一个Web应用总归是要部署在网络中供其用户浏览使用的,而PHP与Java对运营成本的影响也会影响到其技术选型。对于Web应用的运营而言,无非部署与维护两大块。部署考虑的是服务器价格,维护考虑的是人员开支。部署方面,PHP Web与Java Web在网络中的部署方式通常有三种,一种是镜像部署,一种是虚拟主机,还有一种是云服务器。镜像部署只需要一台连接到网络的电脑,虚拟主机需要向主机商租用,云服务器类似与虚拟主机也需要向主机服务商租用,三者对于不同的应用场景各有优劣,其区别就在于服务器负载、稳定性与安全性等方面,详细区别读者可以自行百度,价格方面,无一例外,Web服务器对PHP这个脚本语言特别友好,所以PHP服务器普遍的要比Java服务器便宜;维护方面,PHP Web与Java Web的维护有两个方向,一个是应用异常,还有一个是服务器异常,应用异常让开发人员去调试,服务器异常如果是镜像部署让网络管理员与开发人员协同调试,而虚拟主机与云服务器则找相应的服务器提供商即可。运营成本经过部署与维护的综合考量:维护成本在人力成本中可以归算到人力成本这块,而部署成本除镜像部署不需要考虑PHP与Java的差别,虚拟主机与云服务器部署PHP则较低于Java。
综上所述
对于一个普通的Web应用而言,如企业展示网站、个人博客搭建、微商平台、小型ERP、CRM系统,技术角度PHP完全足够,价格角度PHP也便宜于Java,开发速度PHP略优于Java。对于一个复杂的Web应用而言,面向对象的Java将会是不二的选择,虽说费用高,但贵只有贵的一个缺点,便宜则只有便宜一个优点。需要特别提出的是,内网应用,也就是基于B/S架构但不挂入互联网的Web应用,我推荐Java。
总结
写到这里,有些读者可能觉得作者通篇都在讲PHP优于Java,笔者作为一个Javaer,本意陈述这两种语言的客观事实,不可否认的是,PHP在Web领域独领风骚,而Java则是Web领域企业级应用开发的首选。纵观当今Web应用的社会需求,大项目需求少于小项目,小项目又要求要快速迭代,而Java服务器以及部署成本高,导致真正适合用Java开发的Web应用少之又少。但总而言之,PHP能做的Java都能做,Java能做的PHP未必能做的好,PHP与Java的技术选型,最后还是需要多个因素综合考量。事实上Java作为最健壮的后端语言有着PHP无法比拟的优势,面向对象就是PHP这个脚本语言迈不过去的坎。笔者作为Android与J2EE两个平台的开发人员,考虑到编程语言的一致性,做Web应用,还是会用Java,买个云服务器,一来可以部署个项目管理SVN云服务器,二来部署个持续集成/自动化构建服务器jenkins或者TeamCity,既做开发环境又做生产环境,虽然我不是商人,但不意味着我是傻逼,把云服务器上花的钱给想办法利用起来,何乐而不为?