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的更多相关文章

  1. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  2. Java Web开发技术教程入门-JSP基本语法和九大内置对象

    这两天气温逐渐升高,好想把自己泡在冰块里······ 恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽恩嗯摁蒽.......今天阅读到了这本书的第四章-JSP基本语法.经过第一天的阅读,我们明白JSP技术是Java Web开 ...

  3. Java Web开发技术教程入门-初识动态网页

    这段时间学校搞了一个"阅战阅勇"的阅读活动,奖品还是挺丰富的~于是,奔着这些奖品,我去图书馆借了这本<Java Web开发技术教程>.一是为了那些丰富的奖品,二是为了回 ...

  4. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  5. .Net Web开发技术栈

    有很多朋友有的因为兴趣,有的因为生计而走向了.Net中,有很多朋友想学,但是又不知道怎么学,学什么,怎么系统的学,为此我以我微薄之力总结归纳写了一篇.Net web开发技术栈,以此帮助那些想学,却不知 ...

  6. Web开发技术的演变

    原文出处: WildFly   欢迎分享原创到伯乐头条 受到好文<Web开发的发展史>(英文)激发的灵感,写下我对web开发技术的认识. 1. 静态页面时代 大学时候,上机还得换卡穿拖鞋, ...

  7. .NET Web开发技术简单整理 转

    .NET Web开发技术简单整理 原文:http://www.cnblogs.com/SanMaoSpace/p/3157293.html 在最初学习一些编程语言.一些编程技术的时候,做的更多的是如何 ...

  8. 转Web开发的发展史---Web开发技术的演变

    转自:http://blog.csdn.net/zzzkk2009/article/details/9849431 在接下来的几个月时间里,我打算写一系列关于完整web开发的文章.这第一篇文章虽然有所 ...

  9. 【转载】Web开发技术发展历史-版本1

    原文在这里. Web开发技术发展历史 Web的诞生 提到Web,不得不提一个词就是“互联网”.Web是World Wide Web的简称,中文译为万维网.“万维网”和我们经常说的“互联网”是两个联系极 ...

随机推荐

  1. cesium编程入门(四)界面介绍及小控件隐藏

    感性认识 界面介绍,viewer Geocoder : 查找位置工具,查找到之后会将镜头对准找到的地址,默认使用bing地图 Home Button :视角返回初始位置. Scene Mode Pic ...

  2. linux安装spark-2.3.0集群

    (安装spark集群的前提是服务器已经配置了jdk并且安装hadoop集群(主要是hdfs)并正常启动,hadoop集群安装可参考<hadoop集群搭建(hdfs)>) 1.配置scala ...

  3. Working with Metal—Overview

    看完这个 WWDC 之后的总结. Metal 可以在单位时间内提供 10 倍的 draw call 调用. Background About Draw Call 每一次 draw call 调用都必须 ...

  4. 实验二 输出“Hello Word!”,测试主方法的输入参数和心得体会

    实验二 一.输出“Hello World!” 1.首先打开eclipse,如下图所示. 2.选择一个工作空间,如下图所示. 3.接下来,点击[Java项目]创建一个Java项目,如下图所示. 4.然后 ...

  5. Libra的第一天

    wuli乖乖,今天是你降生第一天,以后的几年可能我们都会朝夕相处,你的成长就是我的向上,一起加油吧

  6. Spring Boot入门教程(1)

    Spring Boot入门教程(1) 本文将使用Spring Boot一步步搭建一个简单的Web项目来帮助你快速上手. 将要用到的工具 JDK 8 IntelliJ IDEA(Ultimate Edi ...

  7. linux系统服务管理

    centos7的服务管理命令 systemctl start 服务名称 systemctl stop 服务名称 systemctl status 服务名称 systemctl restart 服务名称 ...

  8. Python 全栈开发:day3 作业与默写

    # 1.有变量name = "aleX leNb" 完成如下操作:name = 'aleX leNb'# 1)移除 name 变量对应的值两边的空格,并输出处理结果print(na ...

  9. PHPStudy环境下搭建composer

    第一种方法(亲测有效) 1. 找到composer的安装目录:D:\phpstudy\PHPTutorial\tools\composer 2.把目录下的 composer.bat 和 compose ...

  10. BZOJ - 1009 KMP+可达矩阵

    题意:存在一个长度为m的串str,求长度为n的不含str子串的字符串的方案数 什么鬼题目 设\(f[i][j]\):长为\(i\)的串中以\(i\)结尾的长度为\(j\)的后缀 与 模式串(str)中 ...