PHP做的Web应用性能就比Java差吗? 就拿查询MySQL获取结果集并在页面上显示数据为例来分析. HTTP请求由C级别的程序比如Apache/Nginx处理(Java的HTTP服务用的是Java开发的Tomcat等), PHP则调用内置在PHP引擎的C开发的数据库驱动mysqlnd(Java用的是Java开发的JDBC驱动)来操作MySQL, 查询的逻辑这个重点都落在了C/C++开发的MySQL身上, 然后就是把返回结果集放到PHP数组, 经过字符串处理后在页面输出, 这些逻辑并不复杂, PHP负荷并不大. 值得注意的是, PHP内置的大量库函数全部使用C实现, 而Java的核心运行时类库rt.jar则是使用Java实现.

在一些CLI下的压力测试中,因为存在大量的循环,很容易就触发Java的JIT热点编译,这时Java的计算性能上升到C的级别,这样的测试结果只能说Java在计算上的性能碾压动态解释型弱类型的PHP,而不是在Web上.对比具有JIT的机制的HHVM和PHP7的性能也能说明这个问题,在bench.php这个计算脚本的压力测试中,HHVM还是要比PHP7快1到2倍,但在WordPress等真实Web应用的测试中,HHVM和PHP7两者的性能相近.

PHP的运行模式要比Java健壮稳定得多,比如PHP-FPM是经典的多进程prefork模式,主进程会维持指定数量的工作进程数,可以设置工作进程在处理多少个请求后自动重启.反观Java多线程的Tomcat,除了内存膨胀,代码稍有不慎,就有可能让Tomcat崩溃退出,抛出一大堆的错误信息.

PHP开启ZendOpcache后,可以把脚本生成的opcode缓存到内存形成opcache供下次请求直接在ZendVM上执行,能带来一定的性能提升.

PHP进程(PHP-FPM,Apache)可以和MySQL/Memcached/Redis建立持久连接,一个PHP进程保持一个MySQL持久连接,省去每次请求都建立连接的开销.但需要注意PHP进程数不要超过MySQL最大连接数这一点,超时或重启MySQL后PHP-FPM在代码mysqli_connect时会自动重连,但会返回"MySQL server has gone away"的Warning信息,可以用@抑制错误输出.

PHP的热部署特性大大方便了开发和运维,这点是Java等其他语言(包括RoR/Python/Node.JS)所不能媲美的.

web开发为什么用java的多_java与php做web开发 最大的区别在那 为什么好多用java的...相关推荐

  1. java与物联网_java和php做物联网哪个好

    简单来说做物联网开发,本质上还是要做互联网相关的开发. 物联网涉及的对象和层级很多,其中底层开发直接面向硬件,使用的语言可能就是C语言或汇编语言.而面向客户端.app.平台类的开发就可以用php.ja ...

  2. java 并发执行_Java并发执行器的懒惰开发人员简介

    java 并发执行 如果我告诉您util.concurrent API自2004年起提供此类服务,我就会自欺欺人.但是,我想回顾一下一些很酷的功能. 并发专家,现在是时候关闭该窗口了. 所有其他人,请 ...

  3. java 日志设计_Java日志设计实践(3) - 开发篇

    1.选择恰当的日志级别 2.输出明确的提示文字和充分的现场信息 3.输出内容一行搞定,不要换行 4.其他 1.选择恰当的日志级别 选择日志级别时需要遵循一些通用规范,不可随意定义 log4j的日志级别 ...

  4. java前端设计_Java课程设计之——Web前端

    主要使用的技术 Javascript/JQuery html css Jsp 前期调查 能看到的网页大致可以分为两个部分,一个是搜索的首页index.html,一个是搜索结果页/s index.htm ...

  5. asmx+java客户端生成_java 调用webservice (asmx) 客户端开发示例

    这是本人第一次写博客,其实就是自己做个笔记,写的很粗糙,也希望能给跟我遇到同样问题的你一点帮助. 因为最近有个项目要调用webservice接口,之前接触的都是Java开发服务端和客户端的接口,开发前 ...

  6. java反射技术_java反射技术,逆向开发必备技能

    相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了, ...

  7. java统计图表代码_java swing下用jfreechart开发图表统计情况

    今天我们来给大家演示一下如何来用jfreechart生成统计图表并展现在swing组件上,首先开发jfreechart需要两个jar包:jcommon-1.0.16.jar和jfreechart-1. ...

  8. Java 重写 多态性_java多态性重写overriding和重载overloading的区别

    一.概述 就Java而言,当有人问: 什么是多态? 将重载或重写的区别解释为一个可以接受的答案? 如果您有一个抽象基类,它定义了一个没有实现的方法,并且您在子类中定义了该方法,那该方法是否仍然覆盖? ...

  9. java游戏服务器面试_我做游戏开发这八年

    点击上方"CSDN学院精品课",选择"置顶公众号" CSDN学院精品课  IT人的职业提升平台 作者 | kakashi8841 简述这篇文章并不是想教会大家如 ...

最新文章

  1. awk,sed,cut获取最后一列数据
  2. a = 3 中3在栈还是堆_56.堆、栈、方法区(3.0)
  3. notepad 没有plugin manager_自学英语的几个网站(免费网站)?性价比高的机构有没有?...
  4. [蓝桥杯2015初赛]移动距离
  5. MySQL配置日志服务器_mysql配置数据库日志
  6. 实用常识 | 分享一个好用的插件解决浏览器图片下载问题(老白嫖怪了)
  7. 痞子衡嵌入式:ARM Cortex-M文件那些事(1)- 源文件(.c/.h/.s)
  8. discuz开发学习
  9. python基础练习题30道
  10. 《自卑与超越》读书笔记
  11. 王佩丰 Excel 24节课 学习笔记
  12. 2012共享文件服务器,win server2012 r2 服务器共享文件夹设置
  13. UVA12716 LA6657 GCD XOR【GCD+位运算+前缀和】
  14. win7左上角白杠一直闪_win10换win7
  15. win8.1 or win server 2012 安装python3.5以上导致Error 0x80240017
  16. 如何使用 Kubernetes 部署 Flink 应用
  17. 制作hp服务器u盘,制作HP smartstart启动U盘
  18. QtCreator 忽略指定警告
  19. 开发一个简单易用的SDK的详细步骤(超详细,超适用)
  20. Pi-puck的ROS开发之路

热门文章

  1. 集合论——二元关系的定义组成及性质
  2. 层拖动Drag Div
  3. 基于 MongoDB 动态字段设计的探索 (二) 聚合操作
  4. eclipse设置格式化tab为4个空格和idea一样
  5. 【主席树】bzoj1112: [POI2008]砖块Klo
  6. 【转载】基于rasa的对话系统搭建(上)
  7. bzoj1191: [HNOI2006]超级英雄Hero
  8. 基于FPGA实现的高速串行交换模块实现方法研究
  9. 如何在类的外部修改类中的私有数据成员
  10. 大数据之-Hadoop3.x_Hadoop_MapReduce_介绍---大数据之hadoop3.x工作笔记0081