缓存Converter对象有什么意义吗?建造有多贵?或者我可以这样做吗?
function convertMarkdown(str) {
var converter = new Markdown.Converter();
return converter.makeHtml(str);
}
答案 0 :(得分:3)
转换器对象构造起来相当便宜。通常没有重大的初始化。对我的(相当强壮的)机器进行快速测量:创建一百万个转换器对象,
所以即使在最慢的情况下,每个物体只需44μs。括号中的数字表示“与构建new Date()
相比,这大概慢了多少?”
所以我要说的是,在大多数情况下,这不会成为你的瓶颈,如果你只是偶尔转换一次Markdown,那么它就不会产生实际的影响。
与使用转换器对象的的实际成本进行比较。创建一个转换器对象,然后测量处理字符串"Hello"
所需的时间(请注意,此字符串甚至不包含任何格式)一百万次,
要处理一些“真正的”Markdown数据 - 这个答案的内容 - 一百万次,Chrome需要 800秒(我没有在其他浏览器中衡量这一点)。因此在实际使用中,转换器的构建时间与整体性能无关。
除非你真的只调用一次或两次,否则我个人会缓存该对象,只是因为我认为它更具可读性。
比较
var s = new Markdown.Converter().makeHtml(src);
VS
var s = myConverter.makeHtml(src);
或(使用Andreas' answer)
var s = convertMarkdown(src);
- 当在更大的上下文中浏览该代码时,第一个版本需要第二眼看到对象的创建仅仅是该行的目的。
如果你在转换器对象上注册插件,创建甚至需要多个语句,这样就可以更好地创建对象一次。
答案 1 :(得分:2)
这取决于Markdown.Converter
函数以及调用它的频率,但您可以轻松创建一个函数来保存对转换器实例的引用,因此不需要在每次调用时重新创建它:
var convertMarkdown = (function{
var converter = new Markdown.Converter();
return function(str){
return converter.makeHtml(str);
}
})()