上篇( -R/P2SN )我们概括地解释了使用服务器端、客户端各种缓存、压缩优化提速-gMIS等手段. 这次更具体到编程语言层面讨论优化。行文此前背景:

1.  -gwa2 vs -thinkphp, -R/92SJ

2. php的所谓优化, -R/22SK

3. 关于Log4j和Sysytem.out.println的性能比较测试, -R/I2SL

关于Java/PHP的性能评测和优化,大致结论是面向对象编程(OOP)等是拿性能换便利(Convenience)、强壮(Robustness)等,除了描绘客观复杂世界所需外,深层的另因可能是硬件性能越来便宜,而人工越来昂贵。本文可以看作是其中 2. 的接续,尝试探索的是,在PHP编程中,使用C语言等实现的Module/模块(内置模块)比PHP脚本写的Module/模块(脚本模块)快吗? 如果快,同样的功能,能快多少?

距离上次进行类似的测试,已经十多年过去了,PHP和Java都发展了很多版本,日益成熟和稳定,而C语言却保持了相对的稳定,现在重新做一些这样的性能对比,颇有时空感。

要做这样的实验而且有一定实际意义的话,机会要等或者碰的,此前进行的将 -Base62x 进行多版本语言开发工作,刚好能满足这一实验的目的。我们成功将地C语言的 -Base62x 编译成PHP 7 的一个ext模块 ext/base62x ,同时也使用PHP脚本语言实现了 -Base62x 的版本,名为 base62x.class.php, 相应地代码都可以从 -github-wadelau 下载获得。

有了这些准备工作,我们要进行的实验是使用同样的算法,对一段文本进行 -Base62x 编码,C语言实现的PHP ext/base62x 模块会比使用PHP脚本编写的 base62x.class.php 运行得快吗? 能快多少?

基于此,我们编写了测试程序,进行一万次随机字符串的 base62x 编码,将其运行耗费时间进行记录对比。

测试程序主体, basetest.php

使用base62x.class.php的编码方法,

$b62x = new Base62x();

$s_encoded = $b62x->encode($s);

使用PHP内置C语言实现的同样算法模块base62x.c的编码方法,

$s_encoded = base62x_encode($s);

使用C语言的模块需要重新编译PHP的安装目录对应的程序,关于编制PHP扩展模块的详细操作参考,-R/d2SH , -R/M2SJ .

分别使用上述方法进行10,000次编码,使用PHP的内置函数microtime进行计时,记录每进行10,000次编码操作时,两者所花费的时间,重复进行10次,记录列如下。

base62x.class vs. base62x.c for 10K strings encoded operations

Time cost for

Time cost for

base62x.class.php

base62x.c

1

0.15378499

0.006615877

2

0.154273987

0.006779909

3

0.161313057

0.00666213

4

0.178726912

0.00667119

5

0.193426132

0.007475138

6

0.162053108

0.00752902

7

0.169737101

0.00692296

8

0.155719995

0.006750107

9

0.164766073

0.007402897

10

0.196639061

0.006860018

Faster x

avg

0.169044042

0.006966925

24.2637964

max

0.196639061

0.00752902

26.11748314

min

0.15378499

0.006615877

23.24483765

测试主机环境为普通台式机PC上运行的VMWare Station中运行的OpenSuSE Linux Leap 64bit,PHP 7.0.

运行数据显示,使用PHP脚本语言实现的base62x.class进行一万次编码平均需要花费0.1690秒,也即需要169.0ms;而使用C语言实现的同样的算法的base62x算法的一万次编码平均需要花费的时间为0.0070秒,也即7.0ms;两相比较,前者是后者的24倍,也即base62x.class比base62x.c多用了20多倍的时间,后者比前者快了20多倍。

进一步地拉长与之前的对比,PHP的优化思路,优化逻辑,减少不必要的操作步骤,减少自定义的方法、类库,尽量使用内置方法、类库,当这些还不足够快时,终极提速或者能有较大提速的就是使用类似C语言以PHP扩展模块的方式进行尝试。

针对这个终极优化思路,之前只是定性的分析,这次有了定量的分析,印证了之前的分析和推测。

结合之前提到的针对 Java 的 Log4j 和 System.out.println 对比,似乎这种终极优化也可以应用到 Java 的编程中,通过使用JNI调用Java对外部C/C++等实现的扩展,也能否取得20:1点提速效果,这还有待进一步地实验。

经次实验可以大致地得出,同样算法,使用C语言实现的PHP扩展的内置模块比使用PHP脚本编写的OOP模块要快很多,其比值大约在 20:1 左右。

Base62x: An Alternative Approach to Base64 for non-Alphanumeric Characters.

Base62x 是无符号的Base64编码方案。在文件系统、网络系统中可以安全地使用,同时是各种变种Base64编码方案的理想替代品。

