split()对substr()的性能
Performance of split() over substr()
在用JavaScript构建CSS选择器引擎的教程中(对Tuts+成员可见),作者使用以下代码删除散列字符之前字符串中的所有内容:
// sel = "div#main li"
if (sel.indexOf("#") > 0) {
sel = sel.split("#");
sel = "#" + sel[sel.length -1];
}
虽然我是一个JavaScript初学者,但我不是一个初学者程序员。这似乎是一次压倒性的行动,就像用大炮杀死一只蚂蚁。我会用这样的东西:
sel.substr(sel.indexOf("#"));
甚至可能没有包含在已经使用indexof()
的if语句中。因此,正如作者甚至写了一本关于JavaScript的书一样,一定有一些秘密我不知道:使用以前的代码有什么好处吗?也许是表演?
不同实现之间的性能通常差异很大,因此需要进行测试。但如果性能真的是一个考虑因素,我敢打赌.split()
会更慢。
"甚至可能没有附上if语句…"
但我想说的是,你不应该像现在这样内联它。如果没有找到匹配项,.indexOf()
将返回-1
,这将导致.substr
给你字符串的最后一个字符。
var sel = 'tester';
sel.substr(sel.indexOf("#")); // "r"
所以保持if
语句。。。
var sel = 'tester',
idx = sel.indexOf("#"),
sub;
if( idx !== -1 ) {
sub = sel.substr("#");
}
我不确定教程试图做什么,但sel="div#main li#first"
是有效的CSS,他们的代码将返回#first
,sel.substr(sel.indexOf("#"));
将返回#main li#first
。我猜,但这可以在一个循环中工作,在这个循环中,您可以通过CSS选择器进行反向工作。
现实生活中的CSS选择器引擎对所有内容都使用正则表达式,这似乎是最好的方法。该语言为我们提供了一个专门的强大的字符串操作工具,所以为什么不使用它呢
sub = sel.replace(/^.+?#/, "#")
工作做得很快,没有多余的杂物。
性能?在javascript中,我们通常不太在意,因为我们的应用程序不是时间关键型的。没有人关心验证表单或在div中淡入是需要0.1秒还是0.01秒。
- 函数参数中的数据与指定变量之间的任何性能差异
- 提高JQuery的性能
- 使用正则表达式评估电子邮件地址时出现性能问题
- str.split(someString).join(someOtherString)是否等效于替换
- React:按键的性能提升
- 在Three.js中导出网格会提高性能吗
- 如何使用split()将1.18.0-AAA-1转换为1.18.0js
- 在javascript中搜索项目列表的性能
- 为什么在许多浏览器中drawImage()的性能略好于createPattern()
- JavaScript数组优化以提高性能
- React+Redux性能优化与组件ShouldUpdate
- 在循环中附加事件处理程序时出现浏览器性能问题
- JavaScript-===vs===运算符性能
- how to split a string with ','
- 超时功能的性能
- 在javascript中使用split函数希望在页面加载时拆分url
- Pg承诺性能提升:在冲突中
- immutable.js与嵌套映射/对象的比较/相等性能
- NodeJ中的注释会影响性能吗
- split()对substr()的性能