我的jQuery在Firefox,Chrome和Opera中运行良好,但在Internet Explorer中,启动需要花费太多时间。
我已经阅读了很多文章并尝试尽可能快地编写代码,避免按类选择,foreach循环等等,但即使我发送了相对较快的"快速"要求它需要花费很多时间才能开始。例如:
function getDisturbanceData() {
$body.addClass("loading");
$.ajax({
type: "POST",
url: "Default.aspx/GetAllDisturbances",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify({
"itemsPerPage": itemsPerPage
}),
success: function (data) {
CreateTable(data.d);
$body.removeClass("loading");
}
});
};
以上$body.addClass("loading");
开始前大约需要1秒钟。代码本身足够快,加载屏幕出现和创建表之间的时间不长于任何其他浏览器,但页面有点冻结,直到用户可以看到加载屏幕。我知道代码需要它的时间,直到它完成,因为我在这里加载了大量的数据(铬通常为1.4s),这就是加载屏幕的原因,但我无法解释之前的时间。
其他信息:我使用ASP.NET框架,webshim.polyfill
用于Internet Explorer + Firefox支持。在默认的ASP.NET javascript文件旁边,我只导入了bootstrap.css/js
,bootstrap-tokenfield.css/js
,jquery-ui.css
和标准jquery
我对Internet Explorer一无所知,或者我可以做些什么来加快速度。你能帮我试试吗?
当您需要其他信息时,如果您能够清楚地询问您的需求并描述我如何提供这些信息,那将非常友好,因为我从未遇到过这样的问题。
更新
问题可能在于在pageload上调用一次的这部分代码吗?它只检查c#backend中的Session变量并返回true或false,但它是async
function IsUserLogedIn(handleData) {
$.ajax({
type: "POST",
async: !1,
url: "logon.aspx/IsUserLogedIn",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
handleData(data.d);
}
});
}
Update2
我现在知道在Internet Explorer中减慢了我的页面速度,但我完全无能为力。这几行
<div id="logon_table">
<asp:Label ID="lblName" runat="server" Font-Bold="true" Text="Name:"></asp:Label><br />
<input type="text" ID="txtName" /><br /><br />
<asp:Label ID="lblpwd" runat="server" Font-Bold="true" Text="Passwort:"></asp:Label><br />
<input type="password" id="txtPassword"/><!--this element is the problem--><br /><br />
<input type="button" ID="ButtonLogin" Value="Login" autofocus />
<input type="button" ID="ButtonCancel" Value="Abbrechen" />
</div>
放慢了我的网页速度。当我删除它们时,一切正常,即使没有任何css / js附加到这些元素每个交互延迟1秒。当我删除每个类和每个后台操作时,用户仍然必须等到他们点击链接。有人知道为什么吗?
答案 0 :(得分:1)
我怀疑你的所有代码都在页面底部的某个$(document).ready()
处理程序中,这意味着在浏览器通知DOM已完全加载之前,不会启动获取Ajax资源。
将这样的代码组织起来。在$(document).ready()
之外:
function getDisturbanceData(itemsPerPage) {
// don't use a POST request to GET data
return $.ajax({
type: "POST",
url: "Default.aspx/GetAllDisturbances",
dataType: "json",
data: {
itemsPerPage: itemsPerPage // jQuery does the JSON serializing
} // (also think whether JSON is necessary to
}); // deliver *a single* parameter)
}
$('body').addClass("loading");
var disturbanceData = getDisturbanceData(25);
现在,在常规$(document).ready()
处理程序中:
disturbanceData.done(function (data) {
CreateTable(data.d);
}).fail(function (jqXhr, status, error) {
// show the error somewhere
}).always(function () {
$('body').removeClass("loading");
});
这是加载Ajax资源的一般提示。尽快开始申请。然后使用the promise interface of jQuery Ajax requests处理文档加载时的结果。