如何处理网站上的大规模计算?网络工作者或CGI

How to handle massive computation on websites? Web workers or CGI?

本文关键字:计算 大规模 网络 工作者 CGI 何处理 处理 网站      更新时间:2023-09-26

我写了一个基于JavaScript的网站,可以输入、编辑和解决非程序。正如你可能知道的,求解非图是一个NP完全问题。

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

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

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

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

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

谢谢!

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