前一段时间我发现了类似的问题,所以我建立了一个这样做的东西。它使用Web worker并动态获取脚本(但没有Eval!)。 Web工作者对脚本进行沙箱化,以便它们无法访问窗口或DOM。你可以看到代码 这里 ,以及主要网站 这里
该库在首次加载时具有同意弹出窗口,因此用户知道后台发生了什么。
我想我们可以验证某些问题的结果。
假设我们有n个项目,需要对其进行排序。我们将它交给worker-1,worker-1会给我们结果。我们可以验证它的O(n)时间。请考虑至少花费O(n * log(n))时间来产生结果。另外我们应该考虑n项有多大? (关注网络速度)
另一个例子是f(x)= 12345,并给出了函数。目的是找到x的值。我们可以通过用一些工人的结果替换x来测试它。我认为一些不可核实的问题很难给予某人。
Javascript分布式计算的整个想法有许多缺点:
虽然只有一个(但非常诱人)优势:
然而,最大的问题是 的 可扩展性和烦恼之间的关系 强> 。假设您提供一些有吸引力的Web服务并在客户端运行计算。你用于计算的人越来越多,人们越来越生气。更多的人感到恼火,更少的人使用您的服务。好吧,你可以限制烦恼(计算),可扩展性或尝试之间的东西。
以谷歌为例。如果谷歌将在客户端运行计算,有些人将开始使用bing。多少 ?取决于烦恼程度。
Javascript分布式计算的唯一希望可能是多媒体服务。只要它们消耗大量CPU,就没有人会注意到任何额外的负载。
我在项目推荐的背景下自己思考过这个问题。
首先,有 的 没有 强> 速度问题! JIT编译的javascript可以和未经优化的C一样快,特别是对于数字代码。
更大的问题是在后台运行javascript会降低浏览器的速度,因此用户可能不喜欢您的网站,因为它运行缓慢。
显然存在安全问题,如何验证结果?
和隐私,你能确保敏感数据不受损害吗?
除此之外,这是一件非常困难的事情。您收到的访问次数是否可以证明您必须付出的努力?如果您可以在服务器端或客户端透明地运行代码,那会更好。将其他语言编译为javascript可以在这里提供帮助。
总之,它没有普及的原因是因为开发人员的时间比服务器时间更有价值。丢失用户数据的风险和对用户的不便超过了潜在的收益。
这里有“用户权利”的内容。听起来您正在描述Foo.com的网站管理员在其网站上包含Folding @ Home的脚本的情况。因此,所有访问Foo.com的访问者都将其部分CPU“捐赠”给Folding @ Home,直到他们离开Foo.com。如果没有某种免责声明或选择加入,我会认为这是一种恶意软件形式,并且避免访问任何那样做的网站。
这并不是说你无法建立一个要求确认或许可的系统,但是有明确的滥用可能性。
我知道pluraprocessing.com做类似的事情,不确定是否完全是javascript,但是他们通过浏览器运行Java并且在严格的安全性下完全在内存中运行。
他们有50,000个计算机网格,他们已成功运行应用程序,甚至像网络爬行(80legs)。
我觉得 网络工作者 很快将用于创建分布式计算框架,还有一些 早期尝试 在这个概念。在使用setTimeout之前,可能已经完成了非阻塞代码执行,但由于大多数浏览器供应商最近都专注于优化他们的JS引擎,因此它有点意义。现在我们有更快的代码执行和新功能,因此我们浏览网页时在后台无意识地运行一些任务可能只需几个月;)
我认为第一个问题是计算中的javascript效率低下。它不值得,因为纯c / c ++中的应用程序将快100倍。