WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

今天明月给大家分享一下 WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法的教程,在撰写【WordPress 高级缓存插件 W3 Total Cache Pro 详细配置教程】一文的时候明月就发现 W3 Total Cache 已经支持 Brotli 压缩算法了,可惜的是在安装完 W3 Total Cache 后才发现插件的“浏览器缓存”里有关 Brotli 压缩算法的选项竟然是灰色的无法勾选使用,如下图:

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

这就比较诡异了,明月的服务器对 Brotli 压缩算法的支持可以追溯到很早了(可参考【给 Nginx 添加谷歌 Brotli 压缩算法支持】一文),至少 2018 年在 Nginx 上就已经支持了!

打开 W3 Total Cache 通用设置里的“Compatibility Test”进行兼容性检查才发现竟然是因为没有安装 Brotli extension 造成的(如下图),extension!?php 扩展模块?我去,这可真是个坑呀!

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

速度谷歌、百度脑补了一番发现竟然没有中文的相关讯息,切换到英文模式继续搜索脑补一番终于找到了解决办法,原来 W3 Total Cache 需要的不是 Nginx 对 Brotli 压缩算法的支持,而是需要 PHP 的支持,而 PHP 是从 PHP 7.4 才能支持 Brotli 压缩算法的,需要另外给 PHP 编译增加一个叫“Brotli Extension for PHP”的模块扩展。明月早就说过像 W3 Total Cache 这样高级的缓存插件很多时候都需要配合运维才能更好的发挥性能,这次就需要重新编译 PHP 来增加扩展模块了。

关于编译 PHP 增加扩展模块的原理和需求啥的我就不赘述了,这里仅仅贴出相应的命令行终端里的指令,会使用 Linux 终端的按部就班执行即可,否则就找专业的运维人员给你编译安装好扩展模块吧!

首先,获取 GitHub 上 Extension for PHP 的源码到服务器本地目录进行 PHP 的重新编译安装:

git clone --recursive --depth=1 https://github.com/kjdev/php-ext-brotli.git
cd php-ext-brotli
phpize
./configure
make
make install

此编译会因服务器生产环境配置差异有些出入,像明月的服务器上在执行到./configure这一步的时候就出错了,需要指定php-config文件的绝对路径才可以,如:

./configure --with-php-config=/usr/local/php/bin/php-config

这样指定一下绝对文件路径才能完成编译配置完成编译安装。 所以强烈建议大家找专业人士来完成编译安装工作否则会造成 PHP 毁坏的后果哦。

完成编译安装后会看到“Installing shared extensions:XXXXXXXXXXXX……”的提示即表明Brotli Extension for PHP已经安装好了,只需要在 php.ini 最后添加“extension=brotli.so”的扩展模块引用,重启 php-fpm 即可生效了。

注:因为 Nginx 配置里需要用到 brotli 的配置语句,所以 ngx_brotli 模块也是要有的哦!

这时候我们再进入 W3 Total Cache 插件的“通用设置”里使用“Compatibility Test”进行兼容性检查,可以看到检查结果里 Brotli 扩展已经是绿色“安装”的提示了,如下图:

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

这时候再在“浏览器缓存”就可以勾选“启用 HTTP (brotli) 压缩”了,如下图:

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

然后保存并清理缓存即可生效了。

验证网站前端 Brotli 压缩算法生效,只需要在浏览器里借助开发者调试工具查看网页“标头”里的“Content-Encoding:”值是“br”即表明 W3 Total Cache 缓存插件的 Brotli 压缩算法已经生效成功了。如下图所示:

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

如果没有启用 Brotli 压缩算法则“Content-Encoding:”的值会是“gzip”,与 Gzip 相比,Brotli 压缩在研究中显示出了不俗的成果。例如 Gzip 有 9 个压缩级别,而 Brotli 有 11 个。此外,Brotli 还使用一个预定义的 120 千字节字典,该字典包含超过 13000 个常用单词、短语和其他子字符串。这些因素都有效提高了 Brotli 的压缩率。根据 Certsimple 的研究,用 Brotli 压缩的 Javascript 文件比 Gzip 小 14%,HTML 文件比 Gzip 小 21%,CSS 文件比 Gzip 小 17%。

不过,Brotli 压缩算法要求浏览器必须支持与 HTTPS 一起使用,可能会出现因为浏览器的不支持而导致用户无法访问网站:

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

