我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript中读取文件的各种方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript中读取文件的各种方法

太长不看版

如果你在寻找一个快速且简单的方法,fs.promises是一个不错的选择,它提供了一个Promise接口,让你能够以现代的异步语法来处理文件读取。然而,如果你更倾向于同步方法,你可能会更喜欢fs.readFileSync,虽然它会阻塞当前线程直到文件读取完成。最后,如果你在寻找一种能够提供更好的性能的方法,你可能会想要考虑使用fs.readFile,这是Node.js中最传统的异步文件读取方法,使用回调函数来处理结果。

使用fs.promises

const fs = require('fs/promises');
const readFile = fs.readFile;
readFile("lipsum.txt", { encoding: 'utf-8' })
.then((data) => {...})
.catch((err) => {...});

这种方法使用了Node.js提供的fs.promises接口,它返回一个Promise对象,可以链式调用.then()和.catch()方法来处理异步操作的结果。

使用fs.readFile和util.promisify

const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
readFile("lipsum.txt", { encoding: 'utf-8' })
.then((data) => {...})
.catch((err) => {...});

这种方法通过util.promisify将传统的回调函数转换成返回Promise的函数,使得你可以用更现代的异步语法来处理文件读取。

使用fs.readFileSync

const fs = require('fs');
const readFileSync = fs.readFileSync;
var data = readFileSync("lipsum.txt", { encoding: 'utf-8' });

这是同步方法,它会阻塞当前线程直到文件读取完成,适用于对性能要求不高且文件不大的情况。

使用await和fs.readFileSync

const fs = require('fs');
const readFileSync = fs.readFileSync;
async function f(name, options) {
  return readFileSync(name, options);
}

这种方法结合了async/await语法和同步读取,可以在需要同步行为但希望代码看起来更异步的情况下使用。

使用fs.readFile

const fs = require('fs');
const readFile = fs.readFile;
readFile('lipsum.txt', function read(err, data) {...});

这是Node.js中最传统的异步文件读取方法,使用回调函数来处理结果。

性能比较

我进行了一项小的基准测试,重复读取磁盘上的同一个文件,并记录读取文件50,000次所需的毫秒数。文件相对较小,略多于一千字节。我使用的是一台拥有数十个Ice Lake Intel核心和大量内存的大型服务器。测试使用了Node.js 20.1和Bun 1.0.14。Bun是一个与Node.js竞争的JavaScript运行时[1]。

多次运行基准测试,我报告了所有情况下的最佳结果。你的结果可能会有所不同。

方法

Node.js 时间

Bun 时间

fs.promises

2400 毫秒

110 毫秒

fs.readFile 和 util.promisify

1500 毫秒

180 毫秒

fs.readFileSync

140 毫秒

140 毫秒

await fs.readFileSync

220 毫秒

180 毫秒

fs.readFile

760 毫秒

90 毫秒

至少在我的系统上,在这次测试中,使用Node.js时fs.promises明显比其他方法成本更高。Bun运行时在这次测试中比Node.js快得多。

结果看起来对fs.promises更不利,因为readFileSync使用了300毫秒的CPU时间,而fs.promises使用了7秒的CPU时间。这是因为fs.promises在基准测试期间触发了多个核心的工作。

将文件大小增加到32kB并不会改变结论。如果你使用更大的文件,许多Node.js的案例会因“堆限制Allocation failed”而失败。Bun即使在大文件下也能继续工作。测试结果在Bun中没有改变结论:在我的测试中,即使对于大文件,fs.readFile也是一致更快的。

本文译自:https://lemire.me/blog/2024/03/12/how-to-read-files-quickly-in-javascript/

Reference

[1]Bun是一个与Node.js竞争的JavaScript运行时: https://bun.dev/

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript中读取文件的各种方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript中读取文件的各种方法

如果你在寻找一个快速且简单的方法,fs.promises​是一个不错的选择,它提供了一个Promise接口,让你能够以现代的异步语法来处理文件读取。

Python使用defaultdict读取文件各列的方法

本文实例讲述了Python使用defaultdict读取文件各列的方法。分享给大家供大家参考,具体如下:#!/usr/bin/python """USAGE: python *.py align_SNP_site out_file""" i
2022-06-04

java读取excel文件的两种方法

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下方式一:借用 package com.ij34.util;/** * @author Admin* @date 创建时间:2017年8月29日 下午2:07
2023-05-31

Python之读取TXT文件的三种方法

参考了https://blog.csdn.net/shandong_chu/article/details/70173952 import sys方法一:#read txt method one f = open("./image/ab
2023-01-31

shell按行读取文件的3种方法

方法有很多,下面写出三种方法:写法一: #!/bin/bashwhile read linedoecho $linedone < filename(待读取的文件) 写法二: #!/bin/bashcat filename(待读取的文件) |
2022-06-04

Shell逐行读取文件的4种方法

在Linux中有很多方法逐行读取一个文件的方法,其中最常用的就是下面的脚本里的方法,而且是效率最高,使用最多的方法。为了给大家一个直观的感受,我们将通过生成一个大的文件的方式来检验各种方法的执行效率。方法1:while循环中执行效率最高,最
2022-06-04

Android获取本机各种类型文件的方法

介绍本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址。提示获取音乐、视频、图片、文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可;如果是6.0或以上
2023-05-30

Rust读取文件的五种方法,你知道哪种?

读取文件是开发软件时常见的操作,本文介绍了在Rust中读取文件(包括字符串和原始二进制格式)的五种常用方法。所有方法都有优点和缺点,需要选择适合你的特定情况和用例的方法。

python3读取文件指定行的三种方法

目录行遍历实现linecache实现命令行sed获取总结概要行遍历实现在python中如果要将一个文件完全加载到内存中,通过file.readlines()即可,但是在文件占用较高时,我们是无法完整的将文件加载到内存中的,这时候就需要用到p
2022-06-02

ASP.NET Core 读取配置文件的三种方法

本文将介绍三种常用的读取配置文件的方法:使用 IConfiguration 接口、使用选项模式(Options Pattern)和使用环境变量。

ASP.Net Core读取配置文件的三种方法

在 ASP.NET Core 中,配置文件扮演着至关重要的角色,因为它们为应用程序提供了运行时的配置信息。下面我们将探讨 ASP.NET Core 中读取配置文件的三种常用方法。

Excel文件读取的两种方式

1、Pandas库的读取操作from pandas import read_exceldr=read_excel(filename,header)dr#dataframe数据dw=DataFrams(data=dict,columns=di
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录