我使用延迟代码消除了 Google 推荐的渲染阻塞资源,但出于某种原因,该建议仍然出现在 Google 建议中。知道为什么吗?
我清除了缓存*
这是我用于延迟的代码
如果您使用缓存插件,通常可以删除或改进这些内容。有时它也可以通过使用此插件将脚本从页眉移动到页脚来工作:https ://wordpress.org/plugins/scripts-to-footerphp/
首先,您发现的任何方法都不是一个好主意。如果您的访问者浏览器中的 JavaScript 被关闭了怎么办?他们会看到一个没有样式的页面。
我发现谷歌会推荐这篇文章令人惊讶(我猜这是你发现的一篇非常古老的文章)???请参阅下面的“奖励”以获得更好的延迟 CSS 的方法
无论如何,渲染阻塞资源是绘制“首屏”内容所需的资源。(首次加载页面时无需滚动即可看到的所有内容。)
您的网站失败的原因是您仍然需要下载这些资源来呈现初始内容(如果您所做的任何事情都会减慢它的速度,恐怕!)。
要解决这个问题很困难,因为您必须在文档正文中为首屏上的每个项目内联样式标签中的 CSS。
这样就可以呈现页面,而无需等待任何外部 CSS 文件下载。 -> 这就是“渲染阻塞资源”的意义所在
有些插件应该能够做到这一点,但根据我的经验,它们都不起作用,因为这是一个需要解决的复杂问题。
做到这一点的唯一方法是自己设计主题时考虑到这一点(有点晚了)或者......
使用 Google Developer Tools 覆盖率检查器(或覆盖率检查工具 - 如果你可以使用 Node,NPM 上有一些不错的工具),加载页面,无需滚动即可找到所有使用的 CSS。
然后将使用的 CSS 的每一项添加到<style>
页面主体内的块中,然后从外部 CSS 中删除所有使用的样式(为了避免重复,此步骤实际上不需要修复此问题)。
您很快就会发现,这对于逆向工程来说是一场噩梦,但只要有一点耐心,它是可能的。
例子
查看klu.io的源代码(这是我的透明网站)以了解这是如何完成的,您会看到<style>
页面顶部有 2 个块,其中的每个项目都需要呈现“首屏”内容。(有 2 个块,一个是站点范围的,一个是特定于页面的)
以我的网站上的“首屏”为例
在我的网站上,“首屏”是页面加载时的实际可见内容,因为主页在首次加载时不可滚动。
如果您单击“查看我们能为您做什么”按钮,您将看到大量内容从右侧滑入,该内容不可见,因此其样式位于 main.css 中。
奖金
此外,对于如何正确延迟 CSS,使其在没有 JS 的情况下仍然有效,请尝试以下操作(您可能需要针对多个 CSS 文件进行调整,但是一旦您了解了这个概念,这很容易):-
<noscript id="ds">
<link rel="stylesheet" href="your-css.css" media="all">
</noscript>
JS
var dfr = function () {
var n1 = document.getElementById("ds");
var r1 = document.createElement("div");
r1.innerHTML = n1.textContent;
document.body.appendChild(r1);
n1.parentElement.removeChild(n1);
};
var raf = window.requestAnimationFrame || window.mozRequestAnimationFrame ||
window.webkitRequestAnimationFrame || window.msRequestAnimationFrame;
if (raf)
raf(function () {
window.setTimeout(dfr, 0);
});
else
window.addEventListener("load", dfr);
CSS 位于<noscript>
块内作为后备。
然后 JS 将此 CSS 移动到一个 div 中,它会在页面加载后创建第二个。