javascript - 如何以正确的方式加载 css 异步?

标签 javascript html css

作为了解更多关于优化网站的测试,我一直在努力让我的网站在 PageSpeed Insights 上获得满分。到目前为止一切都很好,除了 CSS 交付。

我确实设法通过使用预加载标签获得了完美的结果,但由于某些原因没有为 Firefox 加载。所以我尝试使用其他解决方案。

然后我切换到这个:

<link rel="stylesheet" href="~/css/site.min.css" media="none" onload="if(media !== 'all')media='all';">
<noscript><link rel="stylesheet" href="~/css/site.min.css"></noscript>

这看起来非常有效,但 pagespeed 没有接受它,所以它只给了我 85 分。

当我使用 <link rel="stylesheet" href="~/css/site.min.css" media="none"/> 时同样发生了在头部和<link rel="stylesheet" href="~/css/site.min.css">在我 body 的尽头。

然后我尝试像这样用 Javascript 加载我的 css:

<noscript id="deferred-styles">
    <link rel="stylesheet" href="~/css/site.min.css"/>
</noscript>
<script>
    var loadDeferredStyles = function() {
        var addStylesNode = document.getElementById("deferred-styles");
        var replacement = document.createElement("div");
        replacement.innerHTML = addStylesNode.textContent;
        document.body.appendChild(replacement);
        addStylesNode.parentElement.removeChild(addStylesNode);
    };

    var raf = requestAnimationFrame ||
        mozRequestAnimationFrame ||
        webkitRequestAnimationFrame ||
        msRequestAnimationFrame;
    if (raf) raf(function() { window.setTimeout(loadDeferredStyles, 0); });
    else window.addEventListener('load', loadDeferredStyles);
</script>

但这也有同样的效果! Pagespeed 没有接受它并给了我不好的评价。有什么原因吗?因为上面的代码可以在他们的网站上找到!

最佳答案

根据我使用 google pagespeed 的经验,为了优化 css 交付,你必须在网页的第一页编写内联 css 代码。这样它就可以快速绘制,其余的 css 可以写在外部文件中。最小化并连接页面中使用的 css 文件。有关详细信息,请参阅此链接 optimize css delivery

关于javascript - 如何以正确的方式加载 css 异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45413879/

相关文章:

javascript - Javascript 中 var/函数定义的最大数量?

html - 仅使用 css 的换行符(如 <br>)

javascript - 将事件参数与其他参数一起使用?

javascript - 同步调用 JavaScript 类方法

javascript - React.Children.map 中的 React.cloneElement 导致元素键发生变化

javascript - jQuery 加法和减法无法正常工作

css - 有没有办法一次为 2 个 css 属性分配相同的值?

javascript - 2 种颜色的 HTML 输入文本

javascript - remove() on img with ng-src, border remains?

html - Firefox 不显示来自缓存的图像仅替代文本