gpt4 book ai didi

javascript - Node.js 同步加载 JS 变量的最佳方式

转载 作者:太空宇宙 更新时间:2023-11-04 03:11:39 25 4
gpt4 key购买 nike

我想加载存储在/data/projects.js 中的 server.js 文件中的一些数据(或 .json,具体取决于问题的答案)。

我看到两种可能性:

  1. 使用 readFileSync:

    function readJsonFileSync() {
    var file = fs.readFileSync(__dirname + '/data/projects.json', 'utf8');
    return JSON.parse(file);
    }

    projects.json 是传统的 json 文件

  2. 使用要求:

    function readJsonFileReq() {
    return require('./data/projects.js')['projects'] ;
    }

    projects.js 包含:

    exports.projects = {
    // My variable
    };

问题是哪一个最好:

  • 在性能方面?
  • 在 Node 可写性/哲学方面? (例如,为模块保留 require())

我猜解决方案 2 更好,因为 require() 可能针对读取 JS 代码进行了优化,而解决方案 1 必须读取文件,然后解析它,但解析它可能比执行它更便宜。

最佳答案

在node.js中使用sync fs函数的主要原因是在应用程序启动之前加载文件。最常见的原因是加载配置文件。在这种情况下,性能并不重要。

话虽如此,readFileSyncrequire 之间的主要区别在于 require 将缓存文件的内容。我见过无数次 require 被用来加载 json 文件,所以我不认为它是为模块保留的(不过,请确保在文件路径中包含 .json )。

最后,不要忘记,如果您想编写 varprojects = require('./data/projects.js');,可以使用 module.exports = {..}

编辑:作为引用,我检查了node.js的源代码,正如怀疑的那样,require在内部使用了readFileSync:

https://github.com/joyent/node/blob/master/lib/module.js#L472

// Native extension for .jsModule._extensions['.js'] = function(module, filename) {  var content = NativeModule.require('fs').readFileSync(filename, 'utf8');  module._compile(stripBOM(content), filename);};

关于javascript - Node.js 同步加载 JS 变量的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15654609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com