我正在构建一个节点应用程序,其中需要一个单词列表。 wordlist在JSON文件中,如下所示:
{
"en":["foo", "bar"],
"gr": ["foo", "bar"]
}
JSON文件中的每个键代表不同的语言。
用户在创建对象时必须选择一种语言。所以我想在构造函数中导入JSON文件,如下所示:
const list = require('./config/lang.json')[lang]
其中lang是传递给构造函数的参数。
这是不好的做法吗?
我听说有人说您应该始终在代码的开头使用require
。我应该在代码const list = require('./config/lang.json')
的开头只需要整个内容,然后只在构造函数中提取所需的语言const wordlist = list[lang]
吗?
答案 0 :(得分:5)
即使代码的工作原理相同,也会缓存require
次调用。在你的情况下,不需要对每个新实例进行额外的函数调用,因此执行以下操作会更快(在这种情况下不重要):
const langs = require('./config/lang.json');
class MyClass {
constructor(lang) {
const list = langs[lang];
}
}
另一件需要注意的事情是,require
是同步的,因此如果您的JSON特别大,那么第一次实例化MyClass
时,事件循环将被阻止。在开始时使用它可能会在服务器(或者你正在做的任何事情)开始之前加载,所以require
中的问题不会花费一些时间。
所以,是的,在我看来,require
调用应该在顶部,除非你知道你在做什么,或者你正在加载动态依赖。
答案 1 :(得分:1)
这是一种不好的做法吗?
实际上,require
有一个缓存,所以它并不重要。
我听说有人说你应该始终在代码的开头使用require。
是的,这是一个很好的做法,以便人们可以轻松发现依赖关系。
我应该在代码
const list = require('./config/lang.json')
的开头只需要整个内容,然后只在构造函数中提取所需的语言const wordlist = list[lang]
吗?
是的,我会这样做。如果它是动态依赖项,我只会在构造函数中放置require
,例如const wordlist = require(
./ config / lang / $ {lang} .json )
。