【问题标题】:Why JS scripts are run in the wrong order为什么 JS 脚本以错误的顺序运行
【发布时间】:2015-11-26 21:12:37
【问题描述】:

在我的网络应用中,您可以打开一个加载报告的 iframe(类似于 excel 电子表格)。报告打开一段时间(15-20 次)。在某些时候,我会开始总是收到关于剑道未定义的 JS 错误,并且我偶尔会在 IE 控制台中收到“内存不足”错误。

正如您在我的 HTML 中看到的,kendo.all.min.js 文件位于 kendo.sage.custom.min.js 文件之前。

<script type="text/javascript" src="/Scripts/kendo/web/kendo.all.min.js"></script>
<script type="text/javascript" src="/Scripts/kendo/kendo.sage.custom.min.js"></script>

一切顺利,fiddler 展示

但是当我开始出现错误时,我可以看到以下内容:

所以由于某种原因,在使用我的应用一段时间后,脚本会以错误的顺序加载。

所以我在每个脚本的顶部添加了 console.log("all") 和 console.log("sage")。正常工作时,我可以按顺序看到“all”,然后是“sage”,但是当我开始收到 kendo undefined 错误时,我看到的只是“sage”日志,而不是“all”。

我们使用的是 ASP.NET MVC,脚本位于我们的布局文件的 head 部分。

什么可能导致脚本以错误的顺序运行?

【问题讨论】:

  • 那么顺序如何变化?您如何将脚本添加到页面?
  • 这就是我正在寻找的,我没有做任何不同的事情来获得这个结果。就像我说的那样,只有通过反复打开同一个报告,在某一时刻脚本不再以正确的顺序加载。脚本都在 中,顺序正确。
  • 您的缓存是打开还是关闭?因为缓存的脚本会加载得更快,并且取决于您的缓存限制,所以可能只有一些,因此您的结果?
  • @Zze 这次缓存是关闭的,但不管有没有缓存,我都遇到过这种情况
  • 嗯嗯,也许你可以在加载时将它们线性 ajax?

标签: javascript html kendo-ui


【解决方案1】:

所有的脚本都在 head 部分吗?如果没有,则将自定义移动到页脚并在页面加载后加载自定义脚本,这将确保自定义文件在主文件之后加载

$(window).load(function(){
var element = document.createElement("script");
element.src = "/Scripts/kendo/kendo.sage.custom.min.js";
document.body.appendChild(element);
});

对于您的答案,请参阅此链接 load and execute order of scripts

【讨论】:

  • 是的,我的脚本都在 head 部分,我不想过多地处理文件的顺序,因为它们之间存在依赖关系。 Kendo 文件是第二个文件(就在 jquery 之后),应该在所有其他文件之前加载。
  • 我明白,但是如果您找出依赖关系并将一些移到页脚,这会有所帮助。或在窗口加载后加载它们
  • 我想我会尝试将我所有的 JS 捆绑在一起,只下载一个文件。您认为这可能与您的解决方案相似吗?
  • 如果你打算打包也记得压缩/缩小。事实上你应该缩小所有的js
猜你喜欢
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
相关资源
最近更新 更多