好巧不巧的,明月就碰到了一个用户因为其手机端浏览器(Google Chrome 移动版)版本过低无法访问,出现“ERR_CONTENT_DECODING_FAILED”无法解码的错误,好在用户升级浏览器到最新版后就彻底解决恢复正常访问了,看来新的技术对老版本的兼容是个不小的问题呀!

WordPress 高级缓存插件 W3 Total Cache 开启支持 Brotli 压缩算法

如果您的网站用户浏览器版本都过低,并且用户群体非 IT 技术型的话,为了保证用户浏览体验,明月是不建议大家强制使用 Brotli 压缩算法的,不过现在不少 CDN 服务(如:Cloudflare、腾讯云 CDN、又拍云 CDN等)都支持自动判断客户端对压缩算法的支持情况让能使用 Brotli 的使用 Brotli,不能的使用 Gzip

就明月的经验来看,使用 WP-Rocket 、W3 Total Cache Pro 这类高级缓存插件的站点首次打开的载入时间是比较快的,这个快是每个浏览用户能切身体会到的,甚至据明月观察会有效的提升网页 Waiting (TTFB)时间)(可参考【优化 WordPress 网站速度需要关注的重要指标:Waiting (TTFB)】一文),记住是首次打开网页的载入时间哦,这对于 SEO 也是有非常好的优势的,所以特别是新上线的站点尤其推荐这些插件的使用,当然再结合 CDN 服务就更加的完美了,而对 Brotli 压缩算法的支持更是锦上添花了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696512.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数字孪生概念、数字孪生技术架构、数字孪生应用场景,深度长文学习

一、数字孪生起源与发展 1.1 数字孪生产生背景 数字孪生的概念最初由Grieves教授于2003年在美国密歇根大学的产品全生命周期管理课程上提出,并被定义为三维模型,包括实体产品、虚拟产品以及二者间的连接,如下图所示: 2011年&…

【C++进阶】深入STL之 栈与队列:数据结构探索之旅

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:模拟实现list与迭代器 🌹🌹期待您的关注 🌹🌹 ❀stack和queue &#x1f4…

storage存储模块-vuex持久化处理

