IO操作的性能问题

IO包括 " 网络IO " 和 " 文件IO "

  • 相比于CPU计算和内存读写,IO的突出特点就是 : 慢!

  • 如果数据量过大,网络IO会有带宽的限制,服务端会有内存占用过多的问题

  • 本文讲述如何在有限的硬件资源下提高IO的操作效率


解决方案 : stream

  • 一图胜千言
    在这里插入图片描述

    	/** 标准输入输出
    	 *    process.stdin     获取数据
    	 *    pipe              管道
    	 *    process.stdout    目的地
    	 * /
    	process.stdin.pipe(process.stdout)
    
  • 对于一个POST请求,其req, res参数都具有stream的特性

  • 比如我们希望接收到一点数据就返回一点数据,写法如下

    	const http = require('http');
    	const server = http.createServer((req, res) => {
    		if (req.method === 'POST') { req.pipe(res) }
    	});
    	server.listen(8000);
    
  • nodejs stream方式拷贝文件demo

    	var fs = require('fs');
    	var path = require('path');
    	
    	// 两个文件名
    	var file_1 = path.resolve(__dirname, 'data.txt');
    	var file_2 = path.resolve(__dirname, 'data-bak.txt');
    	
    	// 创建读取文件的stream对象
    	var readStream = fs.createReadStream(file_1);
    	// 创建写入文件的stream对象
    	var writeStream = fs.createReadStream(file_2);
    	
    	// 通过pipe执行拷贝
    	readStream.pipe(writeStream);
    
    	// 监听拷贝中
    	readStream.on('data', (chunk) => {
    		console.log(chunk.toString());
    	});
    	
    	// 监听拷贝完成
    	readStream.on('end', () => {
    	    console.log('copy end.');
    	});
    
  • nodejs stream方式读文件发送给前端demo

    	var fs = require('fs');
    	var path = require('path');
    	var http = require('http');
    	
    	var server = http.createServer((req, res) => {
    	    var file_1 = path.resolve(__dirname, 'data.txt'),
    	        stream = fs.createReadStream(file_1);
    	    // 将res作为stream的pipe
    	    stream.pipe(res);
    	});
    	
    	server.listen(3000);
    
发布了64 篇原创文章 · 获赞 29 · 访问量 2331

猜你喜欢

转载自blog.csdn.net/Brannua/article/details/105141050
今日推荐