最近接触了些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 . 不理解那些公司为什么这么做 !!!研究…
分享到:
相关推荐
Mean Maximum Discrepancy计算代码,分为线性核和高斯核两种,以pytorch书写的
Maximum Classifier Discrepancy(MCD)是一种新的不受监督域适应方法,旨在解决域适应问题中存在的挑战,即源域和目标域之间的分布差异问题。该方法通过使用两个分类器来检测目标域样本中的差异,从而实现域适应。 ...
利用matlab来实现Maximum Mean Discrepancy(最大均值差异)的计算。
综上所述,《THE DISCREPANCY METHOD IN COMPUTATIONAL GEOMETRY》不仅提供了差异理论的基本概念和方法,还展示了这些理论在解决实际计算几何问题中的具体应用,包括但不限于去随机化算法的设计和多维搜索问题的复杂...
A Discrepancy Aware Framework for Robust Anomaly Detection 一种鲁棒异常检测的差异感知框架
specific aims are: (1) to develop a computerized algorithm for medication discrepancy detection between patients’ discharge prescriptions (structured data) and medications documented in free-text ...
ʱ discrepancy”涉及到Java中的异常处理机制。在Java中,异常分为两大类:运行时异常(如`NullPointerException`)和检查型异常(如`IOException`)。运行时异常通常是编程错误的结果,例如访问空对象或数组越界,...
java8集合源码最小化错误 复制 sbt > compile [ change crash2.scala ] > compile [ crash ] 日志: [info] Set current project to dotty-simple (in build file:/Users/pgiarrusso/git/bug/) [info] sbt server ...
标题"MMD_mean_mmd_discrepancy_weekarq_最大均值差异_源码.zip"表明这个压缩包包含了关于“最大均值差异”(Maximum Mean Discrepancy, 简称MMD)的源代码,特别关注的是与“周平均”(weekarq)相关的计算或应用。...
"tas_discrepancy_finder" 是一个用于查找和分析温度反演(TAS,Temperature Anomaly Signature)不一致性的工具。在IT行业中,特别是在气候建模、环境监测或数据分析领域,这种工具具有重要意义。它可以帮助科研...
最大均值差异(Maximum Mean Discrepancy,简称MMD)是机器学习领域中一种衡量两个概率分布之间差异的方法,尤其在生成模型、域适应和无监督学习中扮演着重要角色。MMD的理论基础源于统计学,它通过计算不同分布的...
在`NB-discrepancy-main`这个压缩包文件中,很可能是包含了用于分析和展示NB差异的代码、文档或者示例数据。这些内容可能涉及如何编程实现纽康-本福德定律的检验,如何计算NB差异,以及如何解读和可视化结果。文件...
数理统计是统计学的核心部分,它关注如何有效地收集、整理和分析随机性数据,以对感兴趣的问题做出推断或预测。数理统计不仅是一门理论学科,而且具有极强的应用性,广泛应用于各种领域,只要有大量数据存在,就可能...
300F系统应用
Discrepancy formulas and classification and identification issues that affect diagnoses of learning disabilities Psychology in rhe Schools Volume 28. July 1991 DISCREPANCY FORMULAS AND ...
Diagnostic utility of the K-ABC and WISC-R/PIAT in determining severe discrepancy Psychology in the Schools Volume 24, October 1987 DIAGNOSTIC UTILITY OF THE K-ABC AND WISC-R/PIAT IN DETERMINING...
此外,"系统开源"的标签表明该代码是公开的,可供研究者和开发者参考和改进。开源项目通常会提供详细的文档和示例,以帮助用户理解和应用代码。 总之,"吉布斯采样MATLAB代码"为我们提供了一个探究贝叶斯框架下模型...
We report a broadband polarization-independent wavelength conversion by reducing the dispersion discrepancy between the fundamental transverse electric (TE) and transverse magnetic (TM) modes in a ...
Sobol 序列是一种低 discrepancy 的伪随机数序列,常用于蒙特卡洛模拟和全局优化,其特点是均匀分布和低的相互依赖性,可以有效避免局部最优解,提高算法的探索能力。而“纵横交叉策略”可能指的是在算法迭代过程中...
8. **校偏函数**:`reviseL1(uchar discrepancy)` 和 `reviseL2(uchar discrepancy)` 用于校正小车在行驶过程中的偏移。根据参数 `discrepancy` 的值,函数会调整小车的转向以保持在轨迹上,通过改变PORTB的输出状态...