electron使用new Worker写入文件导致浏览器崩溃

main.js

let data1 = [];
let data2 = [];
for (let i = 0;i < 500000;i++) {
    let j = i * 500.0 / 60000.0;
    data1.push([j, 200 * Math.random() + 100]);
    data2.push([j, 400 * Math.random() + 100]);
}
let params = {
    type: ‘xls‘,
    data: { data1, data2 },
    filename: ‘text.xls‘,
};
let worker = new Worker(‘worker.js‘);
worker.onmessage = (ev) => {   console.log(‘写入完成‘);
   worker.terminate();
};
worker.postMessage(params);

worker.js

const fs = require( "fs" );

self.onmessage = function (e) {
    let data = e.data;
    console.log(data);
    if (data.type === "xls") {
        //todo 写入文件流
        let writeStream = fs.createWriteStream(data.filename, { encoding: ‘utf8‘ });
        //读取文件发生错误事件
        writeStream.on(‘error‘, (err) => {
            console.error(‘发生异常:‘, err);       self.postMessage({ success: false, message: err });
        });
        //已打开要写入的文件事件
        writeStream.on(‘open‘, (fd) => {
            console.log(‘文件已打开:‘, fd);
            let i = 0;
            let value = "x\ty\ty1\n";
            function write() {
                if (i >= data.data.data1.length) {
                    writeStream.end();
                    setTimeout(() => {//todo 不知道为什么,立即发送报错,延迟发送没问题,这样electron窗口就不会崩溃
                        self.postMessage({ success: true, message: ‘complete‘ });
                    }, 500);
                    return;
                }
                value = data.data.data1[i][0] + "\t" + data.data.data1[i][1] + "\t" + data.data.data2[i][1] + "\n";          i++;
                writeStream.write(value, () => {
                    write();
                });
            }
            writeStream.write(value, () => {
                write();
            });
        });
        //文件已经就写入完成事件
        writeStream.on(‘finish‘, () => {
            console.log(‘写入已完成..‘);
        });
        //文件关闭事件
        writeStream.on(‘close‘, () => {
            console.log(‘文件已关闭!‘);
        });
    }
};

原文地址:https://www.cnblogs.com/caiyingyong/p/11597964.html

时间: 2024-08-14 09:08:58

electron使用new Worker写入文件导致浏览器崩溃的相关文章

网站导致浏览器崩溃的原因总结(多款浏览器)

面试某公司的时候,面试官问到,导致浏览器崩溃的原因有哪些?愚辈不才,仅回答出了内存泄漏.其实在网页在装载的过程中,常常由于种种原因使浏览器的反映变的很慢,或造成浏览器失去响应,甚至会导致机器无法进行其他的操作. 对于访客,如果登录您网站,浏览器就立刻崩溃,我想这对谁都是无法容忍的,对此总结了网站导致浏览器崩溃的原因: 1. 内存泄漏 还是先谈下内存泄漏,网站由于内存泄漏的而照成崩溃有两种情况,服务器的崩溃和浏览器的崩溃.内存泄漏所造成的问题是显而易见的,它使得已分配的内存的引用就会丢失,只要系统

jquery uploadify上传文件插件导致浏览器崩溃问题解决方法

自谷歌浏览器更新到(版本39.0.2171.99 )后,访问上传文件界面浏览器就崩溃了,而其他的浏览器不会出现问题. 出现这种问题的原因就是谷歌浏览器缓存问题,但将访问该jsp页面路径添加上时间戳后无法解决问题,将界面引入uploadify.js中也添加了个随机变量还是不行.最后将引入js换成下面形式就解决了: 代码如下: [javascript] view plaincopyprint? document.write("<script type='text/javascript' &qu

奇怪的iphone6 plus,H5调用拍照浏览器崩溃

自从开发H5,就不断被各种手机的怪现象打败. 一个非常简单的页面,需要上传照片,H5实现这个功能超easy,直接在页面写入 <input type='file'> 点击这个input,便可呼叫出拍照功能.拍照.压缩.显示.上传.... 狗血的事情发生在6plus上,使用拍照功能,时不时就会导致浏览器崩溃.测试了4台手机,出现的频率相当大.这就是高富帅的6p?

Alluxio HA 写入文件失败

Alluxio HA环境,今天发生,用户无法写入文件的情况. 创建文件夹,是正常的.但是最后copyFromLocal 文件的时候,就没有任何反应.最后可以看到这个新建的文件.但是文件size是0. alluxio fs copyFromLocal test.txt /user/mytest/prefix2 最后决定重启一下master看看结果.然后重启,然后...就没有然后了.....Master起不来了!!!! 查看master.log发现问题,刚开始,是正常的应用log file,在 in

Java 读取、写入文件——解决乱码问题

读取文件流时,经常会遇到乱码的现象,造成乱码的原因当然不可能是一个,这里主要介绍因为文件编码格式而导致的乱码的问题.首先,明确一点,文本文件与二进制文件的概念与差异. 文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICODE编码.ANSI编码等等.二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么意思(这样一个过程,可以看作是自定义编码.) 因此可以看出文本文件基本上是定长编码的(也有非定长的编码如UTF-8).而二进制文件可看成是变长编码的,因为是值编码嘛,多少

假冒小马激活(OEM10)导致浏览器主页被篡改到2345的解决办法。

转自http://tieba.baidu.com/p/4240325541 适合运行假冒小马激活(OEM10)导致浏览器主页被篡改到2345的情况按运行oem10工具时间.DLL名字.DLL签名判断1.C:\Windows\System32\drivers\UMDF\jihuo.dll (时间符合.名称一看就是二货起的“激活”),改名:2.C:\Windows\System32\drivers\LHPLKernel.sys(时间符合.签名二货的名字),改名: 3.C:\Windows\Syste

C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题

在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三方日志插件,也可以选择使用数据库,还可以自己写个简单的方法把错误信息记录到日志文件. 选择最后一种方法实现的时候,若对文件操作与线程同步不熟悉,问题就有可能出现了,因为同一个文件并不允许多个线程同时写入,否则会提示“文件正在由另一进程使用,因此该进程无法访问此文件”. 这是文件的并发写入问题,就需要用到线程同步.而微软也给进程同步提供了一些相关的类可以达到这样的目的,本文使用到的 System.Threadin

解决使用 libjpeg 保存图片时因磁盘写入失败导致程序退出的问题

0. libjpeg 介绍 libjpeg 是一个完全用C语言编写的库,包含了被广泛使用的JPEG解码.JPEG编码和其他的JPEG功能的实现.这个库由独立JPEG工作组维护.参考:http://zh.wikipedia.org/wiki/Libjpeg 本文基于 libjpeg9 对使用 libjpeg 保存图片时因磁盘写入失败导致程序退出的问题进行分析,文中的代码和解决问题的方法均可结合 libjpeg9 编译通过. 1.使用 libjpeg 保存图片的方法. 不多说,直接上代码: /**

php 字符串写入文件或追加入文件(file_put_contents)

file_put_contents() 函数用于把字符串写入文件,成功返回写入到文件内数据的字节数,失败则返回 FALSE. 使用说明: file_put_contents(file,data,mode,context) 参数说明: file要写入数据的文件名  data 要写入的数据.类型可以是 string,array(但不能为多维数组),或者是 stream 资源 mode可选,规定如何打开/写入文件.可能的值:  1.FILE_USE_INCLUDE_PATH:检查 filename 副