金色的骷髅 发表于 2015-1-16 22:12:21

PHP网站制作之PHP回档phar功能测试

多去关于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";实行后,效力以下
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/
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。

若天明 发表于 2015-1-18 22:52:44

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\-\\\\\\\ 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\-\\\\\\\ 的,应该用的是下划线\\\\\\\_\\\\\\\ ;

第二个灵魂 发表于 2015-1-27 09:36:03

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

谁可相欹 发表于 2015-2-5 10:00:44

没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。

莫相离 发表于 2015-2-11 09:00:58

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

小妖女 发表于 2015-3-2 07:50:42

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

冷月葬花魂 发表于 2015-3-11 03:14:00

写的比较杂,因为我也是个新手,不当至于大家多多指正。

乐观 发表于 2015-3-17 20:08:14

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

只想知道 发表于 2015-3-24 23:34:48

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
页: [1]
查看完整版本: PHP网站制作之PHP回档phar功能测试