我内部有一个Electron应用程序,我正在加载Angular应用程序。我正在通过API调用下载字节数组(即ArrayBuffer),并将这些数据传递给通过electron.remote.require('./file-service')
连接的方法,以在本地文件系统中创建文件。
如果我下载到120 MB,它将支持。如果我下载的大小超过此大小,则会挂起窗口,并且UI也会变成白屏。
示例角度代码:
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) {
}
}
我用零个语句制作了该方法,但它仍然挂着,窗口变成了白色。
电子窗口:
请协助我解决此问题。
答案 0 :(得分:0)
https://github.com/electron/electron/blob/master/docs/api/remote.md#remote-objects
远程模块返回的每个对象(包括函数)在主进程中都代表一个对象(我们称其为远程对象或远程函数)。当您调用远程对象的方法,调用远程函数或使用远程构造函数(函数)创建新对象时,实际上是在发送同步的进程间消息。
Electron的遥控器会同步序列化您的数据,因此,发送超大字节大小自然会导致整个ui失去响应。在这种情况下,甚至异步IPC都听起来不可行(即120MB足够大)-您需要重新设计逻辑来存储文件,而又不涉及繁琐的IPC /序列化。这可能不仅是问题的原因,而且无论如何都应更改。