javascript - 在客户端处理大数据集

标签 javascript node.js stream server-sent-events

我正在尝试构建一个使用 Server Sent Events 的应用程序为了在 UI 上获取并显示一些推文(最新 50-100 条推文)。

SSE 网址:

https://tweet-service.herokuapp.com/stream

问题:

  • My UI is becoming unresponsive because there is a huge data that's coming in!
  • How do I make sure My UI is responsive? What strategies should I usually adopt in making sure I'm handling the data?

当前设置: (为了更好地了解我想要实现的目标)

  • 目前我有一个 Max-Heap,它有一个自定义比较器来显示最新的 50 条推文。
  • 每次发生更改时,我都会使用新的最大堆数据重新渲染页面。

最佳答案

我们不应该保持 EventSource 打开,因为如果短时间内发送太多消息,这将阻塞主线程。相反,我们应该只在获取 50-100 条推文所需的时间内保持事件源开放。例如:

function getLatestTweets(limit) {
  return new Promise((resolve, reject) => {
    let items = [];
    let source = new EventSource('https://tweet-service.herokuapp.com/stream');

    source.onmessage = ({data}) => {
      if (limit-- > 0) {
        items.push(JSON.parse(data));
      } else {
        // resolve this promise once we have reached the specified limit
        resolve(items);
        source.close();
      }
    }
  });
}

getLatestTweets(100).then(e => console.log(e))

然后,您可以将这些推文与之前获取的推文进行比较,以确定哪些是新的,然后相应地更新 UI。您可以使用 setInterval 定期调用此函数来获取最新的推文。

关于javascript - 在客户端处理大数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929930/

相关文章:

python - 更改音频数据时出现噪音

javascript - Backbone.js 根据所选下拉列表更改文本

javascript - 输入中的静态连字符

javascript - 切片无法正常工作 | react

javascript - 由于 CSS,Codemirror 显示不正确

node.js - 需要帮助使用 Kubernetes 将 Node 连接到 Neo4j 数据库

javascript - 为什么我的 React 组件无法获取我需要的库?

node.js - 错误: Body attribute missing in multipart while using googleapis node module

node.js - 在 ondata 事件中更改 node.js 流

java - 如何使用多个条件从集合列表中过滤