【发布时间】:2016-05-11 08:08:58
【问题描述】:
我在我的应用程序中使用敲除从表单注册/登录,但 ajax 调用的等待时间在第一次“回合”时非常缓慢(猜测它是在缓存之后,因为它在第二次“回合中真的很快”) - 大约 15 秒当我在线上传网站时登录,当我将其包装为 iOS 应用程序(HTML5 应用程序)时,完成登录需要 60 秒。为什么会发生这种情况?我错过了什么吗?它更有可能是服务器端的吗?希望我能提供足够的信息,但不幸的是我是新手。我将在下面添加登录代码:
$(document).ready(function(){
function UserViewModel() {
//Make the self as 'this' reference
var self = this;
var Domain = "http://example.com";
//Declare User observables which will be bind with UI
self.UserId = ko.observable();
self.Name = ko.observable();
self.Email = ko.observable();
self.Occupation = ko.observable();
self.Country = ko.observable();
self.RegistrationNumber = ko.observable();
//Create User object
var User = {
UserId: self.UserId,
Name: self.Name,
Email: self.Email,
Occupation: self.Occupation,
Country: self.Country,
RegistrationNumber: self.RegistrationNumber,
};
//Assign knockout observables to User/s objects
self.User = ko.observable(); //user
self.Users = ko.observableArray(); // list of users
//onload set status of user
UserStatus();
//Login handler
self.login = function () {
try {
if (User.Email() != "" && User.RegistrationNumber() != "") {
//try logging in
Login();
} else {
viewModel.UserId("Please login with the correct email and registration number.");
}
}
catch (err) {
viewModel.UserId("There was an error, please try again.");
}
};
//Login
function Login() {
$.ajax({
url: Domain + '/User/Login',
cache: false,
type: 'POST',
dataType: 'json',
contentType: 'application/json; charset=utf-8',
data: '{"Email":"' + User.Email() + '","RegistrationNumber":"' + User.RegistrationNumber() + '"}',
beforeSend: function () {
// setting a timeout
$('.splash').show();
},
success: function (data) {
$('.splash').hide();
if (data != 0) {
SetUserVars(data.UserId, data.Name, data.Email, data.Occupation, data.Country, data.RegistrationNumber);
viewModel.UserId(ActionToTake());
}
else {
viewModel.UserId("The supplied credentials are invalid, please try again.");
}
},
complete: function () {
//$('.splash').hide();
},
}).fail(
function (xhr, textStatus, err) {
console.log(xhr.statusText);
console.log(textStatus);
console.log(err);
viewModel.UserId("There was an error, please try again.");
});
}
function UserStatus() {
if (localStorage.getItem("UserId") === null) {
//not logged in
$("a.menu-status").text("Login").attr("href", "index.html#login-screen");
}
if (localStorage.getItem("UserId") != null) {
//logged in
$("a.menu-status").text("Logout").attr("href", "index.html#login-screen");
}
//allow user to logout and reset all user storage
$("a.menu-status").click(function () {
//show logged off status
$("a.menu-status").text("Login");
alert('You have logged off, please login if you wish to continue.');
self.reset();
//redirect
window.location.replace("index.html#login-screen");
location.reload();
viewModel.UserId("You have logged off.");
ResetUserLocalStorage();
});
}
【问题讨论】:
-
我怀疑这与您的客户端代码有关。您可以使用调试器或 Fiddler 之类的侦听器来监控网络流量并查看它在哪里挂断
-
@QBM5 登录 xhr 请求时流量被挂断 - 它说大小为 580b,时间为 9.88 秒。
-
您是否有权访问服务器。听起来像是服务器滞后,而不是客户端
-
@QBM5 是的,我愿意 - 你能建议采取行动来检查吗?
-
我很抱歉,但我不知道我会对此有多大帮助。我不知道你正在运行什么样的服务器。不知道您使用什么机制进行登录。如果可以的话,我建议您逐步浏览服务器端代码,以查看哪些函数正在花费时间返回。然后调试该功能。除此之外,我没有足够的信息来提供帮助
标签: javascript jquery ajax knockout.js