【问题标题】:Pass ArrayBuffer from Angular to Elecron - Crashes the window将 ArrayBuffer 从 Angular 传递给 Elecron - 使窗口崩溃
【发布时间】:2019-06-18 04:39:47
【问题描述】:

我在内部有一个 Electron 应用程序,我正在加载 Angular 应用程序。我正在通过 API 调用下载一个字节数组(即 ArrayBuffer),并将这些数据传递给我通过electron.remote.require('./file-service') 连接的方法,以在本地文件系统中创建一个文件。

如果我下载到 120 MB,它支持。如果我下载的大小超过这个大小,它会挂起窗口,UI 也会变成白屏。

示例 Angular 代码:

declare var electron: any;
const { createDataFile } = electron.remote.require('./file-service')

const payLoad = new FormData();
const httpOptions =  {
      headers: new HttpHeaders(),
      reportProgress: true,
    };

const req = new HttpRequest('GET', 'http://localhost:8080/getData', payLoad, {...httpOptions, responseType: 'arraybuffer'});
this.http.request<ArrayBuffer>(req).subscribe((event: HttpEvent<ArrayBuffer>) => {

    switch (event.type) {
        case HttpEventType.Response:
            createDataFile(event.body)
        break;
    }

});

文件系统相关代码:file-service.js

module.exports = {
    createDataFile(fileData) {

    }
}

我用零语句做了方法,仍然是挂着的,窗口变白了。

电子窗口:

请帮助我解决此问题。

【问题讨论】:

    标签: javascript angular electron arraybuffer electron-window


    【解决方案1】:

    https://github.com/electron/electron/blob/master/docs/api/remote.md#remote-objects

    远程模块返回的每个对象(包括函数)代表主进程中的一个对象(我们称之为远程对象或远程函数)。当您调用远程对象的方法、调用远程函数或使用远程构造函数(函数)创建新对象时,您实际上是在发送同步的进程间消息。

    Electron 的遥控器同步序列化您的数据,因此发送非常大的字节大小自然会导致整个 ui 无响应。在这种情况下,即使异步 IPC 听起来也不可行(即 120MB 足够大) - 您需要重新设计逻辑来存储文件而不涉及繁重的 IPC/序列化。这可能不仅仅是你的问题的原因,但无论如何都应该改变。

    【讨论】:

      猜你喜欢
      • 2010-12-16
      • 1970-01-01
      • 2010-10-06
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多