|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
多去关于PHP的网站,尤其有很多经典的文章,多读读这些文章显然是有好处的。PHP自从5.3后新增PHAR回档,Phar回档的观点来自Java?手艺的JAR回档,它同意利用单个文件打包使用程序,这个文件中包括运转使用程序所需的一切器材。该文件分歧于单个可实行文件,后者一般由编程言语天生,好比C,由于该文件实践上是一个回档文件而非编译过的使用程序。因而JAR文件实践上包括构成使用程序的文件,可是思索到平安性,不合错误这些文件举行细心辨别。Phar扩大恰是基于相似的理念,可是在计划时次要针对PHP的Web情况。一样,与JAR回档分歧的是,Phar回档可由PHP自己处置,因而不必要利用分外的工具来创立或利用。Phar扩大对PHP来讲并非一个奇怪的观点。它最后利用PHP编写并被定名为PHP_Archive,然后在2005年被增加到PEAR库。但是在实践中,办理这一成绩的纯PHP办理计划十分迟缓,因而2007年从头编写为纯C言语扩大,同时增加了利用SPL的ArrayAccess工具遍历Phar回档的撑持。自当时起,人们做了大批事情来改良Phar回档的功能,今朝对Phar利用十分无限,而关于Phar的功能测试很少,究竟Phar功能怎样,经由过程一个复杂实行查验下。
测试情况:
PHP:5.5.10
CPU:2GHzintelcorei7
Mem:8GB
体系:Darwin13.1.0
次要测试点:
1:Phar加载速率
1.1:文件巨细几的影响?
1.2:include/require的影响?
1.3:Phar存根(Stub)内容的影响?
2:Phar代码实行速率
2.1全局函数对照
2.2类工具
2.3类办法
为了包管只管包管测试正确,每种体例运转3次,往3次的均匀值。同时作为对照,我们会间接接纳代码体例,取得基准数据。
Phar文件次要包括文件
<p>phar-builder.php用于天生phar文件,实行test命令前,先实行此文件天生phar-test.phar文件。
test_load.php测试加载phar文件速率
src目次内包括文件index.php文件是存根文件,包括dates.php,fZ?http://www.2cto.com/kf/ware/vc/"target="_blank"class="keylink">vci5waHAsZnVuY3Rpb25zLnBocKOsZGF0ZXOy4srUzsS8/sDgt723qKOsZm9yLnBocLLiytS21M/zt723qKOsZnVuY3Rpb25zLnBocLLiytS6r8r9t723qKGjPGJyIC8+vt/M5bi9vP60+sLroaM8YnIgLz612tK7o7pwaGFyvNPU2MvZtsijrLLJ08NpbmNsdWRlus1yZXF1aXJlt73KvbLiytS3os/Wsu7S7LK7tPOjrNa7ssnTw3JlcXVpcmW3vcq9oaM8YnIgLz48L3A+PHByZSBjbGFzcz0="brush:java;">$stime=microtime(true);require"./phar-test.phar";$etime=microtime(true);$total=$etime-$stime;echo"phartotal:".$total."s";[/code]实行后,效力以下- localhost:pharugg$phptest_phar_load.phpphartotal:0.0044760704040527slocalhost:pharugg$phptest_phar_load.phpphartotal:0.0051448345184326slocalhost:pharugg$phptest_phar_load.phpphartotal:0.0043849945068359slocalhost:pharugg$vimtest_phar_load.php
复制代码 均匀加载4.7毫秒
对照间接源代码援用体例。
- $stime=microtime(true);require"./src/index.php";$etime=microtime(true);$total=$etime-$stime;echo"srctotal:".$total."s
- ";
复制代码 实行后,效力以下
- localhost:pharugg$phptest_src_load.phpsrctotal:0.0026230812072754slocalhost:pharugg$phptest_src_load.phpsrctotal:0.0026969909667969slocalhost:pharugg$phptest_src_load.phpsrctotal:0.0025439262390137s
复制代码 均匀加载2.6毫秒
结论:经由过程加载速率对照,phar加载体例比间接文件加载体例慢了很多,几近间接援用文件所耗工夫的两倍。同时我又在phar文件中加载一些搅扰文件,使phar文件变年夜,发明在10k之内,这个load工夫变更不年夜。固然我并没有把新增的文件放到存根内,如许做的目标,关于凌驾10K的目次,文件构造体例好比是autoload体例,而不会经由过程一个文件包括一切的文件。phar加载工夫是src间接加载的1.8倍摆布。
第二:实行速率查验
phar体例,代码以下
- $stime=microtime(true);//require"phar://phar-test.phar";require"phar-test.phar";$sstime=microtime(true);for($i=0;$ifor1to10000();$number=number2Chinese("12345");}$eetime=microtime(true);$etime=microtime(true);$total=$etime-$stime;$total2=$eetime-$sstime;echo"pharloadtotal:".$total."s
- ";echo"pharexecution10000total:".$total2."s";
复制代码 实行效力以下- localhost:pharugg$phptest_phar_functions.phppharloadtotal:0.0047600269317627spharexecution10000total:0.00017499923706055slocalhost:pharugg$phptest_phar_functions.phppharloadtotal:0.004863977432251spharexecution10000total:0.00017404556274414slocalhost:pharugg$phptest_phar_functions.phppharloadtotal:0.004680871963501spharexecution10000total:0.00016689300537109s
复制代码 实行10000次的类办法,工具实例和工具办法,和函数办法,统共工夫损耗为0.17毫秒。
src实行效力- localhost:pharugg$phptest_src_functions.phppharloadtotal:0.0029089450836182spharexecution10000total:0.00019693374633789slocalhost:pharugg$phptest_src_functions.phppharloadtotal:0.0028579235076904spharexecution10000total:0.0002140998840332slocalhost:pharugg$phptest_src_functions.phppharloadtotal:0.0029168128967285spharexecution10000total:0.00019478797912598s
复制代码 实行10000次的类办法,工具实例和工具办法,和函数办法,统共工夫损耗为0.20毫秒。
小结:经由过程实行速率对照,发明是phar体例,实行速率,要比间接文件include体例,快了(0.20-0.17)/0.20*100=15%,phar体例实行速率快的详细缘故原由没有找到,网上有份材料,apc+include_path设置phar实行速率很快。https://github.com/ralphschindler/test-phar-performance-apc/。
总结:PHP回档phar体例,加载速率要慢于一般文件包括体例,可是实行速率要高于文件包括体例,假如共同include_path设置和APC大概OP体例,优化phar回档的加载速率,就可以提拔php的实行速率。下一步会做方面的实验,1:构建年夜phar文件,实行加载速率,实行速率。2:懂得phar加载道理和实行道理,3:包观点办理和依附。
其他一些参考材料
PHPV5.3中新特征,创立并利用Phar回档。http://www.ckuyun.com/developerworks/cn/opensource/os-php-5.3new4/
test-phar-performance-apchttps://github.com/ralphschindler/test-phar-performance-apc/
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。 |
|