Web开发技术选型之Java与PHP
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中只需要一个按钮。
4.团队配合
在提倡前后端分离的互联网环境下,模板开发方式导致的前后端高耦合越来越遭人摒弃,如今,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还是JavaEE?
涉及到这个问题,作为应用拥有者,考虑问题无非从以下几点:
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语言更适合这种复杂的场景。(大家可以加入爱好集结,一同交流:342836117) 欢迎交流: (858288017)
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,既做开发环境又做生产环境,虽然我不是商人,但不意味着我是傻逼,把云服务器上花的钱给想办法利用起来,何乐而不为?
转自:https://blog.csdn.net/qq_41214527/article/details/78993430
Web开发技术选型之Java与PHP的更多相关文章
- 《Tomcat与Java Web开发技术详解》思维导图
越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...
- Java Web开发技术教程入门-JSP基本语法和九大内置对象
这两天气温逐渐升高,好想把自己泡在冰块里······ 恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽.......今天阅读到了这本书的第四章-JSP基本语法.经过第一天的阅读,我们明白JSP技术是Java Web开 ...
- Java Web开发技术教程入门-初识动态网页
这段时间学校搞了一个"阅战阅勇"的阅读活动,奖品还是挺丰富的~于是,奔着这些奖品,我去图书馆借了这本<Java Web开发技术教程>.一是为了那些丰富的奖品,二是为了回 ...
- Web开发技术发展历史
Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...
- .Net Web开发技术栈
有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...
- Web开发技术的演变
原文出处: WildFly 欢迎分享原创到伯乐头条 受到好文<Web开发的发展史>(英文)激发的灵感,写下我对web开发技术的认识. 1. 静态页面时代 大学时候,上机还得换卡穿拖鞋, ...
- .NET Web开发技术简单整理 转
.NET Web开发技术简单整理 原文:http://www.cnblogs.com/SanMaoSpace/p/3157293.html 在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何 ...
- 转Web开发的发展史---Web开发技术的演变
转自:http://blog.csdn.net/zzzkk2009/article/details/9849431 在接下来的几个月时间里,我打算写一系列关于完整web开发的文章.这第一篇文章虽然有所 ...
- 【转载】Web开发技术发展历史-版本1
原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...
随机推荐
- WPF:MVVM模式下ViewModel关闭View
不外乎两种基本方法. 消息通知和参数传递. 一.消息通知 利用View里的IsEnable属性 原理是这样的: 1.UI中的IsEnabled绑定VM中的属性 2.UI的后台代码中,注册IsEnabl ...
- GO学习笔记 - 用":="实现短声明变量!
对于Delphi程序员,":="这个符号再熟悉不过了,表示对变量赋值!在GO语言中,同样表示赋值,但是和Delphi有些不同,不同就在于不需要var变量名称了!GO语言中的&quo ...
- windows挂载网络盘
@echo offset filename=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%set filename="DataBak-%filename%"ne ...
- video视频内容填充整个播放空间方法
关于video视频内容填充整个播放空间方法一般上传的视频都没法占满video,看起来很不美观,解决办法很简单video{ object-fit:fill;}
- 中山纪念中学培训DAY1
哇啊啊啊啊啊啊$……$ 并不像说环境怎么样. $Day1$模拟赛 稳重一点选了提高$B$ 然后$5min$后: $t1$装压$DP$最短路 $t2$裸地贪心 $t3……$哇$t3$怎么做啊啊啊啊. $ ...
- long int double float
参考:https://blog.csdn.net/ideality_hunter/article/details/78432486 long是长整型,64位 int是短整型,32位 double是双精 ...
- AtcoderExaWizards 2019题解
传送门 \(A\ Regular\ Triangle\) 咕咕 \(B\ Red\ or\ Blue\) 咕咕咕 \(C\ Snuke\ the\ Wizard\) 我可能脑子真的坏掉了-- 容易发现 ...
- CTF中密码学一些基础【三】
本文作者:i春秋签约作家——MAX. 看看今天教程: 看着几个字符在键盘的位置,直接就是三个圈圈,圆心的三个字符就是答案 非常简单! 答案就是KEY 看题解密就好了!! 根据提示Asp encode解 ...
- Activity启动流程
Activity启动过程中做了哪些事情?下面的时序图展示里启动过程中函数的调用过程, 从图中可以知道大概流程. 在介绍细节的时候是从上往下函数调用过程介绍的,如果不知道某个函数是在哪里被谁调用的,可以 ...
- 简单列举几种常用 FTP
简单说下几种FTP FTP:文件传输协议(File Transfer Protocol,FTP) SFTP:OPENSSH 提供的隧道级文件传送(file transfer) FTPS:支持传输层安全 ...