如何处理网站上的大规模计算?网络工作者或CGI
How to handle massive computation on websites? Web workers or CGI?
我写了一个基于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
发布消息之前添加一些延迟。如果将流程拆分为足够小的函数,则可以保持页面的响应性,尽管这需要更长的时间才能解决。
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- 在Angular中重新使用HTML端的计算文本
- 如何处理网站上的大规模计算?网络工作者或CGI