Javascript 链接方法和处理时间

标签 javascript performance method-chaining

我在使用 javascript API 时看到了这句话:

Because JavaScript is a scripting language, every line of code takes up valuable processor time. One way to improve processor time is to chain method calls to reduce lines of code. Objects such as esri.Graphic and esri.symbol.* provide setter methods that return the object itself, allowing for chaining of methods.

Less efficient:

var symbol = new esri.symbol.SimpleMarkerSymbol();
symbol.setSize(10);
symbol.setColor(new dojo.Color([255,0,0]));

More efficient:

var symbol = new esri.symbol.SimpleMarkerSymbol().setSize(10).setColor(new dojo.Color([255,0,0]));

When chaining method calls, you need to determine a balance between efficiency and readability of your code. Your code might be more readable and maintainable if you avoid chaining; however, you will forfeit the performance benefit that chaining offers.

我理解在 Java 中,编写链式方法与方法堆栈应该编译成相同的字节码。然而,既然这是一种脚本语言,这真的站得住脚吗?另外,如果是这样,为了那段代码的性能而牺牲代码的可读性是否值得?

关于我从哪里得到这段文字的引用:http://help.arcgis.com/en/webapi/javascript/arcgis/jshelp/inside_graphics.html

编辑:经过一些性能测试后,我发现方法是否链接并不重要。 (一次一个会更快,另一次另一个会更快)

最佳答案

像这样的链接方法可以提高性能,但只能在您使用的 API 被构建为提供此功能的有限情况下使用。第一个想到的例子是 jQuery。

调用 $("#test") 需要时间来返回引用 #test 的 jquery 对象。

当您链接一个方法时,它会重用该对象。

以我做的这个测试为例。

http://jsperf.com/chaining-demo

关于Javascript 链接方法和处理时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15572718/

相关文章:

Java(处理1.5.1): Fluent interface @ multilevel inheritance via generics

javascript - 如何为 SVG 元素创建样式表?

javascript - 需要将小于大于标记转换为日语行中的实体

javascript - 在javascript中更改函数上下文的目的是什么?

javascript - 在 Vue.js 中显示未转义的 HTML

c# - 缓存反射属性 getter/setter 的最佳方式?

javascript - DocumentDB - 量化存储过程中的有界执行

performance - 哪个是查询以 Parquet 格式存储的数据的更快(更好)的工具——Spark SQL、Athena 或 ElasticSearch?

python - pandas 中的条件方法链接

python - python中的方法链延迟执行