前言
我个人还在使用PHP5.6,7.3的话纯粹是拿来做测试的,因为PHP7已经支持强类型了,不再支持根据字符串调用函数的方法了,所以我的个人项目的PHP版本停留在了5.6。
最近的话想折腾一下,试试PHP5.6、7.3和Tomcat7、8、9的各方面速度怎么样,以前看过一些文章说PHP操作数据库的速度更快,而Java处理业务逻辑的速度更快,所以我就想业务逻辑交给Java去处理,而数据库操作就交给PHP去处理。
但是否这样速度就更快呢,对比一下,数据说话!
顺便说一下,服务器管理我用的是宝塔面板,服务软件的安装全部都是在宝塔面板中进行的。
测试前言
在测试的过程中发现Tomcat7和8.5的结果相仿,估计9也是这个结果,所以Tomcat9我就不测试了。Tomcat部分只在业务逻辑处理测试7和8.5,其余只测试8.5
服务器配置
● 系统:CentOS Linux 7.6.1810 (Core)
● 宝塔版本:6.9.8
● 厂商:百度智能云
● 类型:密集计算型ic3
● CPU:1核
● 内存:1GB
速度对比
业务逻辑处理速度
从0加到10000000
PHP5.6
<?php $time_start = microtime(true); $count = 0; for ($i = 0; $i < 10000000; ++ $i) { $count += $i; } $time_end = microtime(true); echo ($time_end - $time_start); // 结果:0.34648394584656
结果:0.34648394584656
PHP7.3
<?php $time_start = microtime(true); $count = 0; for ($i = 0; $i < 10000000; ++ $i) { $count += $i; } $time_end = microtime(true); echo ($time_end - $time_start); // 结果:0.12653613090515
结果:0.12653613090515
结论:PHP7.3在业务逻辑处理方面比5.6快了三倍
Tomcat7
<% java.util.Date d1 = new java.util.Date(); long start_time = d1.getTime(); // 单位:毫秒 long count = 0; for (long i = 0; i <= 10000000; ++ i) { count += i; } java.util.Date d2 = new java.util.Date(); long end_time = d2.getTime(); // 单位:毫秒 out.println(end_time - start_time); // 结果:17毫秒 %>
结果:17毫秒,多刷新几次就变成了4~5毫秒,主要以4毫秒为主
Tomcat8.5
结果:99毫秒,多刷新几次也是4毫秒
业务逻辑测试总结
毕竟Java是半编译半解释型的语言,速度快很正常,PHP7达到了100多毫秒的样子,就是PHP5逊了点才300多毫秒
数据库IO测试
使用PDO的prepare和execute进行测试
PHP5.6
● INSERT插入10000行:37.575320005417秒
● SELECT读取10000行:0.010236978530884秒
● SELECT循环读取10000行:1.0460438728333秒
● UPDATE更新10000行:0.044967889785767秒
● UPDATE循环更新10000行:36.463224887848秒
● DELETE删除10000行:0.034432888031006秒
● DELETE循环删除10000行:37.198384046555秒
PHP7.3
● INSERT插入10000行:33.949599027634秒
● SELECT读取10000行:0.021260023117065秒
● SELECT循环读取10000行:1.0032389163971秒
● UPDATE更新10000行:0.040410995483398秒
● UPDATE循环更新10000行:36.759881019592秒
● DELETE删除10000行:0.046122074127197秒
● DELETE循环删除10000行:35.682950973511秒
PHP总结:数据库IO几乎没有版本差异,还有执行单条语句比循环执行一条语句速度快
Tomcat8.5
编译前为第一次执行,编译后为第二次执行
● INSERT插入10000行:编译前:39.738秒,编译后:37.104秒
● SELECT读取10000行:编译前:0.079秒,编译后:0.028秒
● SELECT循环读取10000行:编译前:2.303秒,编译后:1.775秒
● UPDATE更新10000行:编译前:0.060秒,编译后:0.040秒
● UPDATE循环更新10000行:编译前:43.326秒,编译后:40.847秒
● DELETE删除10000行:第一次执行:0.137秒
● DELETE循环删除10000行:第一次执行:40.597秒
总结:Java的业务逻辑能力强,但数据库IO速度比PHP慢,PHP则相反。
混合开发测试
业务逻辑由Java编写,PHP通过CURL调用Java,测试速度
结果:
第一次测试:0.51814317703247秒
第二次测试:0.016547918319702秒
总结:
第一次测试可能是因为Java端需要编译而产生的时间,第二次测试则不再需要编译,所以速度很快。
后面又进行了若干次测试,结果均比较理想,速度上比PHP7都要快10倍左右。
只不过混合开发的缺点就是开发效率不高,可能会产生比较多的坑,但运行上能各取其优。
我个人对此表示中立态度,不推荐也不反对,因为各种项目说不好可能就存在着相关需求用这种方法可能是最佳的选择。