PHP 的 Phar 包原来性能这么强! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yurun
V2EX    PHP

PHP 的 Phar 包原来性能这么强!

  •  
  •   yurun 2018-09-05 14:10:26 +08:00 3854 次点击
    这是一个创建于 2595 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前有在群里看到人说,有一些 Swoole 框架启动速度慢,尤其是挂载的网络硬盘下运行尤其的慢。

    我想,由于 Swoole 可以让 PHP 应用实现常驻内存,所以启动时候势必要扫描和加载许多文件,这应该是导致启动速度慢的罪魁祸首。

    想到 php 还有 phar 包这个东西,我试图用 phar 来解决这个问题。功夫不负有心人,我终于为 imi 框架 实现了 phar 打包的兼容和支持,测试结果明:

    使用 Phar 进行文件枚举、读取、include,无论是在本地硬盘还是 Samba 等网络文件共享挂载,性能都比零散的文件性能更强。

    phar 作用强大,可以直接用一个包来部署项目,但在传统 php 应用开发里 phar 其实并不受欢迎,因为没有多少好处。而在 Swoole 环境下,越来越多的框架支持常驻内存,可以在启动时加载完想要用的文件。

    phar 从 php 5.3.0 开始就已经内置支持,所以兼容性不需要担心,也不需要安装额外的扩展。

    我特意为此写了一个测试 Phar 文件枚举、读取、include 性能的 Demo: https://gitee.com/yurunsoft/PharTest

    有兴趣的朋友可以拉下来,自己跑一下试试。

    想要启动 Phar 文件打包功能,首先要在 php.ini 中配置 phar.readOnly= Off

    Phar 打包代码主要如下:

    <?php $fileName = __DIR__ . '/test/test.phar'; if(is_file($fileName)) { unlink($fileName); } $phar = new Phar($fileName); $phar->stopBuffering(); $phar->buildFromDirectory(__DIR__ . '/src'); 

    实际应用情况复杂,可以参考 php 官方文档,根据实际情况略作修改。

    原文地址: https://blog.yurunsoft.com/a/120.html

    4 条回复    2018-09-06 08:41:31 +08:00
    liuguang
        1
    liuguang  
       2018-09-05 14:21:15 +08:00
    你这样确实解决了 io 问题,但是 io 问题一向影响不大,
    php 之所以有自动加载,就是为了按需加载,如果合并到一个文件里面
    就浪费了太多的资源去解析不需要的东西,有的框架 vendor 占用 40M+,一次全部加载速度是快了,但是也是浪费了资源
    除非是某些特殊情况,php 在后台守护运行的那种,到时有点用,但是价值不大,php 的 include 并没有那么慢
    eluotao
        2
    eluotao  
       2018-09-05 14:33:12 +08:00
    楼主 我想问下 gitee 个人能申请用吗 有多大空间 项目数限制?
    yurun
        3
    yurun  
    OP
       2018-09-06 08:40:48 +08:00
    @liuguang 就是专门为 swoole 这样的常驻内存场景做的研究和尝试
    yurun
        4
    yurun  
    OP
       2018-09-06 08:41:31 +08:00
    @eluotao 具体上码云看吧,开源项目限制小,私有项目有一些限制,但是个人或者小团队完全够用。。在我看来如果团队开发,coding 可能更加经济吧,如果对空间要求不高
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3562 人在线   最高记录 6679       Select Language
    创意工作者的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:39 PVG 08:39 LAX 17:39 JFK 20:39
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86