【问题标题】:Painfully slow ajax calls using jQuery使用 jQuery 非常缓慢的 ajax 调用
【发布时间】: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


【解决方案1】:

我倾向于同意 cmets 的观点,即问题出在服务器端而不是客户端。

id 最初采取的步骤是使用 postman https://www.getpostman.com/ 之类的东西并通过它访问 API,验证它是慢的部分。

如果这显示了问题,那么您是否可以使用在服务器上运行的代码进行调试?然后单步执行代码并尝试准确指出发生了什么以及速度变慢的地方。

【讨论】:

    猜你喜欢
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2010-10-24
    • 1970-01-01
    • 2011-12-16
    相关资源
    最近更新 更多