跳到内容
新问题

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

点击“注册GitHub”,即表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

推测性荷载考虑 #1157

正常开放
安东尼XSI已打开此问题2024年4月17日·5条评论
正常开放

推测性荷载考虑 #1157

安东尼XSI已打开此问题2024年4月17日·5条评论
标签
[Plugin]推测性加载 推测加载插件(以前称为推测规则)的问题 [类型]增强功能 改进现有功能的建议

评论

@安东尼XSI
复制链接

安东尼XSI 评论2024年4月17日

缺陷描述

我在数百个WordPress网站上使用预取已有5年多的时间,在CWV指标和总体用户体验方面取得了巨大成功。很高兴看到有人在探索这个问题。这是一个很棒的功能,但我认为推测加载不适合作为默认的核心功能。因为它能够通过增加服务器资源使用来降低可伸缩性,特别是对于共享托管服务器上的站点。它确实需要根据可用的站点/服务器资源进行配置,因此最适合作为插件。

很高兴分享我在其上使用的站点的默认设置:

  1. 不包括登录用户。预取在页面缓存方面确实大放异彩,因为服务器能够几乎立即交付内容,CPU使用率几乎为零,而无需等待页面生成。登录的访问主要是动态的不可缓存请求。

在动态页面上使用预取/预呈现,特别是在共享主机上,生成页面通常需要1s以上的时间,这将导致更高的CPU使用率和资源更容易出现瓶颈。这是因为请求的页面可能不会被访问,以及在浏览网站时将鼠标悬停在页面上而不是手动请求链接的难易程度/速度,从根本上讲,动态请求需要更长的时间。这会影响服务器处理相同流量和流量峰值的能力。

  1. 排除包含查询字符串的URL。这将解决手动排除nonce、添加到购物车字符串等的需要。另一个例子是插件使用href链接进行过滤器、愿望列表等。这些插件并不总是遵循将nofollow标记添加到链接的做法。页面缓存插件也经常排除查询参数URL。包括这些将增加CPU使用率,并可能导致不必要的操作(将项目添加到购物车上)。全面排除似乎是避免不同插件和自定义代码的兼容性问题的最佳选择。

  2. 排除包含“.”或文件扩展名的链接,即防止用户下载大型PDF或图像,这可能会限制带宽。例如,将图像包装在原始未裁剪图像的链接中。例如,将鼠标悬停在图库中的图像上可能会导致大量未优化的大型图像被不必要地下载到后台。由于图像将几乎立即开始渲染预渲染图像,因此pdf等可能没有预渲染页面那么有用。我也不确定如果.exe、.pdf或其他大型文件被预取,而这些文件通常会在单击后下载,会发生什么情况?Chrome是放弃请求还是继续从相同的预取请求下载?(注意:排除上传目录是在防止推测性地加载到上传、内容、插件、模板或样式表目录的链接 #1167.)

  3. 当使用PHP会话时,预取有可能使响应时间加倍,因为PHP请求将被排队。例如,如果一个页面可能需要3秒才能生成,那么将鼠标悬停在1个链接上,然后单击另一个链接将导致第二个链接以6秒而不是3秒的速度响应,因为服务器必须等待处理第一个请求。

有兴趣听听您的想法,以及是否有解决上述问题的方法,或者除非另有配置,否则更保守的设置是否适合推测规则?

@安东尼XSI 安东尼XSI补充这个[类型]Bug 现有功能已损坏标签2024年4月17日
@威斯顿鲁特 威斯顿鲁特补充[类型]增强功能 改进现有功能的建议 [Plugin]推测性加载 推测加载插件(以前称为推测规则)的问题和已删除[类型]Bug 现有功能已损坏标签2024年4月17日
@威斯顿鲁特
复制链接
成员

威斯顿鲁特 评论2024年4月17日

很棒的建议!

  1. 不包括已登录的用户。

是的,这很有道理。也许应该有一个过滤器来控制是否将推测规则添加到页面中。默认情况下,当用户登录时,可以忽略它们。

2.排除带有查询字符串的URL。

如果漂亮的永久链接被禁用了怎么办?(在这种情况下,所有URL都有查询字符串。)当然,这并不常见。

3.排除包含“.”或文件扩展名的链接

我们绝对应该排除上传目录,如果不查找文件扩展名。我现在不确定PDF链接会发生什么。

4.使用PHP会话时

与登录用户类似,当存在PHP会话时,默认忽略推测规则?

@威斯顿鲁特
复制链接
成员

  1. 排除包含“.”或文件扩展名的链接

我们绝对应该排除上传目录,如果不查找文件扩展名。我现在不确定PDF链接会发生什么。

我可以确认uploads目录中的文件当前确实尝试加载。图像成功,但PDF失败:

屏幕截图2024-04-18 15 42 19

我想知道为什么Chrome没有预渲染PDF。尽管图像可以预渲染,但我认为默认情况下这样做是没有意义的。如果有人想要即时加载图像的大视图,他们应该启用“单击以展开”功能,而不是链接到图像文件。

在那一点上,我刚刚注意到,将鼠标悬停在点击展开的图像上不会导致预取完整大小的图像。

屏幕记录2024-04-18.15.57.10.webm

请注意,即使我将鼠标悬停在图像上,在实际单击图像之前,也不会获取完整大小的图像。这会导致低分辨率放大图像的显示时间超过必须的时间。

@威斯顿鲁特
复制链接
成员

我想知道为什么Chrome没有预渲染PDF。

我查过了@调整网络他指给我这个铬限制链接到铬源包括来自预加载合格性枚举:

  //预加载不合格,因为WebContents不支持预加载。
  kWeb内容不支持预加载 = 15,

显然,PDF查看器不被视为web内容,即使它可以在iframe中呈现。

我刚刚注意到,将鼠标悬停在点击扩展图像上不会导致预取全尺寸图像。

关于点击扩展图像的预取,我打开了WordPress/gutenberg#60883.

@威斯顿鲁特
复制链接
成员

  1. 不包括登录用户。

是的,这很有道理。也许应该有一个过滤器来控制是否将推测规则添加到页面中。默认情况下,当用户登录时,可以忽略它们。

登录用户默认忽略推测规则的功能今天出现了在支持论坛上。

我对这样做的一个担忧是,用户可能会激活推测加载,然后注意到插件似乎什么都不做。在这种情况下,也许应该为注销用户和管理员用户(谁可以激活插件)启用它?大概登录时不会有太多管理员用户在站点上导航,因此他们不会对服务器负载造成很大影响。这意味着,非管理员登录用户在默认情况下不会得到投机加载,例如在电子商务网站或会员网站的情况下。

可以有一个过滤器来定制是否将推测规则添加到页面中。例如,该插件可以:

$应该_打印=应用筛选器('请打印推测规则', !是用户登录() ||当前用户can('激活插件') );

这样,如果一个网站想要强制始终打印推测规则,他们可以添加以下插件代码:

添加筛选器('请打印推测规则','__返回真值');

或者他们可以添加自己的任意条件来决定是否打印投机规则。

重要的是为80%的站点设置正确的默认值。

@威斯顿鲁特
复制链接
成员

关于在使用PHP会话时禁用推测规则的打印,这可能需要添加一个站点健康测试,以便在会话处于活动状态时发出警告。

免费注册 在GitHub上加入此对话.已经有账户了吗?登录以发表评论
标签
[Plugin]推测性加载 推测加载插件(以前称为推测规则)的问题 [类型]增强功能 改进现有功能的建议
项目
还没有
开发

没有分支或拉请求

2名参与者