在2015年,一个函数调用运行的最长时间是多少?



我有一个函数,需要在每次按键上运行,我想知道它是否正在做太多的工作。为了找出答案,我会计时。如果它小于一毫秒,我就必须迭代它1000 - 100万次,然后除以这个量。

虽然这可能看起来很宽泛,但我还是要问,一个函数在2015年运行的最大时间是多少?有标准吗?

在电子游戏中,如果你想达到每秒30帧,那么你有33毫秒的时间,因为1秒等于1000毫秒,1000毫秒/30帧每秒等于33毫秒。如果你的目标是每秒60帧,那么你只有15毫秒的时间。那么,在什么情况下,你会对你的软件开发同事说,他们的功能耗时太长?1毫秒之后?100毫秒?

例如,如果您要使用JQuery在包含1000个元素的页面上查找一个元素,该函数应该花费多长时间?100毫秒是不是太长了?1毫秒是不是太长了?人们通常遵循什么标准?我听说数据库管理员对查询有一个标准的搜索时间。

更新:
我真不知道该如何表达这个问题。我问的原因是因为我不知道我是否需要优化一个函数或只是继续前进。如果我对一个函数计时,我不知道它是快还是慢。所以,如果它小于1毫秒,我就忽略它如果它大于1毫秒,我就处理它。

更新2:


我发现了一个描述场景的帖子。看看这道题中的数字。查询数据库需要3ms。如果我是一名数据库管理员,我会想知道扩展到100万用户是否需要很长时间。我想知道在添加另一个服务器以帮助负载平衡之前,连接到数据库或执行查询应该花费多长时间。

好的。我觉得你问错问题了。或者用一种不太可能产生有效结果的方式来思考问题。

绝对没有规则说,"你的函数应该在不超过X毫秒后返回"。有许多健壮的web应用程序使用的功能可能在250毫秒内无法返回。这是可以的,取决于上下文。

并且,请记住,在您的开发机器上运行3毫秒的函数,在其他人的机器上可能运行得更快或更慢。

但是这里有一些技巧可以让你更清楚地思考:

1)一切以用户为中心。真的(我有点犹豫要不要这么说,因为有人会把我的话太当真,要么写出糟糕的代码,要么和我展开一场激烈的论战),但只要代码的性能不影响用户体验,你的功能就可以按照你想要的时间来运行。我并不是说你应该在代码优化中偷懒;我是说,只要用户没有感觉到任何延迟,你就不需要真的强调它。

问自己两个问题:a)函数多久运行一次?b)它将连续快速运行多少次,其间没有中断(即它将在循环中运行)?

在每次用户键入一个键时调用函数的示例中,您可以根据用户按下一个键的频率来决定"完成一个函数需要多长时间太长"。同样,如果它不关心用户有效使用应用程序的能力,那么你就是在浪费时间为3毫秒讨价还价。

另一方面,如果你的函数将在一个运行100,000次的循环中被调用,那么你肯定希望花一些时间使它尽可能精简。

3)在适当的地方使用承诺。Javascript promise 是一个很好的特性(尽管它们不是Javascript独有的)。承诺是在说,"听着,我不知道这个函数要花多长时间。我现在就开始写,写好了就告诉你。"然后,剩下的代码可以继续执行,每当承诺完成时,你就会得到通知,并可以在那时做一些事情。

最常见的承诺示例是AJAX设计模式。你永远不知道调用后端可能需要多长时间,所以你只是说"好吧,当后端响应一些有用的信息时,让我知道"。

在这里阅读更多关于承诺的内容

4)为乐趣和利润设定基准就像上面提到的,有时候你真的需要减少每一毫秒的时间。在这些情况下,我发现jsperf.com非常有用。它们使得快速测试两段代码,看看哪一段运行得更快变得很容易。还有很多其他的基准测试工具,但我非常喜欢这个。(我意识到这有点离题了,但在某些时候,其他人会来读这篇文章,所以我觉得这是相关的)

总之,记住将这个问题与用户联系起来。为用户而优化,而不是为你的自我,或一些任意的数字。

相关内容

最新更新