PHP和Java俩者的discrepancy

最近接触了些PHP的东东,胡师兄leave me some questions: PHP and JAVA 在 web development上的性能表现有什么本质上的不同?
冒冷汗啊
于是乎 —> 开题,GO!

本文将在P(PHP5)、J(Java 6)语言本身号称的自身特点 , 系统架构设计的不同 ,  以及最为核心(个人认为)的内存机制方面进行比较 . 希望各位师兄师姐指正 .

一、语言特点比较(形式化比较)
先来点没有营养的(虚线括的部分 , 可略过) , 各位看官 且听我细细道来 :
————————————————————————-
来自PHP official site 的 definition : PHP is a widely-used general-purpose scripting language that is especially suited for Web development and can be embedded into HTML , so PHP是一种解释性的服务器脚本语言 , 语法上类C . 同其他解释性语言一样 , 其无需在执行程序之前将source code编译成机器能理解的代码 , 程序的编译、解释、和执行 , 解释器 or  编码器会帮你搞定一切(Zend Engine). 而when java 执行 program 之前, J首先将source code编译成 *.class , 也就是字节码(bytecode)文件 , 然后依赖不同platform的virtual machine解释执行 *.class , 从而实现传说中的“一处编译,到处运行” (实际上是“一次编写,处处调试”  >_<).

至于OO , 没什么可说的 . 另外网上的文章有提到数据库访问 , 大概是说PHP数据库访问的功能通用性方面不如Java , 面对不同数据库需做不同的、大量的修改配置 . 师弟检索了一下 ,  相对 PHP+Oracle 的开发环境下 配置是很繁琐 , 不如JDBC只load dirver + 设置四五行的connection property 方式简单 .于是疑问一 产 生 : PHP + MySQL 这种绝配、成熟而且轻量级的组合放在那 , 为什么要用Oracle 啊 ???如果是复杂的大型项目 , PHP本身结构上的缺陷 使项目的开发和维护上 相对困难的多 , 那么选择 PHP + Oracle 这样的组合是不是有些不妥呢???

————————————————————————–
写到这里 , 先说说PHP的缺陷 :

1. 对递归的不良支持
递归这种函数调用自身的机制 or 特性可以把某些复杂的东西变得很简单 . 但不幸的是 , PHP并不擅长递归 . Zeev(全名Zeev Suraski , Zend 的作者之一 , 另一位名叫Andi Gutmans .         Zeev + Andi = Zend)说 : “PHP 对密集数据使用了栈方式 , 而不是使用堆方式 . 也就是说它能容忍的递归函数的数量限制和其他语言比较起来要少很多 .
2. N多PHP模块都不是线程安全的
PHP的发明者说PHP的核心是线程安全的 ,  但是非核心模块那 ?这也就是PHP开发Team不推荐在Apache 2 多线程模式下运行的原因所在  .
3. No namespace
namespace的缺少使得PHP的函数名非常异常特别相当恐怖的长  ~_~ , 难书写 ,  给开发带来一定的麻烦 .
至于缺少 成熟的 framework命名规则的混乱 , 个人感觉无关痛痒 , 可以通过协商来解决 , 并不是语言核心级别的硬伤 .

/* Comment :  Java的缺陷还在研究中  , 不过首当其冲的肯定是慢了, 但是号称JIT(Just-In-Time)编译技术可以使Java的执行效率提高 , 也不知道这是哪个年代的事情 . 不知道 –> 学习中…  现可参考 http://as.pku.edu.cn/ */

二、系统架构设计

从技术架构来讲 , Java语言相比PHP有明显的优势 . Java使用的是面向对象的系统设计方法 , 而PHP还是采用面向过程的开发方法 .  PHP只能实现简单的分布式两层或三层的架构 , 而JAVA可以实现多层架构 . 数据库层(持久化层)、应用(业务)逻辑层、表示逻辑层彼此分开(传说中的MVC) , 而且现在不同的层有很多成熟的开发框架的支持 . 例如Struts 2.0 (个人较喜欢WebWork)就是利用Java的web开发技术实现了MVC的设计模式 , 而在业务逻辑层也有Spring框架 , 数据库持久化层有Hibernate or iBATIS等框架 . 这些框架可以方便开发者高效、合理、科学得架构多层的商业应用 . 在这种分而治之的思想引导下 , 便能实现“高内聚、低耦合” , 也能将具体的问题割裂开来 , 易于控制、易于延展 , 更易于分配资源 .

(扯点别的 , 可略过)

从数学运算和数据库访问速度来讲 , Java的性能也优于PHP . 实际上 , 对于跨平台的大型的企业应用系统来讲 , Java几乎已经成为唯一的选择(微软.NET不支持跨平台), 但是在于 Web网站应用开发来讲 , Java却面临着被PHP边缘化的危险 , 几乎所有的虚拟主机都支持PHP+MySQL , 而支持Java的却少之又少 , 在资源上 , 网上有不计其数的PHP资源 , 很多著名的大型网站(such as Facebook or Mediawiki etc.)都是基于PHP的 , 而成功的Java网站却寥寥无几 .

Java 的框架利于大型的协同编程开发 , 系统易维护、可复用性较好 . 而PHP很容易自学 , 让热备能快速简洁地编写代码 , 适合于快速开发 , 中小型应用系统 , 开发成本低 . 在调试、发布上 , PHP也较Java简单 . 这些理念上的不同导致了Java和PHP在Web应用开发上显示了不同的结果 , 而并非是编程语言本身特性所决定 .

三、内存机制
首先简要的介绍下mencached :
来自memcached official site 的 definition : memcached is a high-performance, distributed memory object caching system , generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load . (具体可参考 http://www.danga.com/memcached/)

memcached 的工作原理
首先 memcached 是以守护程序方式运行于一个或多个服务器中 , 随时接受客户端的连接操作 , 客户端可以由各种语言编写 , 目前已知的客户端 API 包括 Perl/PHP/Python/Ruby/Java/C#/C 等等 . PHP 等客户端在与 memcached 服务建立连接之后 , 接下来的事情就是存取对象了 , 每个被存取的对象都有一个唯一的标识符 key , 存取操作均通过这个 key 进行 , 保存到 memcached 中的对象实际上是放置内存中的 , 并不是保存在 cache 文件中的 , 这也是为什么 memcached 能够如此高效快速的原因(同样 , 这也就是为什么PHP相比Java Web应用快的多的原因了 , http://www.php.net/manual/en/intro.memcache.php) . 注意 , 这些对象并不是持久的 , 服务停止之后 , 里边的数据就会丢失 .

好了 , 先 cut 了   写作业去了. 剩下的部分会尽快完成

To be continued …

附 : 针对PHP的解释性 , 有些疑问 : 现在有许多公司或团体开发PHP的编码器 , 将PHP程序编译成字节码(bytecode) , 再通过服务器上安装对应的程序来执行PHP脚本 . 号称是为了安全 , 但是肯大爷说过:You can’t trust code that you did not totally create yourself . 不理解那些公司为什么这么做 !!!研究…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值