Meteor用户更新非常慢

时间:2015-01-19 22:17:40

标签: javascript mvvm meteor model prototype

我有一个流星应用程序,允许用户更新他们的Skype名称,电话号码,电子邮件地址等。为了帮助维护一致的代码库,我在公共目录中实现了一个EJSON类型的UserModel,以便它可以在客户端上运行和服务器。

EJSON.addType("UserModel", function fromJSONValue(value) { return new UserModel(value); });

UserModel.prototype = {

constructor: UserModel,

//
// EJSON Ovverrides.
//
valueOf: function() {
    return JSON.parse(JSON.stringify(this), function(key, value) {
        var dateFields = ["expiration", "createdAt"];
        if(_.contains(dateFields, key) && typeof value === "string") {
            return new Date(value);
        } else {
            return value;
        }
    });
},

typeName: function() {
    return 'UserModel';
},

toJSONValue: function() {
    return this.valueOf();
},

clone: function() {
    return new UserModel(this.valueOf());
},

equals: function(other) {
    if(!(other instanceof UserModel)) {
        return false;
    }
    return this._id === other._id;
},
setPhoneNumbers: function(phoneNumber, queueUpdate)    {
    var modifier = {$set: {
        'profile.phoneNumber': phoneNumber
    }};
    this.profile.phoneNumber = phoneNumber;
    return this._saveOrQueueUpdate(modifier, queueUpdate);
},

_saveOrQueueUpdate: function(modifier, queueUpdate) {
    if (!queueUpdate) {
        return Meteor.users.update(this._id, modifier, function(err, res) {
        });
    } else {
        this.pendingUpdates.push(modifier);
        return true;
    }
}

我在设置页面js文件中调用setPhoneNumbers方法,如此。

'blur #phonenumber':function(){
    var user = Meteor.user();
    var number = $("#phonenumber").val();
    if(number.length){
        user.setPhoneNumbers(number);
    }
}

问题在于,无论何时调用setPhoneNumbers方法,页面都需要> 500毫秒才能更新并锁定整个页面。我查看了文档,根据this segment,客户端代码永远不会被阻止。该页面仅在更新发生时锁定,因此我知道它与UserModel有关。任何可能导致这种情况的见解都会非常有帮助。页面非常慢,对于生产应用程序来说是不可接受的。

0 个答案:

没有答案