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. Kubernetes 学习18配置网络插件flannel

    一.概述 1.我们在学习docker时知道docker有四种常用的网络模型 a.bridge:桥接式网络 b.joined:联盟式网络,共享使用另外一个容器的网络名称空间 b.opened:容器直接共 ...

  2. 16、job触发流程原理剖析与源码分析

    一.以Wordcount为例来分析 1.Wordcount val lines = sc.textFile() val words = lines.flatMap(line => line.sp ...

  3. 2.json解析

    static String jsonStr = "{\"sites\":[{\"name\":\"gold\",\"ur ...

  4. ICEM-点火器

    原视频下载地址:https://pan.baidu.com/s/1hrU75So 密码: k6nc

  5. 7、vueJs基础知识07

    UI组件库 element-ui和mint-ui 其实都是借鉴了bootstrap bootstrap: 由twitter 开源 简洁.大方 官网文档https://www.bootcss.com/ ...

  6. CAS5.3服务器搭建及SpringBoot整合CAS实现单点登录

    1.1 什么是单点登录 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的 ...

  7. Node.js之文件下载

    Node.js之文件下载,主要最近解决我的一个需求. 需求描述:如何将腾讯云上传的文件存储到本地某个目录下,如果用js来实现,纯JavaScript没有这样的功能(也许有),正好我这个项目用node. ...

  8. mac安装rust

    1.安装 curl https://sh.rustup.rs -sSf | sh 使用brew各种出错,还慢. 2编译 source $HOME/.cargo/env 3.版本查看 rustc --v ...

  9. go中的方法以及自定义类型代码示例

    package main import "fmt" type user struct { name string age int sex string } type admin s ...

  10. js逆向笔记

    1.nodejs运行js的时候 navigator如果找不到可以可设置为空对象 var navigator={}; 2.使用nodejs如果window对象找不到的时候 可以使用jsdom模块 3.顶 ...