阻止Meteor http减慢页面请求

时间:2015-06-10 13:12:28

标签: meteor

我是Meteor的新手,也是JS的新手。

我正在使用的代码是:

服务器/ methods.es6

var cheerio = Meteor.npmRequire('cheerio');

/*****************************************************************************/
/* Server Only Methods */
/*****************************************************************************/
Meteor.methods({
  /*
   * Example:
   *
   * '/app/items/insert': function (item) {
   * }
   */
  player: function () {
    const url = 'http://cdn.content.easports.com/fifa/fltOnlineAssets/C74DDF38-0B11-49b0-B199-2E2A11D1CC13/2014/fut/items/web/165434.json';

    const response = Meteor.http.get(url);

    return response;
  }
});

的客户机/模板/汽车/ cars_list.es6

Meteor.call('player', function (err, res) {
  if (err) console.log(err);

  console.log(JSON.parse(res.content));

  Session.set('player', JSON.parse(res.content));
});

/*****************************************************************************/
/* CarsList: Event Handlers */
/*****************************************************************************/
Template.CarsList.events({
});

/*****************************************************************************/
/* CarsList: Helpers */
/*****************************************************************************/
Template.CarsList.helpers({
  cars: function () {
    return Cars.find();
  },
  player: function () {
    return Session.get('player');
  }
});

的客户机/模板/汽车/ cars_list.html

<template name="CarsList">
  <h1>Cars List</h1>

  {{ player.Item.FirstName }}

  <table class="table table-hover">
    <thead>
      <tr>
        <th>Brand</th>
        <th>Model</th>
        <th>Fuel Type</th>
        <th>Body Style</th>
        <th>Top Speed</th>
        <th>Power</th>
        <th>Edit</th>
      </tr>
    </thead>

    <tbody>
      {{# each cars }}
        {{> car }}
      {{/ each }}
    </tbody>
  </table>
</template>

大部分只是尝试执行HTTP请求的测试代码。

当我删除与player相关的所有代码时,一切都是即时的。当player代码存在时,页面会立即加载,但cars数据在player的HTTP请求得到解决之前不会显示。有没有办法将HTTP请求放在后台,而其他所有内容都按照以前的方式执行?

还有一种方法可以循环HTTP请求并在收到数据时显示数据吗?

1 个答案:

答案 0 :(得分:1)

我建议您将方法代码放在both文件夹中。这样,延迟补偿不会受到影响,您的用户界面将以预期的速度更新。

如果您需要隐藏客户端中的某些代码,可以将其放在clientserver文件夹中。我没有对此进行测试,但我认为如果客户端调用的结果不同(即他将其与控制台混淆),则会将其数据回滚到服务器。

这样,您可以在尚未返回的情况下模拟服务器的方法结果。但是,请记住,无论您使用何种设置,最终都必须等待网站数据继续运行,无论是在客户端还是服务器上。 如果你这样调用你的数据,我认为它不仅会停止你的mongo数据,还会停止你的js函数执行(事件循环)。我可能错了(这里也是新手)

也许您应该阅读fiber and future, and the async calls。在我看来,这是要走的路。

祝你好运!