performance - 我应该在路由逻辑还是 Meteor Template Helper 中提供数据?

标签 performance meteor routing iron-router spacebars

例子:

我正在编写一个处理博客文章列表的 Meteor 应用程序。所有博客帖子都存储在一个名为“帖子”的集合中。我使用 Iron Router 进行路由。

我想向用户显示由特定作者创建的所有帖子的列表。此列表将使用空格键显示。因此,我需要向模板提供数据。

问题:

据我所知,有两种方法可以做到这一点:

  • 使用模板助手
  • 使用我的路线的“数据”属性

  • 选项 1 示例:
    Template.postList.helpers({
    postsToDisplay: function(){
        return Posts.find({author: 'someAuthor'});
    }
    })
    

    选项 2 示例:
    //Inside my route
    data: function(){
        return {postsToDisplay: Posts.find({author: 'someAuthor'})};
    }
    



    这两种方法之间有什么显着差异吗?是否有理由偏爱其中之一?一个能提供更好的性能吗?

    非常感谢您的回答!

    最佳答案

    Are there any significant differences between those two methods? Does one deliver better performance?



    不是真的,毕竟这只是设计选择。

    Is there a reason to prefer one over the other?



    我会坚持使用铁路由器 + 数据方法,原因如下:
  • 只有当从服务器获取的数据准备就绪时,您才可以使用 waitOn 来实际显示列表,使用 Router.onBeforeAction("loading")并且 loadingTemplate 改善了整体用户体验。
  • 您可以设计一个数据不可知的帖子列表模板,您可以使用不同的上下文提供该模板。

  • 最后一点特别有趣,因为它允许你定义一个可重用的模板,你可以用它来显示最近的帖子列表、类别中的帖子列表、某个作者的帖子列表,因为你想要在第一名等...
    <template name="postsList">
      {{#each posts}}
        {{> postListItem}}
      {{/each}}
    </template>
    

    在这里,您可以将posts 定义为postsList 的助手,但最好让调用postsList 的父模板将posts 分配给它需要的任何内容。
    template:"postsList",
    data:function(){
      return {
        posts:Posts.find({
          "author":this.params.author
        })
      };
    }
    

    这种设计模式允许我们定义一个提供数据上下文的路由,该数据上下文表示给定作者的帖子列表,但您也可以定义另一个提供数据上下文的路由,该数据上下文将按类别列出帖子。

    因此,通过将数据提供者角色从模板助手移到路由定义,我们有一个更可重用的模板,这很好。

    关于performance - 我应该在路由逻辑还是 Meteor Template Helper 中提供数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25384834/

    相关文章:

    angular - 错误 : Cannot match any routes. URL 段:

    java - 如何使用 appstats 优化性能

    bash - 如果子进程失败,则返回非零退出状态

    javascript - Meteor 从模式定义的表单中获取数据

    meteor - 无法读取 null 的属性 '_liveui'

    routing - 没有 Web 服务器的 AngularJS 路由

    android - 解析大文本文件效率

    c++ - 用于存储大型数据集的数据结构

    javascript - Meteor 0.8.2 和 debug.js

    javascript - AngularJS:路由提供者将 "/"更改为 %2F