【问题标题】:Dojo Memory Store Periodic RefreshDojo 内存存储定期刷新
【发布时间】:2015-04-09 18:17:30
【问题描述】:

我有一个 dojo 方法来发出 xhrRequest 以从 DB 中获取最新的项目列表,我会定期使用 setInterval() 执行此操作。如果不使用setInterval(),是否有其他更好的方法可以在将新项目添加到数据库时自动更新内存存储?..当前代码如下

<div data-dojo-type="dojo/store/Memory"
             data-dojo-id="dataStore">
            <script type="dojo/method">  
var myStore = this;
setInterval(function(){ 
require(["dojo/request/xhr"], function(xhr){
  xhr("myurl", {
    handleAs: "json"
  }).then(function(data){
if (data && data.length > 0) {   
                        myStore.setData(data);
                        }
  }, function(err){
    // Handle the error condition
  }, function(evt){
    // Handle a progress event from the request if the
    // browser supports XHR2
  });
});
}, 2000);                  
            </script>
        </div>

【问题讨论】:

    标签: javascript dojo


    【解决方案1】:

    好吧,您可以使用dojo/store/JsonRest 代替dojo/store/Memory。如果您确实需要更新信息,那么您可能应该在每次要获取数据时调用"myurl",这样您就不必轮询服务器进行更改。

    如果您没有 RESTful API,并且您不愿意实现自己的 dojo/store 存储(这也可能),那么您可能需要研究 WebSockets。

    您的方法的问题在于它非常消耗网络(当然,如果有很多客户端)。如果服务器可以向客户端推送消息,说明数据库已更改并且他们必须更改其存储,那将更有意义。

    这与 Meteor 等平台的工作方式类似,它们使用 WebSocket 将服务器端数据库(部分)同步到客户端存储。

    然而,并非所有浏览器都支持 WebSockets (caniuse.com),但大多数框架都提供了一个服务器+客户端组件,可以使用相同的回退(例如长轮询)。

    查看Real-time Stores 文章,该文章对其进行了更详细的解释。

    【讨论】:

    • 是的,Web 套接字的问题在于它在 IE9 中不受支持,而此应用程序特别需要在 IE9 上运行。将检查实时商店。感谢您的信息!
    • 实时存储实际上在 websockets 上更详细,太糟糕了:(。但就像我说的,大多数 websockets 实现(SockJS,Socket.io,...)都有使用 long 的后备选项轮询或普通轮询,因此它实际上有点类似于您的setInterval(),只是它在支持 websockets 的浏览器上工作得更好。
    • 哎呀,好吧..我想在 IE9 方面我别无选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    相关资源
    最近更新 更多