关于事件处理函数引用的一个佐证
之前, 我在分析Javascript的This关键字的时候, 说过, 当使用inline的方式写dom元素的事件处理函数的时候, 采用的是引用的方式. 刚好nullbyte童鞋给我提供了一个很有意思的Case:
<img id="foo" src="xxx" onerror=" alert('error');
} function foobar() {
alert('www.laruence.com'); " />
<script>
alert(document.getElementById("foo").onerror);
</script>
在IE下试试看..
不过, FF和Chrome下都不行, 应该是FF和Chrome都会验证html代码的合法性.
Javascript正则的效率
如果你看到有人写Javascript的trim的时候采用了循环的方式,而不是正则的方式, 请不要笑. 人家这可是经验所致, 考虑如下代码的执行时间会是多少?
var matchs = /^(a+)+$/.exec("aaaaaaaaaaaaaaaaaaaaaaaaaaaX");
alert(matchs);
告诉你吧…. 注:以下结果来自看手表估测, 但不影响时间的长度性…另外jsmore的stauren同学也验证了这一结论:
IE8: 30秒
FF3: 28秒
号称目前最快的采用V8引擎的Chrome: 8秒.
这个结果,,,是多么的不可接受啊? 具体原因的分析, 在master regular expression里面有提到过.
NFA和DFA的引擎是有区别的。js/perl/php/java/.net都是NFA引擎。
而DFA与NFA机制上的不同带来5个影响:
backtracking(回朔)
当NFA发现自己吃多了,一个一个往回吐,边吐边找匹配,这个过程叫做backtracking。由于存在这个过程,在NFA匹配过程中,特别是在编写不合理的正则式匹配过程中,文本被反复扫描,效率损失是不小的。明白这个道理,对于写出高效的正则表达式很有帮助。
而对于Javascript中的正则来说, 应该是优先匹配量词, 导致了很深的递归, 形成了性能问题…
本文地址: http://www.laruence.com/2009/09/27/1123.html 作者: Laruence
2024 - 快车库 - 我的知识库 重庆启连科技有限公司 渝ICP备16002641号-10
企客连连 表单助手 企服开发 榜单123