我不明白,为什么使用listFindNoCase()
和ListFind()
进行一系列OR和IS / EQ比较的首选方式? JVM是否能够优化它并生成有效的代码,而不是进行必须处理字符串标记的函数调用?或者CF做的事情效率低得多?
使用
listFindNoCase()
或listFind()
代替is和or运算符将一个项目与多个项目进行比较。它们要快得多。
http://www.adobe.com/devnet/coldfusion/articles/coldfusion_performance.html
答案很简单:类型转换。你可以比较2 EQ“2”或now()EQ“2011-01-01”,或真正的EQ“YES”。转换(到多种类型)和比较的成本非常高。
ListFind()不需要尝试多次转换,因此速度更快。
这是动态打字的代价。
我发现这也很奇怪。我唯一能想到的是列表元素被添加到一个快速集合中,该集合基于它包含的元素的某些令人敬畏的哈希来检查元素是否存在。对于大型或非常大的列表,这实际上会更快。较小的列表应显示很少或没有速度提升。