如果我的浏览器对当前具有网关超时(即504)的脚本src进行GET,为什么浏览器会挂起并停止呈现,直到60秒后实际发送响应为止?除了崩溃浏览器,这不是生产JavaScript应用程序可能发生的最糟糕的事情吗?作为应用程序开发人员,您可以做些什么来阻止其阻止其余的渲染和脚本执行?
答案 0 :(得分:1)
如果脚本是内联的(例如未动态加载)且未标记为defer
或async
,则必须按顺序同步处理脚本,如果没有它,浏览器将无法继续。内联<script>
标签(没有任何特殊属性)按照遇到的顺序处理,浏览器必须以这种方式处理它们。
如果您希望在不等待加载脚本的情况下呈现页面,那么您可以动态加载它,也可以将其标记为async
或将<script>
标记放在{{1}之前标签和页面呈现不会等待它。如果使用</body>
或defer
,则必须确保没有其他脚本依赖于此脚本的加载,否则它们可能会在加载此脚本之前运行。
有关详细信息,请参阅这些参考资料:
答案 1 :(得分:0)
如果你在脚本标签中讨论DOM中的javascript,浏览器将始终同步加载它们,这就是为什么在页面底部放置大量JS是很重要的。如果这成为一个大问题,我建议使用异步加载库,例如lab.js http://labjs.com/。
如果您正在使用更高级的JS并希望利用类似AMD模式的脚本加载和依赖项,您可以使用http://requirejs.org/。