JavaScript 链式方法和处理时间

3

我正在使用一个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 编辑:经过一些性能测试,我发现无论方法是否被链接都无关紧要。(有时一个方法会更快,另一次则另一个方法更快)

1
听起来对我来说像是垃圾。 - sje397
为什么不试一下:http://jsperf.com/ - Ben McCormick
我持怀疑态度,尤其是因为大多数现代浏览器在执行之前会将JS编译成机器码。 - David
http://jsperf.com/chaining-performance-test 这是我做的东西,到目前为止几乎没有什么用处,一个运行链式更好,另一个不链式更好。 - CBredlow
1个回答

3
链接方法可以提高性能,但只有在使用的API构建为提供此功能的有限情况下才能提高性能。我首先想到的是使用jQuery。
调用$("#test")需要时间返回引用#test的jQuery对象。
当您链接方法时,它会重复使用该对象。
请查看我制作的此示例测试。 http://jsperf.com/chaining-demo

1
遍历DOM两次而不是存储它和链接方法实际上没有太多共同之处。在OP的问题中,使用的对象被存储在一个局部变量中。你需要测试类似于var test = $("#test").show(); test.hide();这样的东西。 - Moritz Roessler
我编辑了它,以实际展示我提供的示例代码的真实外观。由于在未绑定版本中存储并编辑对象,因此看起来性能没有受到影响。 - CBredlow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接