Javascript 如何处理网站上的海量计算?网络工作者还是CGI?

Javascript 如何处理网站上的海量计算?网络工作者还是CGI?,javascript,cgi,web-worker,computation,Javascript,Cgi,Web Worker,Computation,我已经写了一个基于JavaScript的网站,可以进入、编辑和解决。你们可能知道,解一个非图是一个NP完全问题 我的第一次尝试是纯(单线程)JavaScript。但在较大的非图形上,Chrome显示了它的BSOD,并在几分钟后杀死了JS脚本。下一次尝试是使用。我拆分了求解算法,这样每个工作人员都可以得到一行/一列进行求解并返回结果。这是一个改进,它能够解决中等大小的非图。但是,有时浏览器会在一段时间后杀死显示BSOD的JS虚拟机,加上网站没有像我预期的那样真正响应,因为这就是网络工作者的目的,不

我已经写了一个基于JavaScript的网站,可以进入、编辑和解决。你们可能知道,解一个非图是一个NP完全问题

我的第一次尝试是纯(单线程)JavaScript。但在较大的非图形上,Chrome显示了它的BSOD,并在几分钟后杀死了JS脚本。下一次尝试是使用。我拆分了求解算法,这样每个工作人员都可以得到一行/一列进行求解并返回结果。这是一个改进,它能够解决中等大小的非图。但是,有时浏览器会在一段时间后杀死显示BSOD的JS虚拟机,加上网站没有像我预期的那样真正响应,因为这就是网络工作者的目的,不是吗

为了“好玩”,我将求解算法移植到Python中,并使用ajax请求调用Python脚本,而不是Web Workers。有趣的是,它甚至比JavaScript还要慢,但经过一段时间的计算后,请求返回了500个内部服务器错误。我相信这是因为CGI脚本在PHP afaik上的最大执行时间是30秒

CGI的想法不是最好的,因为当多个用户想要解决一个非函数时,服务器运行在100%的CPU上,所以我可能会坚持客户端计算

所以问题是,做这个计算的最佳方法是什么(对于较大的非图可能需要10分钟)?我认为执行时间不是问题,只要网站保持响应,只要浏览器不停止执行任务

同时,我也在尝试优化递归算法


谢谢

在将消息发布到
WebWorkers
之前,您可能会增加一些延迟。如果将流程拆分为足够小的函数,则可以保持页面的响应性,尽管这需要更长的时间才能解决。

我已经这样做了。我使用的gif显示浏览器当前正在解决。我正在使用jQuery显示/隐藏。但当我立即启动工人时,它并没有出现。所以我引入了2秒的延迟。但是,一旦工作人员开始计算,chrome进程在100%CPU上运行,网站就会失去响应。@ebeb你确定没有任何东西一直在它旁边运行吗?在给出更明确的答案之前,我们可能需要看一些代码。是的,我确信,因为只要我用ajax调用替换Worker postMessage调用以使用python版本,页面就会响应。我试着用一个简短的例子来说明这个问题。