[英]How to keep CSS from render-blocking my website?
我正在嘗試優化移動網頁的加載速度,為此我正在使用該網站:
這個網站評估我的來源並告訴我我可以改進的地方。 在我的網站上,我下載了一種字體:
<link href="//fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet">
顯然這阻止了我的頁面的呈現。 現在,如果這是 JavaScript,我可以在標簽中使用async
詞,它會解決問題,但這不是我正在加載的 javascript 文件!
無論如何,是否可以阻止此資源阻止我的瀏覽器並強制它等待下載?
你可以用 JavaScript 做到:
<script>
(function() {
var link = document.createElement('link');
link.rel = "stylesheet";
link.href = "//fonts.googleapis.com/css?family=Open+Sans:400,700";
document.querySelector("head").appendChild(link);
})();
</script>
字體將隨主渲染帶外加載。 當然,這意味着當字體完成加載時會有視覺上的變化……如果用戶禁用了 JavaScript,它根本不會加載字體。
或者,正如 dandavis 指出的那樣,您可以在body
末尾,就在結束</body>
標記之前使用style
元素:
<style>
@import "//fonts.googleapis.com/css?family=Open+Sans:400,700"
</style>
現在這是有效的 HTML(從 HTML 5.2 的 20170808 草案開始),但我從來沒有遇到過一個瀏覽器會關心它,如果你在body
放置style
甚至在它生效之前。
與使用 JavaScript 相比,這樣做的優點是:
理論上,瀏覽器的預取掃描器可能會找到style
元素並更早開始下載(盡管如果您將 JavaScript 放在head
,這不太可能),並且
即使用戶禁用了 JavaScript,它也能工作。
或者,您可以將link
元素移動到body
的末尾,但目前,這是無效的,並且scoped
屬性(還?)似乎不適用。 (為什么讓它適用於style
而不是link[rel=stylesheet]
?我不知道,也許這只是還沒有到達那里的問題......)
<script src="https://ajax.googleapis.com/ajax/libs/webfont/1.5.18/webfont.js"></script>
<script>
WebFont.load({
google: {
families: ['Open Sans:400,700,400italic,700italic']
}
});
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.