根据 Akamai 的数据,页面加载延迟 100 毫秒可能会使转化率下降 7%,而 2 秒的延迟则可能导致跳出率惊人地增加 103%。
性能实战:安装 性能监控工具(如tideways),一边测试性能,一边观察实际瓶颈。
第一步: 用lighthouse测试一下 #
观察问题 :首先要解决瓶颈问题。现在发现问题是 ”Reduce initial server response time“ — 减少初始服务器响应时间。
再用Gtmetrix测试一下:
观察问题 :首字符响应时间过长 ,TTFB 达 2.6秒!
第二步: 安装性能监测工具 #
安装如下监测工具:
https://wordpress.org/plugins/query-monitor/ 最好的性能检查插件
https://tideways.com/ 最好的服务器性能检测工具
知道要解决的问题在于 TTFB, 那么现在就是 想办法解决。安装性能监控工具 ,看底层 是哪里造成 这个
性能问题 :
发现原因:1 ,外部服务访问慢的问题 ,2 ,sql执行过多的问题。
解决它 ,然后测试再看看情况。
Q: SQL执行过多的解决方法?
A: 解决方法
mysql性能优化 :
1.1 myisam 转为 innodb,提高并发
1.2 Sql 300条太多 ,要检查是不是可以减少 ,例如检查区块编辑器问题。
1.3 Mysql 的自身性能调高
加上对象缓存:
WordPress有一个内置的对象缓存WP_Object_Cache。它于2005年推出 ,提供了一种自动将数据库中的任何数
据存储在PHP内存中的方法 ,以防止重复查询。
利用对象缓存 :Object Cache ,是wordpress 原生的功能 ,参考 :什么是对象缓存以及如何在WordPress中使 用它 | WordPress大学 (wpdaxue.com)
第三步: 检查并发能力 #
如何通过负载测试来了解网站在高流量情况下的性能。负载测试可以帮助网站所有者了解他们的服务器在面对流量激增时的表现,以及托管基础设施的承载能力。
How to Stress Test a WordPress Website – The Definitive Guide
https://jmeter.apache.org/ 老牌压测工具。非常不错的本地压力测试工具 ,充分利用本地的强大计算和网络能力 ,可以对比测试结果 ,方便排查性能问题原因。
https://www.digitalocean.com/community/tutorials/an-introduction-to-load-testing 压力测试原理
重要3指标:
Requests per second: 19.66 [#/sec] (mean)
//吞吐率 ,大家最关心的指标之一 ,相当于 LR 中的每秒事务数 ,后面括号中的 mean 表示这是一个平均值
Time per request: 5087.180 [ms] (mean)
//用户平均请求等待时间 ,大家最关心的指标之二 ,相当于 LR 中的平均事务响应时间 ,后面括号中的 mean
表示这是一个平均值
Time per request: 50.872 [ms] (mean, across all concurrent requests)
//服务器平均请求处理时间 ,大家最关心的指标之三
第四步: 提高并发能力 #
高并发架构设计(三大利器:缓存、限流和降级)。实施方法: 增加各层缓存:
1.对象缓存。我们将在下面对此进行更详细的介绍 ,但是对象缓存涉及存储数据库查询 ,以便下次需要数据时 ,无需查询数据库即可从缓存中传递数据。 |
2.页面缓存。页面缓存涉及存储页面的整个HTML ,以便在后续视图中可以生成和显示内容(包括文件和数据 库查询) ,而无需WordPress每次都这样做。 |
3.操作码缓存。操作码缓存涉及在每个请求之间编译PHP代码。为了执行PHP代码 ,PHP编译器必须先编译代码 ,然后生成可执行代码供服务器执行。操作码缓存已编译的代码。 |
4.CDN缓存。 内容分发网络( CDN )使用世界各地的边缘服务器来存储静态网站文件(即CSS ,JavaScript 和媒体文件) ,以便更快地将其分发给与主机服务器地理上相距遥远的用户。 |
5,浏览器缓存。浏览器缓存是指将网页中的资源(如HTML、CSS、JavaScript、图像等)存储在用户的浏览器内部,以便在后续请求同一资源时可以直接从本地缓存中获取,而无需再次从服务器下载。 |
Q: 如何增加静态缓存 / 页面缓存 ?
A:对于网站来说 ,静态缓存 /页面缓存 是解决性能的最厉害的武器 ,这里推荐使用WP Super Cache插
件。 https://wordpress.org/plugins/wp-super-cache/
https://onlinemediamasters.com/wp-super-cache-settings/ WP Super Cache 最佳配置
Q: 如何增加浏览器缓存 ?
A:可以依靠插件设置,例如 WP Super Cache . 常见用法:
使用浏览器缓存可以通过设置响应头中的Expires和Cache-Control字段来控制缓存的行为。
1.使用Expires字段:Expires字段指定了缓存的过期时间,是一个具体的日期和时间。服务器可以在响应头中添加Expires字段,告诉浏览器在该时间之前可以直接从缓存中获取资源,而无需再向服务器发起请求。例如:Expires: Mon, 31 Dec 2022 23:59:59 GMT。
2.使用Cache-Control字段:Cache-Control字段提供了更灵活的缓存控制选项。可以通过设置max-age指令来指定缓存的最大有效时间,单位是秒。例如:Cache-Control: max-age=3600 表示资源可以在1小时内直接从缓存中获取。还可以使用其他指令,如no-cache表示缓存但不使用缓存、no-store表示禁止缓存等。
Q: 如何增加CDN缓存 ?
A: 使用 cloudflare插件: https://wordpress.org/plugins/cloudflare/
加强CDN缓存功能,使用APO: How to Set up Cloudflare APO for WordPress – A Deep Dive into Boosting Performance up to 300%
Q: 如何增加操作码缓存?
A: 使用 php OPCache.
Q: 怎样调整PHP性能?
A: 1 宝塔面板——软件管理—— PHP管理——性能调整 ,根据服务器内存数量和自己建站的数量进行并发数量设置。
2 升级PHP
Q: 怎样处理图片性能?
A: 1 图片压缩
2 On-demand Image Resizing 图片加载方面:用srcset:
Q: 怎样调整服务器性能?
A: 宝塔Nginx 和 PHP-FPM方面的优化 服务器端优化与 Nginx 和 pm-static :
php-fpm:动态(dynamic)、按需(ondemand)和静态(static),尝试使用静态(static)设置 https://www.sitepoint.com/server-side-optimization-with-nginx-and-pm-static/ 尝试了 pm = static 设置,允许我们的 PHP 进程占用服务器资源的最大值,避免交换或使 CPU 停止。这个设置意味着我们始终在系统的最大限制内强制最大化性能。这也意味着——在服务器的限制内——不会有任何进程生成的额外时间成本。
php-fpm.conf有两个至关重要的参数 :
Q: 怎样 去掉没用的插件和功能:
A:利用插件 disable-dashboard-for-woocommerce 插件
Disable-wordpress-updates 插件
Q: 并发问题的解决要注意什么?
A: 并发的2个问题针对解决 :
1 ,是不是并发调度问题
2 ,是不是并发处理问题
Q: 怎样确定需要多少并发处理能力?
A: 并发处理能力计算:
1 ,从GA ,日志等检查每天的流量 ,计算正常时间每分钟访问的流量和人次。
2 ,例如应付普通日常是 250人/分钟 ,那么为了活动做好准备 ,同时也要并发测试 2500人/分钟 ,。 3 ,同时也要为压力测试做好准备 ,达到 10000人/分钟 ,能够让服务器不宕机。
4 ,要测试不同种类的页面并发能力。重点 :首页 ,结算页 ,商品页 ,列表页。
注意 :我们不是BAT,没有那么高并发 ,流量都是要广告买回来的。按实际情况准备好10倍的应付能力就可以了
Q: 怎样测试 checkout结算页 ?
A: checkout url可以这样测试 https://woocommerce.liang/index.php/checkout/?add-to- cart =191&variation_id =193
Q: “Unaccounted Wait” 很高 ?
A: 当看到tideways显示 ,”Unaccounted Wait” 很高 ,那么就可能要垂直升级服务器性能了
Q: 如何估计您的托管服务可以处理多少网站访客?
A: 参考文章: https://servebolt.com/articles/calculate-how-many-simultaneous-website-visitors/
这篇文章提供了一种方法来估计您的网站托管服务能够同时处理的访客数量。文章强调了在准备应对流量高峰时,了解服务器资源使用情况的重要性。文章提出了一个公式来估算网站的最大并发用户数,该公式考虑了 CPU 核心数、页面响应时间、用户点击频率等因素。
文章首先解释了如何查看服务器的 CPU 核心数,这对于了解服务器处理 PHP 请求的能力至关重要。接着,文章讨论了如何计算平均 PHP 请求消耗的 CPU 时间,以及如何将这个数据与用户点击频率结合起来,以估算出网站的最大并发用户数。
文章还提到,前端性能(如通过 Pingdom Tools 或 PageSpeed Insights 测量的性能)在扩展性方面不是主要瓶颈,真正的瓶颈在于服务器能够处理多少流量和负载。为了提高网站的扩展性,可以采取减少资源消耗或增加服务器资源的措施。文章建议使用加速域名(Accelerated Domains)等技术来提高扩展性,同时保持在单一服务器设置上运行的时间更长。
从GA看看 ,每分钟的用户有多少人在线。 例如 ,我们普通需求是平时 250人/min ,要达到 2500 人/min。
- 利用公式计算 :( cpu核数 / 页面响应时间) 60 * 用户点击频率 = 最大并发用户数 。 用户点击频率 = 平均1次/min(普通独立站)
( 4核 / 0.400s ) * 60 * 1 = 600 人/min
(32核 / 0.323s) * 60 * 2 = 11 880人/min
- 简化公式 :吞吐率60 = 承受最大并发用户数的能力
250人/min ,那么就需要 吞吐率 达到 4/s Requests per second
2500人/min ,那么就需要 吞吐率 达到 40/s Requests per second
10000人/min, 那么就需要 吞吐率 达到 160/s Requests per second
Q: 对象缓存/redis性能有问题?
Q: mysql 有性能问题?
Q: 怎样限流?
再强大的系统,也怕流量短事件内集中爆发,就像银行怕挤兑一样,所以,高并发另一个必不可少的模块就是限流。限流是一种通过控制请求的速率或数量来保护系统免受过载的技术。流控的精髓是限制单位时间内的请求量,最大程度保障系统的可靠性及可用性。
A: 可以利用 cloudflare 设置限流:
- 保护后端服务免受大流量冲击,避免服务崩溃;
- 对 API 调用进行限制,保证公平使用;
- 防止恶意用户对服务进行洪水攻击;
Q: 怎样降级?
降级是在高并发或异常情况下舍弃非关键业务或简化处理的一种技术手段。
A: 可以利用disable相关插件