2010-09-02 83 views
14

我想知道在原始计算能力方面,客户端JavaScript与服务器端Java相比有多快。客户端JavaScript与服务器端Java的速度有多快?

例如,排序。如果可能的话,是否应该在服务器端完成?如何迭代一个集合?

+0

除了下面提到的所有内容(服务器与客户端资源,虚拟机中编译的字节码与解释的脚本等等) - JavaScript的速度取决于浏览器。 – 2010-09-02 16:17:54

+0

我注意到Facebook为了提高性能已经将工作转移到JavaScript的[大型]服务器场上。 – 2010-09-02 16:20:48

回答

16

答案很复杂,取决于每个特定的情况。

服务器通常要比客户端机器强大得多;托管代码通常比脚本快得多。

但是 - 客户端计算机通常还有很多未使用的备用计算能力,而服务器可能正在为成千上万的用户运行请求。所以在这种情况下,可以卸载到客户端的大部分工作是可取的。

你必须了解每个单独的功能需求和用户的期望,你的应用程序,并期待在相对负载与开发成本为贵单位两个环境之间的分裂发展,找出效果最好。例如,您的用户可能期望您的网站不会冻结浏览器或导致不幸的“此网页正在吃掉您的计算机”对话框,因此您的客户端脚本应该被智能地编写。这并不是说你不能在客户端上做任何工作(你可以),你只需要聪明一点,记住它会阻塞UI线程。

+3

你也必须小心你有多少卸载到客户端......你不想让那个讨厌的浏览器弹出说:“这个脚本花了太长时间......继续/停止脚本” – Zoidberg 2010-09-02 15:29:33

+0

还有回发问题。你在服务器端做的任何事情都需要回传,至少会重新加载部分页面。这需要往返服务器,并可能导致用户失去他们在屏幕上的位置(这通常会让用户填写表单或查看长页面时感到烦恼)。如果你能做到客户端,这不是问题;您可以通过AJAX缓解行为问题,但是您仍然可能会遇到浏览器位置丢失的情况。当然,如果您的操作需要像DB这样的服务器端资源,那么操作只需要在服务器端进行处理。 – KeithS 2010-09-02 16:24:43

4

这两样东西不能并排比较。

有太多的因素,而且语言差异太大,而且服务条件差异太大,无法有效比较速度。

您确实需要根据具体情况决定您在哪里进行计算。

如果客户机需要做太多的工作,它会降低应用程序的性能,但如果服务器被要求做太多,它可以减慢响应时间为大家。

5

这里最大的不同点是虚拟机的速度。不同之处在于单台服务器必须为数十或数百个客户端提供服务。另一个因素:到服务器的往返添加一个很多的开销,所以你想要最小化它们。

基本上,任何不是安全关键的东西都可以在客户端上轻松完成,应该在客户端上完成

2

JavaScript是足够快的方式来对客户端上的数据进行排序。我已经将它与5000行的数据集一起使用,每行11个字段,并使用它对客户端上的表进行排序(使用分页)。这些排序使用比较函数,以便按字段和数据类型对行进行排序。该过程的实际Javascript部分采用了几十毫秒(如果我记得〜80)的顺序。

我的任何一天,而推那种平凡的任务下到客户端,而不是堵塞了一个非常繁忙的服务器吧。因人而异。

8

服务器端Java肯定会运行得更快,则需要基准你的具体情况,但你可能在寻找一个10-20x速度优势。

但是,可能没有多大关系:无论原始计算能力我还是建议尝试以下原因做尽可能多的计算尽可能客户端的Javascript:

  • 即使速度降低20倍对用户来说可能并不明显
  • 当考虑客户端到服务器通信的延迟时,在客户端进行本地操作几乎肯定会对用户做出更好的响应
  • 台客户端机器可能不是CPU密集型的,所以对他们执行一些额外的代码实际上是免费
  • 如果你可以卸载从服务器到客户端的工作,你将需要更少的服务器端架构,当你需要它可以得到昂贵开始扩大
  • 有很多客户到服务器的通信很可能你的架构复杂化,使其难以在未来开发新的功能。
  • 在客户端上做计算往往可以降低带宽要求

当然也有充分的理由让事情在服务器如:

  • 安全问题(如果客户不能被信任)需要
  • 非常大的数据集(将需要很长时间才能下载到客户端)
  • 需要利用大规模并行计算(如谷歌搜索)
  • 避免需要考虑客户的差异(例如Javascript版本)

但是,如果这些不适用,那么我会尝试尽可能推送给客户端。

+0

+1好答案。您可以添加到优势服务器列表中 - 不必太担心客户端浏览器支持哪种JavaScript版本。 – emory 2010-09-03 06:00:19

+0

好主意,加! – mikera 2010-09-03 09:26:44

2

不要使用JavaScript的mixup爪哇 - 名字相近,但它们是完全不同的语言。 JavaScript是一种客户端,解释型语言,Java是一种运行在虚拟机内的字节码语言,在处理大量数据方面拥有更多的优化。 作为一个事实,即运行Java服务的服务器通常拥有更多的权力(速度更快的CPU和磁盘I/O,更多的RAM)上的Java计算总是在我的经验更快。 如果你想计算小数据(比如只排序几百个元素),可以在客户端使用Javascript。总而言之,你将不得不决定哪种方式更快:在服务器上计算和准备数据,并将它们传输到客户端(通过互联网传输是最大的放缓原因),或者计算数据已经在客户端通过JavaScript。

我的建议是:如果有没有你想在客户端已经在客户端是有意义的计算它们在服务器和传输已准备好的数据在客户端的数据。但是,如果数据已经在客户端,并且它们不超过几百个,那么在用户的浏览器中计算它们的用户体验会更好。

0

这真的取决于你所运行代码的盒子,数据有多大和可用性与工艺等因素的工作,再加上你不得不考虑通过导线,它是昂贵的发送数据。你必须平衡你将要做什么,如果最好花费更多的时间处理事情,让资源免费用于繁重的东西,并播放来回数据。