前端是否可以不使用计时器进行同步任务?
有同事在开发时遇到了每隔5分钟需要前端页面同步一次接口数据的需求。如果不使用计时器是否有更好的方案可以实现(websocket暂时也不考虑)?
9 回复
- 轮询
- web push (IE 11以下不支持)
前端用 angular rxjs 的话 webdocket 很方便,跟操作http 请求一样
不用计时器就用定时器
meteor.js 监控 mongodb 的改变
@nusr 这个方法有点鱼,不可能要求别人去装mongodb的。
其实我想做的就是能不能不采用计时或者轮询的方法去监控当前时间变化,因为项目不一定会跑多长时间,那些方式处理不好很容易造成内存溢出。
把浏览器和js想得也太脆弱了吧,为何会有这种担心?那我给你提供一些更”牛逼“的方案吧。
- 你可以用长polling,一个连接后端一直不返回,由服务器控制。
- 用activex或则flash等创建tcp的socket来通讯。
- 有一种叫做SSE的,专门让服务器能主动推送东西,而且也还是基于http。
但是你会发现,第一种是畸形,第二种是麻烦,第三种是”我用websocket不是更方便?“。我觉得编程不要想到什么轮询就嫌弃,操作系统有一大堆轮询,任何方案都有存在的合理性,”处理不好就xxxx“不是理由,是伪命题。
就这个 “每隔5分钟” 的要求,不用计时器(或定时器),我还真的想不出别的办法来。
@HobaiRiku 其实服务端有些框架是自带了定时任务的,前端的尴尬就在于不能直接跟系统进行交互,否则兴许也有更好的解决方案吧
@GeekHi 浏览器本身就不存在任何能直接跟系统交互的手段,浏览器没有权限操作系统,没有那么多出路,就连XHR也是提出来才有的,现在不想以前,真的连搞XHR都要写一堆代码(连jq都还没有),现在浏览器规范里面都内置了ws,服务端也有一大堆ws框架,实时通讯用起来简直方便,回到你问的主题,如果无法接收ws,我相信,5分钟只为刷新数据,没有更好的方案。