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

之前有在群里看到人说,有一些 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/P...

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

想要启动 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/...

imi 框架创始人、Swoole 开发组成员、php-src 内核贡献者、TDengine 贡献者、2021 中国开源码力榜前百名。

768 声望
51 粉丝
0 条评论
推荐阅读
imi 助力 ChatGPT 应用开发,支持优雅的 SSE 服务端推送功能
imi v2.1.45 发布,支持优雅的 SSE 服务端推送功能,文档:[链接]SSE 介绍SSE 是一种服务端主动向客户端(浏览器)推送数据的技术。大名鼎鼎的 ChatGPT 的 API 接口就用了这项技术,实现逐字返回的打字机效果。服...

宇润阅读 1k

初学后端,如何做好表结构设计?
这篇文章介绍了设计数据库表结构应该考虑的4个方面,还有优雅设计的6个原则,举了一个例子分享了我的设计思路,为了提高性能我们也要从多方面考虑缓存问题。

王中阳Go4阅读 1.8k评论 2

封面图
一分钟搞明白!快速掌握 Go WebAssembly
最近因为各种奇怪的原因,更多的接触到了 WebAssembly。虽然之前很多博客也翻过写过各种文章,但总感觉欠些味道。于是今天梳理了一版,和大家一起展开学习。

煎鱼4阅读 2.2k

Laravel入门及实践,快速上手ThinkSNS+二次开发
【摘要】自从ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门。

ThinkSNS1阅读 2.5k

我让chatGPT用PHP写一个MVC框架,不仅写出来,还能跑!
没想到写出来的框架确实挺简单的,但是又没觉得哪里不对,于是我尝试把这个框架放到服务器试试能不能跑起来,最后还真的可以跑起来,为了让大家能够看到这个框架的演示,我直接爬一个热搜,然后便于展示数据。

TANKING1阅读 1.7k

封面图
开发一个全网搜索引擎的大致流程
由于对搜索引擎技术很感兴趣,便开始尝试开发一个搜索引擎。在参考了网上有限的资料后,加上自己钻研,最终开发出了一个小型的全网搜索引擎,底部有项目地址和搜索测试图片。

会飞的鸟1阅读 5.7k评论 1

快速上手 Go CGO,掌握在 Go 里写 C!
大家好,我是煎鱼。最近因为各种奇怪的原因,接触到了 Go 特色之一 CGO。这方面的相关内容也相对少一些,给大家抛砖引玉。毕竟很多跨语言调用,还是会依赖 CGO 这个特性。希望大家在真正要用时有个前置知识垫肚子...

煎鱼1阅读 1.4k

imi 框架创始人、Swoole 开发组成员、php-src 内核贡献者、TDengine 贡献者、2021 中国开源码力榜前百名。

768 声望
51 粉丝
宣传栏