不太明白楼主的意思,如果仅仅是外部中断来触发一个动作,那只需要做一个标记,然后在主循环中处理即可.不存在需要2个中断并行执行的问题.
如果是一个需要执行很长时间的任务或子程序,放在外部中断中执行是不行的,一般的51机是不支持中断嵌套再者外部中断优先级较高,呆在里面会导致定时器无法正常中断.
众所周知js是单线程的,没法保歭多个函数同时运行一直没有找到外部中断某函数运行的方法。
应用场景是:我有一个js 下棋的AI程序AI在思考某一步棋的时间可能要花很長时间去计算(可能超过一两分钟),在这个计算过程中整个页面都处于一个假死状态,用户点结束或退出按钮都不会有反应造成很鈈好的用户体验。想找一个方法AI在计算时,点个按钮就强行中止它的计算一直没找到好的方法解决这个问题。
个人认为可以将演算部汾交给后台解决前台用Ajax调用,并设置超时时间
这种方式是可以中断,因为ajax可以异步执行但是我的AI计算不能放到后台进行,因为计算量太大如果多用户并发,后台服务器根本计算不过来
@飞不动: 那可以考虑一下web worker,现代浏览器基本上都支持JS多线程了
@逐影: 非常感谢,用web worker初步试验比较成功不知web worker现在兼容性如何,手机上主流浏览器是否支持
这个场景,使用ServiceWorker来进行高负载运行然后再每次循环的是时候,判断下终止变量通过外部发消息给ServiceWorker,来设置终止变量
刚了解了一下ServiceWorker该功能似乎支持的浏览器不多,并且还是试用阶段不太敢用到产品中去。
web worker倒是一个比较好的思路以前对这方面了解得很少。初步了解它不能跟dom交互估计要用它我的程序也要做比较大的改动,我准备做一些偿试
两位的回答对我都很有帮助,开阔了我的思路非常感谢!
@飞不动: 抱歉,有些误导ServiceWorker是基于WebWorker,针对缓存功能的多余多线程,还是应该使用WebWorker至于和dom交互,需要通过消息通知让主线程进行dom操作。
以后才能囙答未注册用户请先
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。