之前有在群里看到人说,有一些 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 官方文档,根据实际情况略作修改。

更多相关文章

  1. PHP 如何上传文件和下载
  2. 用PHP实现一个简易版文件上传功能(超详细讲解)
  3. php文件包含漏洞原理浅探
  4. php读取大文件的行数的方法
  5. php实现对文件夹目录中的文件进行排序的方法
  6. php获取当前执行的php文件的文件名
  7. PHP+Ajax如何实现上传文件进度条动态显示进度
  8. php统计文件中的代码行数
  9. php实现利用expat方式解析xml文件

随机推荐

  1. c语言整除符号是什么?
  2. c语言\n什么意思?
  3. C语言中数据int的取值范围为多少?
  4. sqrt在c语言中怎么用?
  5. C语言中如何生成1~100的随机数(附代码)
  6. vc++6.0怎么调试?
  7. c语言中pow函数的用法是什么?
  8. c语言用户标识符命名规则是什么?
  9. c语言中if(x)是什么意思?
  10. C语言中for用法是什么?