javascript 在JS中处理和更新大型数据集时出现性能问题

pes8fvy9  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(175)

我有一个Python Tkinter应用程序,它可以使用Matplotlib将包含1000万个数据点的数据集加载到绘图中。此外,它还允许用户在运行时不断应用各种信号处理过滤器来处理数据和更新绘图。
我正在使用React和微服务架构在Web平台中重新构建此应用程序,数据文件保存在S3中,并由客户端加载。
应应用的数据筛选器包括:

  • 巴特沃思
  • 迹线归一化
  • 标准差

目前使用的python库有:

  • scipy
  • 项目数
  • matplotlib

我面临的问题如下:

  • JS中没有像Pyhton那样适合我复杂信号处理需求的明显的库
  • 在客户端以外的任何地方进行处理将导致不必要的网络流量。
    在JS中对大型数据集应用实时复杂数学计算的正确方法是什么?

我最初的想法是向Python微服务发送一个HTTP请求,并使用所选的过滤器将数据应用于文件,然后将数据发送回客户端。这种方法最大的问题是,仅仅进行一个小的更改就需要大量的网络流量。对于桌面应用中的压缩,处理这样的更改只需要不到半秒的时间。
我的Web应用程序是用ReactJS编写的,我使用的绘图库是Poltly.js,它运行得很好,但实时数据操作是一个很大的挑战。

z2acfund

z2acfund1#

我设法解决了这个问题,由于聊天gpt(我建议检查出来)。它给出的解决方案是使用一个库调用Pyodide。
Pyodide是一个旨在将Python科学堆栈引入浏览器的项目。它是一个基于Web的平台,允许用户使用WebAssembly技术直接在浏览器中运行Python代码。
chatgpt还给了我一个如何在react项目中使用Pyodide的例子

import React from 'react';
 import { useRef } from 'react';
 import { useState } from 'react';
 import { useEffect } from 'react';
 import { Pyodide } from '@jupyterlab/pyodide-extension';

const App = () => {
  // Create a reference to the Python code editor
  const pythonEditor = useRef();

  // Keep track of the output from running the Python code
  const [output, setOutput] = useState('');

  // Initialize Pyodide when the component is mounted
  useEffect(() => {
    Pyodide.loadPackage('numpy').then(() => {
      console.log('Pyodide and NumPy are ready to use!');
});
  }, []);

  // Define a function to run the Python code
  const runPythonCode = () => {
    // Get the code from the editor
    const code = pythonEditor.current.value;

    // Use Pyodide to run the code and store the result
    Pyodide.runPython(code).then(result => {
      setOutput(result);
    });
  };

  return (
    <div>
      <h1>Pyodide + React Demo</h1>
      <textarea ref={pythonEditor} />
      <button onClick={runPythonCode}>Run Python Code</button>
      <h2>Output</h2>
      <pre>{output}</pre>
    </div>
  );
};

export default App;

这个项目使用React钩子来管理状态,使用Pyodide来运行Python代码。当点击运行Python代码按钮时,编辑器中的代码将使用Pyodide执行,输出如下所示。
请注意,此项目假定Pyodide已在父组件中导入并初始化,因此如果要使用此项目,请确保将其添加到代码中

相关问题