我有一个图书馆,该图书馆经常使用Node的“ getAttribute”功能。因此,如果我没有node [getAttributeStr](),则可以将其作为node.getAttribute()代替,而可以将getAttributeStr作为本地字符串值“ getAttribute”,这样可以减小代码的大小。
我的问题是,如果我对所有最常用的函数名称都这样做,与直接使用静态名称访问函数相比,它会降低执行速度吗?
node.getAttribute("abc");
上面的代码将被替换。
var getAttributeStr = "getAttribute";
node[getAttributeStr]("abc")
我的函数执行很多,因此担心是否会大大增加执行时间。
答案 0 :(得分:5)
使用您的示例,我迅速进行了一次jsperf测试。
https://jsperf.com/dynamic-vs-static-method-call/1
虽然它们在chrome中大致相同,但是括号符号似乎比firefox中的静态调用慢得多。在Edge中,点符号在我的计算机上的运行速度大约是它的两倍。
要回答您的问题,是的,它将在某些浏览器中将执行速度降低一定程度。
但是,在大多数现代机器上,将一种实现转换为另一种实现几乎是不会引起注意的。根据测试,您仍然可以在最慢的浏览器中每秒调用动态getAttribute 每秒300.000次。大多数网站存在更大的问题,例如加载500 KB的跟踪脚本和相关性以显示一个单页浏览器,请求非缩小/缓存的资源,显示数十个重量级广告等,应首先注意。