首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
宝塔
V2EX  ›  PHP

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

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

    之前有在群里看到人说,有一些 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
        1
    liuguang   2018-09-05 14:21:15 +08:00
    你这样确实解决了 io 问题,但是 io 问题一向影响不大,
    php 之所以有自动加载,就是为了按需加载,如果合并到一个文件里面
    就浪费了太多的资源去解析不需要的东西,有的框架 vendor 占用 40M+,一次全部加载速度是快了,但是也是浪费了资源
    除非是某些特殊情况,php 在后台守护运行的那种,到时有点用,但是价值不大,php 的 include 并没有那么慢
        2
    eluotao   2018-09-05 14:33:12 +08:00
    楼主 我想问下 gitee 个人能申请用吗 有多大空间 项目数限制?
        3
    yurun   2018-09-06 08:40:48 +08:00
    @liuguang 就是专门为 swoole 这样的常驻内存场景做的研究和尝试
        4
    yurun   2018-09-06 08:41:31 +08:00
    @eluotao 具体上码云看吧,开源项目限制小,私有项目有一些限制,但是个人或者小团队完全够用。。在我看来如果团队开发,coding 可能更加经济吧,如果对空间要求不高
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   956 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 22:30 · PVG 06:30 · LAX 14:30 · JFK 17:30
    ♥ Do have faith in what you're doing.