如何在Meteor/Minimongo中提高过滤器的响应能力

 总是被姨妈折磨的吕孩纸 发布于 2023-02-11 20:53

我对Meteor很新.我有一个相当小的数据集,<1000条记录的应用程序,我构建了一个相当天真的过滤器为您的类型实现.

现在,性能非常糟糕 - 每个按键都会导致浏览器在相对较快的计算机上遵守冻结一两秒.

它目前已autopublish启用并正在客户端做一切,我知道这是问题的一个重要部分,我只是不确定如何改进它.

这是相关的代码段:

  Template.results.codes = function () {
    var query = Session.get("query")
    // todo: figure out if there's a better way to do this
    var search = (query && query.length > 3) ? {$where: function() {
        return this.code.indexOf(query) != -1;
    }} : {}
    return Codes.find(search);
  };

您可以在https://github.com/nfriedly/Meteor-ODB-II上查看完整资源,并在http://odb-ii.meteor.com/上试用.

我有的具体问题:

有没有更好的方法来搜索mongo db/minimongo?

是否有直接的方法将搜索移出UI线程?要么是网络工作者,要么只是在服务器上运行它?

有没有办法让我的模板知道"数据仍在加载"和"此集合中没有数据"之间的区别,以便在应用程序最初加载时不会闪烁"找不到结果"消息.

David Weldon.. 5

欢迎来到流星!如果这是一个生产应用程序,我的第一个评论是你不应该使用自动发布 - 尤其不是1k记录.正确的方法是使用更复杂的分页框架.除此之外,我们可以通过一些调整使您当前的UI更快:

    您可以使用mongo的regexp运算符,它似乎比使用快得多where.这本身就是一个巨大的胜利.

    isMatch调用codes这是一个相当大的性能,因为它重新运行已经很昂贵的查询两次.相反,我们可以用会话变量替换此调用.

    直接列出所有1k代码似乎有点傻.我在我的代码中将它限制为100,但在生产应用程序中我再次使用分页.

    我将必要的查询长度减少到> 1看起来仍然很快.但你应该调整味道.

以下是我的更改:

Template.results.codes = function () {
  var query = Session.get('query');
  var cursor = query && query.length > 1 ? Codes.find({code: new RegExp(query)}) : Codes.find({}, {limit: 100});
  Session.set('isMatch', cursor.count() > 0);
  return cursor;
};

Template.results.isMatch = function() {
  return Session.get('isMatch');
};

这是一个如何在运行后完成这项工作的简单示例meteor remove autopublish.

向您的客户添加订阅:

Tracker.autorun(function() {
  Meteor.subscribe('codes', Session.get('query'));
});

将发布添加到您的服务器:

Meteor.publish('codes', function(query) {
  if (query && query.length > 1) {
    return Codes.find({code: new RegExp(query)});
  } else {
    return Codes.find({}, {limit: 100});
  }
});

然后,您可以limit从该Template.results.codes功能中删除.在发布,我想你会需要调整使用的limits,并query.length在一个巧妙的方法,但这应该让你开始.我希望有所帮助!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有