Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何异步加载CSS和JavaScript_Javascript_Html_Css - Fatal编程技术网

如何异步加载CSS和JavaScript

如何异步加载CSS和JavaScript,javascript,html,css,Javascript,Html,Css,好的,那么如何使用loadCSS()允许浏览器异步加载CSS和JavaScript呢 我头上有个标签: <link rel="preload" href="http://zoidstudios.com/assets/css/main.css" as="style" onload="this.rel='stylesheet"> <noscript><link rel="stylesheet" href="http://zoidstudios.com/assets/cs

好的,那么如何使用loadCSS()允许浏览器异步加载CSS和JavaScript呢

我头上有个标签:

<link rel="preload" href="http://zoidstudios.com/assets/css/main.css" as="style" onload="this.rel='stylesheet">
<noscript><link rel="stylesheet" href="http://zoidstudios.com/assets/css/main.css"></noscript>

这是我的html文件的底部:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://use.fontawesome.com/eb515f50a5.js"></script>
<script src="http://zoidstudios.com/assets/js/functions.min.js"></script>
<script src="http://zoidstudios.com/assets/js/loadcss.min.js"></script>

<script>
    loadCSS( "http://zoidstudios.com/assets/css/main.css" );
</script> 

加载CSS(“http://zoidstudios.com/assets/css/main.css" );

您有没有研究过像或这样的装载机?大多数加载程序将支持CSS本机和/或提供CSS插件异步加载CSS、JS等,同时确保依赖性。如果您有许多文件要加载,我建议您查看您喜欢的加载程序。

问题不在于CSS。如果PageSpeed认为您的页面加载陷入困境,可能是由于您的
标记末尾的所有
标记造成的。仅仅因为它们被放置在body标记中并不意味着它们是异步的

您可以将它们全部保留在
标记中。您可以包含属性
async
defer
,以获得异步加载:查看

所以,像这样的事情应该可以:

<script
    src="http://zoidstudios.com/assets/js/functions.min.js"
    defer>
</script>

请注意,如果这些脚本中的任何一个希望解析DOM(即,它们希望某些元素已经存在),则应使用
defer
,而不是
async
,如链接文章中所述。或者,您可以将它们保留在
标记中,并使用
async

更新 如果我的假设是正确的(PageSpeed不支持
标记上的
rel='preload'
),请注意您问题中链接的文档

包括loadCSS脚本以及loadCSS rel=preload 页面中的polyfill脚本(内联以立即运行,或以 外部文件(如果CSS为低优先级)

您可以使用推荐的polyfill消除最终警告


一般的问题是,“如何异步加载CSS?”,我相信您一定知道

尝试发布的代码时出现了什么问题?你是在要求我们为你解释你链接的文档吗?我在问这是否正确,因为当我通过谷歌的pagespeed insights tester运行我的网站时,它说我所有的js和css都在延迟页面加载。即使我的html文件中包含上述内容,它也会这么说@这个维多洛科斯好像你做错事了。。noscript标签不应该是heads的一部分,那么noscript标签应该在body中还是在body中呢@WolfgangKeep
RequireJS和其他人不是捆绑工具(尽管大多数人提供优化和/或捆绑工具,例如r.js),他们是AMD加载程序。“异步模块定义(AMD)API指定了一种定义模块的机制,以便可以异步加载模块及其依赖项”。如果你把你的答案和其他建议一起编辑,我可以取消否决票。然而,OP显然已经找到了这样一个加载器。仍然不知道@Jessejohnson该怎么做。例如,对于RequireJS,您将包括RequireJS.js和RequireJS/text插件(其他插件用于加载CSS,但这是最流行的插件之一)。一旦在配置文件中定义了依赖项,您就可以自由地异步加载CSS和其他资源,而不必担心加载顺序。下面是一个链接,介绍如何使用CSS加载设置RequireJS:downvote comment:您添加了您的注释作为答案,而不是CSS和JavaScipt。如果我这样做,它只是说CSS@这是vidorP.S。谷歌警告你正在同步加载资源并不意味着你的页面实际上很慢。我知道,但拥有一个更快的页面并没有坏处。从现在起,我将直接内联关键css:D干杯@佐伊德,就像你说的,不疼。您可以让代码保持原样,只需接受谷歌可能发出的警告不会影响真实用户的事实。@Zoid用最后的建议更新了答案。