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. Deepgreen/Greenplum 删除节点步骤

    Deepgreen/Greenplum删除节点步骤 Greenplum和Deepgreen官方都没有给出删除节点的方法和建议,但实际上,我们可以对节点进行删除.由于不确定性,删除节点极有可能导致其他的 ...

  2. Kubernetes 学习12 kubernetes 存储卷

    一.概述 1.我们此前讲过根据应用本身是否需要持久存储数据以及某一次请求和之前的请求是否有联系,可以分为四类应用 a.有状态,要存储 b.有状态,无持久存储 c.无状态,要存储 d.无状态,无持久存储 ...

  3. 【洛谷P4245】 【模板】任意模数NTT

    三模数 NTT,感觉不是很难写 $?$ 代码借鉴的 https://www.cnblogs.com/Mychael/p/9297652.html code: #include <bits/std ...

  4. git 查看项目代码统计命令

    git log --author="xxxxxxxx" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; ...

  5. AtCoder Grand Contest 006 题解

    传送门 \(A\) 咕咕 const int N=105; char s[N],t[N];int n; inline bool eq(R int k){fp(i,1,k)if(s[n-k+i]!=t[ ...

  6. 《挑战30天C++入门极限》新手入门:C/C++中的结构体

        新手入门:C/C++中的结构体 什么是结构体? 简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构 ...

  7. 页面截取字段和转码,页面截取字段时候需要进入JS

    截取字段    ${fn:substring(info.cpflmc,0,20)}${fn:length(info.cpflmc)>40?'...':''}             表头list ...

  8. GO语言数组,切片,MAP总结

    数组 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 数组的长度必须是常量,并且长度是数组类型的一部分.一旦定义,长度不能变.数 ...

  9. Spring boot druid 的配置使用

    依赖加入 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artif ...

  10. python反射hasattr getattr setattr delattr

    反射 : 是用字符串类型的名字 去操作 变量 相比于用eval('print(name)') 留有 安全隐患 反射 就没有安全问题 hasattr 语法: hasattr(object, name)o ...