“做网站用PHP,做项目用Java”之浅析

这是一个挺有趣的技术话题,以下部分内容来自于互联网。

首先由一个前提,不考虑前端用PHP,后端用Java或者C等实现的网站架构,因为这种网站对于90%以上的开发人员来说是一辈子也不会接触到的领域。

1.源代码保护:
虽然现在有各种各样的Java类破解器,但是相对于PHP如果不用Zend提供的高价收费软件进行加密的话源代码完全不设防,已经好了太多了。

而没有源代码保护的项目没法做长久生意,因为你卖给客户的项目客户可以拿去卖给别人甚至还可以修改功能,也就是说你如果把项目卖给竞争对手的话会很惨。

还有一个就是如果没有源代码保护,后期的二次开发之类的活就很有可能旁落。

2.项目客户的选择:
在大部分企业CIO的眼中,Java技术是非常强大无所不能的,所以,客户有时候会指定JAVA作为开发语言。

3.从网站和项目的区别来分析:
网站,受众可以是这个地球上任何一个人,只要他们可以上Internet。

项目,不是说谁想用就可以用的,得有一定的身份或者权限才可以,很多项目一般来说都属于内部系统,在内网运行。

网站结构相对来说都比较简单,由于是面向所有人的,所以PHP的一些特性就非常容易被操作,可以非常自由方便的POST一个数组,用一个htmlspecialchars函数来防止XSS攻击,只需要简单调用一下md5函数就可以获取这个字符串的MD5值等等。

PHP非常自由、方便、快捷;而一个Java新手搭建一个SSH的平台就需要折腾好长时间。

PHP可以非常方便的把动态的数据库信息放到页面上;而如果用Struts2的标签,我们不得不把数据库读出来的信息放到一个POJO中。

从设计上来说,项目的设计显得非常重要,各种UML甚至可以直接生成Java代码。

4.从技术架构来说:
Java语言相比PHP有明显的优势,Java使用的是面向对象的系统设计方法,而PHP还是采用面向过程的开发方法。

PHP只能实现简单的分布式两层或三层的架构,而Java可以实现多层架构。Java的数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开,而且现在不同的层都已经有一些成熟的开发框架的支持。例如Struts就是利用Java的web开发技术实现了MVC的设计模式,而在业务逻辑层也有Spring框架,数据库持久化层有Hibernate等框架。这些框架可以方便开发者高效、合理、科学得架构多层的商业应用。

从数学运算和数据库访问速度来讲,Java的性能也优于PHP。实际上,对于跨平台的大型的企业应用系统来讲,Java几乎已经成为唯一的选择,但是在于Web网站应用开发来讲,Java却面临着被PHP边缘化的危险,几乎所有的虚拟主机都支持PHP+MySQL,而支持Java的却少之又少。

很多著名的大型网站都是基于PHP的,而成功的Java网站却寥寥无几,这又是什么原因呢?

Java的理念是“一次编写,处处运行”,Java在应用框架底下的架构是无与伦比的,远胜过其他任何语言,Java的框架利于大型的协同编程开发,系统易维护、可复用性较好。PHP很容易自学,能快速简洁地编写代码,适合于快速开发,中小型应用系统,开发成本低。

理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果,尽管Java的数学计算和数据库访问都有优势,架构也相当完美,但是PHP却可以简单轻松地支持高强度Web访问,能够快速开发应用,使得用PHP开发一个网站比用Java开发一个网站要快得多,容易的多。

Java所拥有的优点只适合传统的以软件项目为核心的开发模式,而PHP更适合于以客户为核心的SaaS的开发模式,因此,PHP目前在Web网站开发的优势完全是因为Web网站开发的特殊性而导致的,并非编程语言特性所决定。

5.从软件调试上说:
java的特性决定了如果修改调用的函数的代码,那么就需要重启容器才能生效,它需要重新编译。如果这是在服务器上面的,那么就是改一次代码重新启动一次服务器。光这点,就让人非常受不了。开发者调试非常的不方便。

借用某人的一句话:
“我不是说JAVA不好,在一些前期需要快速开发并上线的产品上面,它确实是过于笨重了。开发过程中动不动就要重启服务器,每一次的过程都很漫长,而且还配合着IDE使用,实在不爽。一天的时间就浪费在这里了。”
来自前端客栈

2012年3月9日 | 归档于 Java, PHP, Web开发
  1. 2012年3月15日 20:32 | #1

    总结的不错,如果是从创业的角度来看,如果需要快速的实现我脑中的一个想法,那我肯定会用php或者ROR,jsp迭代的速度太不尽人意了。

发表评论

XHTML: 您可以使用这些标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>