在TypeScript编译器中,src/compiler/parser.ts包含以下内容,其中identifiers
是字符串对字符串的Map
:
function internIdentifier(text: string): string {
let identifier = identifiers.get(text);
if (identifier === undefined) {
identifiers.set(text, identifier = text);
}
return identifier;
}
这与字符串的识别功能具有相同的行为:
const id = (text: string) => text
我认为它的存在是为了提高性能。如何改善性能?我问是因为:
text
)才能在地图中查找相同的字符串。答案 0 :(得分:1)
它可以节省内存。请看以下示例:
const s1 = readFromFile();
const s2 = readFromFile();
const s3 = readFromFile();
您的内存中有多少个不同的字符串对象? 3,但都包含相同的字符。
现在采取以下行动:
const s1 = internIdentifier(readFromFile());
const s2 = internIdentifier(readFromFile());
const s3 = internIdentifier(readFromFile());
您的内存中有多少个不同的字符串对象?只是1。所有三个变量都引用同一个字符串对象。