tal php x 1,20:1, PHP性能评测Base62x:内置模块 vs. 脚本模块相关推荐

  1. MaxCompute2.0性能评测:更强大、更高效之上的更快速

    原文链接:http://click.aliyun.com/m/13999/MaxCompute2.0(原Odps):通过性能评测,MaxCompute2.0离线计算比同类产品Hive2.0 on Te ...

  2. 链表竟然比数组慢了1000多倍?(动图+性能评测)

    这是我的第 215 期分享 作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 数组和链表是程序中常用的两种数据结构,也是面试中常考的 ...

  3. 中小企业上云首选,华为云全新云服务器S6性能评测分析

    今天,华为云全新弹性云服务器ECS通用计算型云服务器S6(以下简称为"华为云S6云服务器")正式发布,至顶网云能力评估小组对其展开了一场新的基于业务应用的云主机测试,对这款号称&q ...

  4. Nvidia Tesla P100 性能评测

    GTX 1080/1070虽然性能很强悍,但它们在全新的帕斯卡家族中只能算是中档水准,真正的大杀器是顶级大核心GP100,拥有3840个FP32单精度.1920个FP64双精度CUDA核心,主要面向高 ...

  5. opporeno3详细参数_opporeno3pro参数配置详情-opporeno3pro手机性能评测

    opporeno3pro是opporeno3同系列手机机型,这款手机主打的就是手机拍摄性能,在手机拍照方面还是可圈可点的,那么这款手机值不值得买呢?下面就是小编为大家带来的opporeno3pro详细 ...

  6. 腾讯云标准型S3服务器独享100%CPU性能评测

    腾讯云服务器标准型S3采用至强Skylake全新处理器,DDR4内存,内存带宽最高10Gbps,腾讯云标准型S3服务器1核2G优惠价95元一年,288元三年,2核4G3M带宽优惠价568元一年,还有4 ...

  7. Memcached客户端性能评测报告

    转载:http://wenku.baidu.com/view/944935a15901020206409c08 Memcached客户端性能评测报告 1.     Memcached客户端简介 本次m ...

  8. 2023腾讯云轻量应用服务器性能评测

    腾讯云轻量应用服务器性能如何?CPU型号主频.内存.公网带宽和系统盘存储多维对比,轻量应用服务器会不会比云服务器CVM性能差?相对于CVM云服务器轻量服务器更适合轻量级的应用,轻量服务适合中小企或个人 ...

  9. 一分钟腾讯云轻量应用服务器性能评测(慎入坑)

    腾讯云轻量应用服务器性能评测,轻量服务器CPU主频.处理器型号.公网带宽.月流量.Ping值测速.磁盘IO读写及使用限制,轻量应用服务器CPU内存性能和标准型云服务器CVM处于同一水准,所以大家不要担 ...

  10. 阿里云S6服务器共享型CPU处理器性能评测

    阿里云服务器S6为共享型云服务器,CPU采用Intel(R) Xeon(R) Platinum 8269CY,主频2.5 GHz,睿频3.2 GHz,云服务器ECS共享型S6实例采用非绑定CPU调度模 ...

最新文章

  1. python pytz 获取指定时区的时间
  2. python装饰器作用-python 装饰器
  3. 使用阿里云ACM简化你的Spring Cloud微服务环境配置管理 1
  4. flink中写入行存储、列存储时设定checkpoint多久时间间隔另存一个新文件
  5. 编译AjaxControlToolkit发生错误如何解决?
  6. 测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...
  7. python batch_size_深度学习中的batch的大小对学习效果有何影响?
  8. 测试工程师,必须掌握的shell变量知识
  9. Gstreamer调用pulseaudio播放流程(十三)
  10. ( 4 )MySQL中的数据类型(字符串类型)
  11. 地理探测器“运行时系统找不到指定文件”报错
  12. win10照片查看器_win10最好的看图软件?win10照片查看软件推荐
  13. 【java】java Jvm内存结构
  14. 如何获得免费卡巴斯基激活码?
  15. format mla_mlaformat是什么
  16. 生活小妙招:办公室如何查看自己电脑已连接的无线网密码,记得收藏
  17. 计算机术语中的cpu是指什么意思是,什么叫cpu_cpu是什么意思_电脑cpu意思介绍 - 系统家园...
  18. pycharm5.0.3在用QQ输入法候选框不跟随解决方法
  19. 使用BootStrap.编写网页
  20. fatal error C1859的有效解决办法

热门文章

  1. C++模板实现的通用工厂方法模式
  2. 第六章 线性回归 学习笔记下
  3. TCP IP通讯三次握手四次挥手
  4. 20191110每日一句
  5. 每日一句20191019
  6. kinect获取实时深度数据
  7. Atitit usrQBF2312 命名空间pkg 以及 api命名 spec规范
  8. Atitit. 。Jna技术与 解决 java.lang.Error: Invalid memory access
  9. atitit.软件设计模式大的总结attialx总结
  10. 到底谁才是苹果公司实际控制人?