JavaScript需要缓存

问题描述

对于我正在设计的小型无状态API,我需要一个非常简单的i18n工具。我将只用两种语言管理少于30个字符串,不会更多。

我决定编写一个非常简单的i18n工具:

exports.i18nString = function (language,stringID) {
    try {
        var dictionary = require(`./${language}.json`)

        if (Array.isArray(dictionary[stringID])) {
            return dictionary[stringID][Math.floor(Math.random() * dictionary[stringID].length)];
        }
        return dictionary[stringID];
    } catch(error) {

    }
    return "";
}

JSON字典示例:

{
    "example": "This is an example","multi": [
        "Choice 1","Choice 2","Choice 3"
    ]
}

它运行完美,非常符合我的需求。不过,有一件事让我感到困扰:每次调用函数中都存在require,需要一个字符串。

我是Js的初学者,但我知道require会打开文件,读取文件内容并进行评估。但是我不知道Js是否足够聪明,可以将文件内容保留在缓存中以供后续调用。如果是这样,那么我的代码就可以了。如果不是这样,我可能会遇到性能问题。

你们能启发我吗?

解决方法

我在随机搜索时找到了答案。

这就是问题:Node.js 确实缓存每个文件,如here所述:

模块在第一次加载后被缓存。这意味着(除其他事项外)如果对require('foo')的每次调用都解析为相同的文件,则将获得完全相同的返回对象。 如果未修改require.cache,则对require('foo')的多次调用不会导致模块代码被多次执行。