通过Javascript加载CDN文件
Loading CDN files via Javascript
我一直在努力实现100/100的谷歌页面速度(https://developers.google.com/speed/pagespeed/insights/),但我一直在尝试使用Javascript下载基于CDN的文件时,我得到挂起。注意:显示临时标题。’我猜它是出于安全原因而屏蔽了这类电话,但我被卡住了。
我可以像这样调用脚本文件asycn,这是Google喜欢的:
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js" async></script>
但是我该怎么处理CSS文件呢?如果我按正常方式调用它:
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet">
Google抱怨说我有一个"阻塞CSS资源"。
这是我到目前为止一直尝试使用的代码的副本:
var headID = document.getElementsByTagName("head")[0];
var cssNode = document.createElement('link');
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.href = '//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css';
headID.appendChild(cssNode);
谁有什么建议? 这是我最终创建的代码来处理同时异步加载css和js文件。只需在关闭标记之前将其放在HTML的底部,并根据需要编辑loadjscssfile()调用。
<script>
/* Beginning of async download code. */
window.onload = function(){
function loadjscssfile(filename, filetype) {
if(filetype == "js") {
var cssNode = document.createElement('script');
cssNode.setAttribute("type", "text/javascript");
cssNode.setAttribute("src", filename);
} else if(filetype == "css") {
var cssNode = document.createElement("link");
cssNode.setAttribute("rel", "stylesheet");
cssNode.setAttribute("type", "text/css");
cssNode.setAttribute("href", filename);
}
if(typeof cssNode != "undefined")
document.getElementsByTagName("head")[0].appendChild(cssNode);
}
loadjscssfile("//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css", "css");
loadjscssfile("//fonts.googleapis.com/css?family=Open+Sans:300&subset=latin,cyrillic-ext,latin-ext,cyrillic,greek-ext,greek,vietnamese", "css");
loadjscssfile("/css/style.css", "css");
loadjscssfile("//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js", "js");
loadjscssfile("//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js", "js");
};
/* End of async download code. */
</script>
Google对此给出了很好的解释:https://developers.google.com/speed/docs/insights/OptimizeCSSDelivery
看起来他们想让你内联CSS,这对页面的初始显示至关重要。然后加载二级CSS。由于bootstrap CSS是一个大的组合,我认为区分关键/非关键对于你的页面来说是很重要的。
也许你可以内联一些存在于bootstrap.css中重复的CSS
我建议您将关键路径的样式内联(在折叠上方):https://github.com/addyosmani/above-the-fold-css-tools
https://github.com/addyosmani/critical
然后加载另一个css async:
https://github.com/filamentgroup/loadCSS/
- 如何播放部分音频文件
- 将任何CDN配置为只传递一个文件,无论请求的url是什么
- 使用CloudFront和AmazonS3,或者其他CDN,我可以将所有类似的请求发送到一个静态文件中
- RequireJS-使用CDN加载非脚本文件
- AMP HTML 文件无法呈现,因为 https://cdn.ampproject.org/robots.txt 设置为
- 从 CDN 加载 JS 文件,如何防止浏览器缓存
- 如何有条件地将外部json文件从cdn加载到我的javascript中
- 更好的方式导入JavaScript和CSS文件使用CDN或从本地机器
- 为什么是"http:"当包含来自CDN的.js文件时丢失
- 通过Javascript加载CDN文件
- 包含来自单个和多个CDN提供商的文件之间的差异
- 为什么有垃圾附加到微软的Ajax CDN文件的末尾?
- 如何加载本地文件,如果CDN不工作
- 捆绑.js文件vs . CDN
- 跟踪CDN文件上的请求
- 从CDN加载JavaScript库工作,从本地文件不't
- 什么是最好的方式有所有骨干模板在一个单独的JS文件,以便它可以放在CDN
- 为什么cdn链接放在索引文件的底部
- 代码签名-如何确保通过CDN交付的JavaScript文件不会被更改
- 如何为 css 文件实现 CDN 故障保护