1:存储登录用户信息到vuex中 在store文件夹下面,创建modules文件夹在文件夹下创建user.js文件 user.js文件 const state {userInfo: {userId: ,token: } } const mutations {setUserInfo (state, obj) {console.info(obj)state.userInfo.userId obj…

论文研读 A Comparison of TCP Automatic Tuning Techniques for Distributed Computing

论文《分布式计算中TCP自动调优技术的比较》由Eric Weigle和Wu-chun Feng撰写,探讨了自动调整TCP缓冲区大小以提升分布式应用性能的不同方法。文章首先讨论了手动优化TCP缓冲区大小的局限性,并介绍了研究人员提出的各种自动调优技术来应对这些挑战。 作者…

iOS调整collectionViewCell顺序

效果图 原理 就是设置collectionView调整顺序的代理方法,这里要注意一点 调整过代理方法之后,一定要修改数据源,否则导致错乱。 还有就是在collectionView上面添加一个长按手势,在长按手势的不同阶段,调用collectionV…

LeetCode1318或运算的最小翻转次数

题目描述 给你三个正整数 a、b 和 c。你可以对 a 和 b 的二进制表示进行位翻转操作,返回能够使按位或运算 a OR b c 成立的最小翻转次数。「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。 解析 这一题就按位依次比较就行了。取这…

大话设计模式解读02-策略模式

本篇文章,来解读《大话设计模式》的第2章——策略模式。并通过Qt和C代码实现实例代码的功能。 1 策略模式 策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。 策略模式的特点&#…

【设计模式】创建型设计模式之 工厂模式

一、介绍 工厂模式可以分为 3 个小类 简单工厂模式工厂方法模式抽象工厂模式 工厂模式的工厂类,并不一定以 Factory 结尾,例如 DataFormat、Calender 他们都是工厂类,通过静态方法来创建实例。 除此之外,创建对象的方法名称一…

利用医学Twitter进行病理图像分析的视觉-语言基础模型| 文献速递-视觉通用模型与疾病诊断

Title 题目 A visual–language foundation model for pathology image analysis using medical Twitter 利用医学Twitter进行病理图像分析的视觉-语言基础模型 01 文献速递介绍 缺乏公开可用的医学图像标注是计算研究和教育创新的一个重要障碍。同时,许多医生…

Linux - 信号概念 信号产生

Linux - 信号概念 & 信号产生 信号概念信号产生软件信号killraiseabortalarm 硬件信号键盘产生信号硬件中断 信号概念 信号是进程之间事件异步通知的一种方式 在Linux命令行中,我们可以通过ctrl c来终止一个前台运行的进程,其实这就是一个发送信号的…

Java面试_数据库篇_优化,事务,Mysql

Java面试_数据库篇_优化,事务,Mysql 优化如何定位慢查询方案一: 开源工具方案二: Mysql自带慢日志 如何分析慢SQL语句索引介绍索引聚簇索引和非聚簇索引,回表查询覆盖索引,超大分页优化索引创建的原则索引失效 谈谈sql优化的经验 事务事务特性隔离级别un…

vue-2 组件传值

组件关系分类 父子关系非父子关系 父子通信流程 父组件通过props将数据传递给子组件 给子组件以添加属性的方式传值子组件内部通过 props 接收模板中直接使用 props 接收的值 父组件 Parent.vue <template><div class"parent" style"border: 3px s…

力扣 T62 不同路径

题目 连接 思路 思路1 &#xff1a; BFS爆搜 class Solution { public:queue<pair<int,int>>q;int uniquePaths(int m, int n) {q.push({1,1}); // 起始位置vector<pair<int, int>> actions;actions.push_back({0, 1}); // 向下actions.push_bac…

论文中eps格式图片制作

在提交论文终稿时&#xff0c;有时需要提交论文中图片的eps格式&#xff0c;这里记录一下eps格式图片制作的过程&#xff0c;方便以后查阅。 论文中eps格式图片制作 PPT绘制的图片转换为eps格式使用代码生成的图片Latex中显示的图片大小跟Ai中设定画板的大小不一致 PPT绘制的图…

ABB机械人模型下载

可以下载不同格式的 https://new.abb.com/products/robotics/zh/robots/articulated-robots/irb-6700 step的打开各部件是分开的&#xff0c;没有装配在一起&#xff0c;打开看单个零件时&#xff0c;我们会发现其各零件是有装配的定位关系的。 新建一个装配环境&#xff0c;点…

ctfshow-web入门-命令执行(web53-web55)

目录 1、web53 2、web54 3、web55 1、web53 这里的代码有点不一样&#xff0c;说一下这两种的区别&#xff1a; &#xff08;1&#xff09;直接执行 system($c); system($c);这种方式会直接执行命令 $c 并将命令的输出直接发送到标准输出&#xff08;通常是浏览器&#xff…

基于机器学习和深度学习的NASA涡扇发动机剩余使用寿命预测(C-MAPSS数据集,Python代码,ipynb 文件)

以美国航空航天局提供的航空涡扇发动机退化数据集为研究对象&#xff0c;该数据集包含多台发动机从启动到失效期间多个运行周期的多源传感器时序状态监测数据&#xff0c;它们共同表征了发动机的性能退化情况。为减小计算成本&#xff0c;需要对原始多源传感器监测数据进行数据…

软件测试--Mysql快速入门

文章目录 软件测试-mysql快速入门sql主要划分mysql常用的数据类型sql基本操作常用字段的约束&#xff1a;连接查询mysql内置函数存储过程视图事务索引 软件测试-mysql快速入门 sql主要划分 sql语言主要分为&#xff1a; DQL&#xff1a;数据查询语言&#xff0c;用于对数据进…

SpringBoot中实现一个通用Excel导出功能

SpringBoot中实现一个通用Excel导出功能 文章目录 SpringBoot中实现一个通用Excel导出功能这个导出功能的特色看效果代码解析1、依赖2、Excel 入参(ExcelExportRequest)3、Excel 出参(ExcelExportResponse)4、ExcelExportField5、ExcelExportUtils 工具类6、ExcelHead 头部…

鸿蒙开发接口安全:【@ohos.userIAM.userAuth (用户认证)】

用户认证 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import userIAM_userAuth from ohos.userIAM.userAuth;完整示例 // API version 6 import userIAM_userAuth from ohos.use…