【问题标题】:Javascript chaining methods and processing timeJavascript 链接方法和处理时间
【发布时间】:2013-03-22 14:23:20
【问题描述】:

我正在使用一个 javascript API,我看到了这句话:

由于 JavaScript 是一种脚本语言,每一行代码都会占用宝贵的处理器时间。提高处理器时间的一种方法是链接方法调用以减少代码行数。 esri.Graphic 和 esri.symbol.* 等对象提供了返回对象本身的 setter 方法,允许链接方法。

效率较低:

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

更高效:

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

在链接方法调用时,您需要确定代码的效率和可读性之间的平衡。如果您避免链接,您的代码可能会更易读和维护;但是,您将失去链接提供的性能优势。

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

关于我从哪里得到这个文本的参考:http://help.arcgis.com/en/webapi/javascript/arcgis/jshelp/inside_graphics.html

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

【问题讨论】:

  • 对我来说听起来很垃圾。
  • 你为什么不测试一下:jsperf.com
  • 我持怀疑态度,尤其是当大多数现代浏览器在执行之前将 JS 编译为机器码。
  • jsperf.com/chaining-performance-test 是我做的,到目前为止它几乎没用,一个运行链更好,另一个不链更好。

标签: javascript performance method-chaining


【解决方案1】:

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

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

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

看看我做的这个测试作为例子。

http://jsperf.com/chaining-demo

【讨论】:

  • 遍历 DOM 两次而不是存储它和链接方法并没有太多共同之处。在 OPs 问题中,使用的对象存储在局部变量中。您将不得不测试var test = $("#test").show() ; test.hide();之类的东西
  • 我对其进行了编辑,以实际显示我提供的示例代码的实际外观。由于它确实存储对象并在未链接的版本中对其进行编辑,因此看起来性能没有受到影响。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多