有些时候文件非常大,一者岁次性读取会导致大量内存被占用。这时候一次性加载凳嫌型文件内容肯定不合适,这时候就需要一段一段的读取文件。fread() 就是这种情况枣猜下使用的。
测试文件使用的文件大小为 1.35GB 的日志文本文件,使用下面两种方式来读取。
Go 标准库中包含了读写的缓冲库,直接使滚消用即可:
输出结果为:
Go 标准库中包括了 io 读写的相渗塌关工具包,大喊知直接开箱即用:
输出结果为:
结果对比
测试发现, ioutil.ReadFile 比 bufio 读写还要快。
进一步说,之所以同步是 Node.js 所遵循的 CommonJS 的模块规范要求的。在当年,CommonJS 社区对此就有很多争议,导致了坚持异步的 AMD 从 CommonJS 中分裂出来。
CommonJS
模块是同步加载和同步执行,AMD 模块是异步加载和异步执行,CMD(Sea.js)模块是异步加载和同步执行。ES6
的模块体系最后选择的是异步加载和同步执行。也就是 Sea.js 的行为是最接近 ES6 模块的。不过 Sea.js
这样做是搏丛需要付出代价的——需要扫描代码提取依赖,所以它不像 CommonJS/AMD 是纯运行时的模块系统。
注意启银拦 Sea.js 是
2010年之后开发的,提出 CMD 更晚。Node.js 当年(2009年)只有 CommonJS 和 AMD 两个选择。就算当时已经有
CMD 的等价提案,从性能角度出发,Node.js 不太可能选择需要静态分析开销的 类 CMD 方案。考悄胡虑到 Node.js
的模块是来自于本地文件系统,最后 Node.js 选择了看上去更简单的 CommonJS 模块规范,直到今天。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)