phar文件可以把用到的PHP文件全部打包在一个文件中,十分方便网站部署。但是单个的PHP文件可以使用opcache缓存(字节码缓存),以提升PHP的运行速度。那么PHAR文件包如何使用缓存呢。

这里需要进行配置(php.ini)

phar.cache_list

手册上的解释为:

Allows mapping phar archives to be pre-parsed at web server startup, providing a performance improvement that brings running files out of a phar archive very close to the speed of running those files from a traditional disk-based installation.

允许在web服务器启动时预分析映射phar存档,从而提供性能改进,使phar存档中运行的文件的速度非常接近于从传统的基于磁盘的安装中运行这些文件的速度。

这个功能只有在phar 2.0.0开始支持。当然目前你安装的PHP都是2以上的。phar  2.0.0 的发布日期为 2009-07-29。手册上的配置说明。

# in php.ini (windows):
phar.cache_list =C:\path\to\phar1.phar;C:\path\to\phar2.phar
# in php.ini (unix):
phar.cache_list =/path/to/phar1.phar:/path/to/phar2.phar

windows上多个文件使用分号,LINUX上使用冒号。

启用了cache_list后,重启php-fpm(或者可能是Apache)。

请确保opcache处于启用状态(php.ini):

opcache.enable=1

那么效果如何呢?用我的NILCMS框架做测试。环境:

PHP 7.2.25

NGINX 1.14.2

CentOS 7.7.1908

测试命令:ab -n 500 -c 5 域名

1.opcache未启用,cache_list未配置

