【发布时间】:2015-02-22 16:08:35
【问题描述】:
我需要在我的 node.js 应用程序中呈现一个模板字符串。我不想使用 Jade、Ejs、React 或类似的库。出于各种原因,我想使用纯 JavaScript 来做到这一点。我想知道哪种方法最有效,我想了两种方法。
一个示例模板字符串可以是:
<html>
<head></head>
<body>
<div>{{data1}}</div>
<span>{{data2}}</span>
</body>
</html>
我需要用一些数据替换{{data1}} 和{{data2}}。
我想知道在使用正则表达式和多次调用的性能方面,这是否是一个更好的解决方案:
templateString.replace(/{{data1}}/, data)
或循环字符串的每个字符并以下列方式在 for 循环中执行渲染,而不使用正则表达式:
for(i = 0; i < templateString.length; i++) {//binding logic}
我不知道replace 方法在较低级别是如何工作的,所以我想知道是否多次执行它比循环一次我的字符串的所有字符在性能上更差。
感谢您的建议!
【问题讨论】:
-
我猜 for 循环在找到匹配项时会稍微快一些,但你仍然需要替换一些东西,而且对于这样的事情使用正则表达式要简单得多,所以这就是我会使用的,或者不是真的,我会使用 EJS 而不是重新发明轮子,它正是使用正则表达式来做到这一点的。
-
你为什么不从 jquery tmpl 中屠宰它?修剪(标记) .replace(/([\\'])/g, "\\$1") .replace(/[\r\t\n]/g, " ") .replace(/\$\{ ([^\}]*)\}/g, "{{= $1}}") .replace(/\{\{(\/?)(\w+|.)(?:(((?:[ ^\}]|\}(?!\}))*?)?))?(?:\s+(.*?)?)?((((?:[^\}]|\}(? !\}))*?)))?\s*\}\}/g, 函数(all, slash, type, fnargs, target, parens,
-
因为我认为每次替换都应该在后台循环整个字符串以找到匹配项,并且我想要一种更快的方法来循环整个字符串一次! @MhammadChehab
-
好吧,我以为你想要一些又快又脏的东西! @莫里斯达
标签: javascript regex node.js performance rendering