Dojo Memory Store 定期刷新

Dojo Memory Store Periodic Refresh

我有一个 dojo 方法来创建一个 xhrRequest 以从数据库中获取最新的项目列表,我使用 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>

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

如果您没有 RESTful API,并且您不愿意实现自己的 dojo/store 商店(也有可能),那么您可能想查看 WebSockets。

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

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

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

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