Concurrency Level:      5
Time taken for tests:   7.665 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      110500 bytes
HTML transferred:       21000 bytes
Requests per second:    65.23 [#/sec] (mean)
Time per request:       76.648 [ms] (mean)
Time per request:       15.330 [ms] (mean, across all concurrent requests)
Transfer rate:          14.08 [Kbytes/sec] received

2.opcache启用,cache_list未配置

Concurrency Level:      5
Time taken for tests:   1.406 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      110500 bytes
HTML transferred:       21000 bytes
Requests per second:    355.62 [#/sec] (mean)
Time per request:       14.060 [ms] (mean)
Time per request:       2.812 [ms] (mean, across all concurrent requests)
Transfer rate:          76.75 [Kbytes/sec] received

3.opcache未启用,cache_list配置

Concurrency Level:      5
Time taken for tests:   7.588 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      110500 bytes
HTML transferred:       21000 bytes
Requests per second:    65.89 [#/sec] (mean)
Time per request:       75.881 [ms] (mean)
Time per request:       15.176 [ms] (mean, across all concurrent requests)
Transfer rate:          14.22 [Kbytes/sec] received

4.opcache启用,cache_list配置

Concurrency Level:      5
Time taken for tests:   1.312 seconds
Complete requests:      500
Failed requests:        0
Total transferred:      110500 bytes
HTML transferred:       21000 bytes
Requests per second:    381.01 [#/sec] (mean)
Time per request:       13.123 [ms] (mean)
Time per request:       2.625 [ms] (mean, across all concurrent requests)
Transfer rate:          82.23 [Kbytes/sec] received

测试结果看

1.启用opcache后,对性能提升非常明显。

7.665 -> 1.406

7.588 -> 1.312

2.启用phar.cache_list后:对性能有一点点的提升。

7.665 -> 7.588

1.406 -> 1.312

来此加密:Let’s Encrypt 网页版本,获取SSL网站证书:https://letsencrypt.osfipin.com/

所以最为通用的做法是使用opcache。

phar缓存 编译缓存 提高phar文件包加载速度的更多相关文章

  1. Web前端性能优化——如何有效提升静态文件的加载速度

    WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 一.如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标.那么为了提高页 ...

  2. web前端性能优化,提升静态文件的加载速度

    原文地址:传送门 WeTest 导读 此文总结了笔者在Web静态资源方面的一些优化经验. 如何优化 用户在访问网页时, 最直观的感受就是页面内容出来的速度,我们要做的优化工作, 也主要是为了这个目标. ...

  3. 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽

    一.软件与硬件平台 软件平台: 操作系统:Windows 7 64-bit 开发套件:ISE14.7 硬件平台: FPGA型号:XC6SLX45-CSG324 QSPI Flash型号:W25Q128 ...

  4. 提高首屏页面加载速度,解决vue-cli打包后单个文件过大的问题

    本教程是针对vue-cli3以上的版本,其实原理都大同小异,这个demo为vue-cli直接创建的项目,并在main.js中引入了echart.element-ui.lodash 首先看demo打包后 ...

  5. 在windows、linux中开启nginx的Gzip压缩大大提高页面、图片加载速度<转>

    为了降低tomcat服务的压力,把页面上的图片采用windows版的nginx进行加载,由于有些图片比较大,加载特别的慢,所以在nginx中打开了gzip的压缩功能.加载图片的速度快了很多. 通过站长 ...

  6. 如何提高cocos2d-x-spine骨骼动画加载速度

    下面分2点来说: 1. 时间消耗点:io和现场解析 解决方案:加载过的骨骼动画就不要每次重新加载,不要每次都去加载json文件和atlas,我推荐使用 static CCSkeletonAnimati ...

  7. jQuery实现图片预加载提高页面加载速度和用户体验

    我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题呢?首先我们会想到的是提高服务器性能,使用静态缓存等手段来加快图 ...

  8. jquery实现图片预加载提高页面加载速度

    使用jquery实现图片预加载提高页面加载速度和用户体 我们在做网站的时候经常会遇到这样的问题:一个页面有大量的图片导致页面加载速度缓慢,经常会出现一个白页用户体验很不好.那么如何解决这个问题 呢?首 ...

  9. 提高docker加载速度

    由于国情,我们需要对配置一下docker的下载镜像,提高一下后续的加载速度. 使用vim编辑 /etc/docker/daemon.json, 增加如下内容. { "registry-mir ...

随机推荐

  1. linux 文件解压缩

    转载 https://blog.csdn.net/qq_27803491/article/details/52785838 01-.tar格式 解包:[*******]$ tar xvf FileNa ...

  2. C# Ninject使用

    Ninject是一个IOC容器,用来解决程序中组件的耦合问题,它的目的在于做到最少配置.简单来讲就是 为我们选择一个想要的类来处理事务. 百度百科的解释:一个快如闪电.超轻量级的基于.Net平台的依赖 ...

  3. Django+element ui前后端不分离的博客程序

    最近把去年写的一个烂尾博客(使用了django1.11和element ui)又重新完善了一下,修改了样式和增加了新功能 github链接:https://github.com/ngauerh/Nag ...

  4. Matlab画图的输出格式

    利用Matlab命令,可以输出.eps, .pdf格式的图形.有时候,在图形窗口直接保存会导致图形不完整,这时,可以用如下命令代替: saveas(p1, 't1.eps'); saveas(p1, ...

  5. (2)Go基本数据类型

    Go语言的基本类型有: bool string int.int8.int16.int32.int64 uint.uint8.uint16.uint32.uint64.uintptr byte // u ...

  6. 中山纪中集训Day2又是测试(划水)

    A组T1 bzoj 2674 Attack Description chnlich 非常喜欢玩三国志这款游戏,并喜欢用一些策略出奇制胜.现在,他要开始征服世界的旅途了.他的敌人有N 座城市和N 个太守 ...

  7. [Windows] 输入字符间距变宽

    今天在输入时,不会到误触到哪里,输入的字符间距变得很宽,如下图: 最后找到原因是不小心同时按下了 Shift+Space(空格),进入全角模式,就会导致输入的字符间距变宽 想要恢复,再按一次 shif ...

  8. NPAPI插件开发详细记录:用VS2010开发NPAPI插件步骤<转>

    原帖地址:https://blog.csdn.net/z6482/article/details/7660748 ------------------------------------------- ...

  9. ajax上传图片报错TypeError: 'append' called on an object that does not implement interface Fo

    使用FormData时报错:TypeError: 'append' called on an object that does not implement interface FormData 解决办 ...

  10. numpy中的mean()函数

    本文链接:https://blog.csdn.net/lilong117194/article/details/78397329mean() 函数定义:numpy.mean(a, axis, dtyp ...