设为首页 收藏本站
查看: 887|回复: 0

[经验分享] PHP和Java俩者的discrepancy

[复制链接]

尚未签到

发表于 2017-3-28 14:09:12 | 显示全部楼层 |阅读模式
  最近接触了些PHP的东东,胡师兄leave me some questions: PHP  and JAVA 在 web development上的性能表现有什么本质上的不同?
冒冷汗啊
于是乎 —> 开题,GO!
  本文将在P(PHP5)、J(Java 6)语言本身号称的自身特点 , 系统架构设计的不同 ,  以及最为核心(个人认为)的内存机制方面进行比较 . 希望各位师兄师姐指正 .
  一、语言特点比较(形式化比较)
先来点没有营养的(虚线括的部分 , 可略过) , 各位看官 且听我细细道来 :
————————————————————————-
来自PHP official site 的 definition : PHPis a widely-used general-purpose scripting languagethat is especially suited for Web development andcan 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(全名ZeevSuraski , 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 applicationsby 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 thatyou did not totally create yourself . 不理解那些公司为什么这么做 !!!研究…

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356591-1-1.html 上篇帖子: php curl 伪造IP来源 示例 下篇帖子: [转]OOP的PHP长啥样
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表