我正在创建一个允许用户管理日历的网络应用程序(CRUD事件,任务,提醒等......)
我正在尝试实现一项功能,他们将在事件/任务前x分钟收到弹出提醒。根据我的理解,使用javascript只有一种方法可以做到这一点:
登录时,检查数据库中即将发生的事件(比如在接下来的12小时内)并为下一个事件创建setTimeout
,当setTimeout
执行时,再次检查下一个事件和等......
我的问题是,在用户交互过程中在后台运行多个setTimeouts(10+)会降低我的应用程序的性能吗?
有没有更好的方法来处理客户端的弹出通知?推送通知?任何建议将不胜感激!
答案 0 :(得分:4)
这取决于浏览器(或更具体地说,它是javascript引擎),显然甚至是操作系统。
Neil Thomas (while working on GMAIL mobile)和John Resig分析了计时器。
值得注意的一个值得关注的事情是计时器每隔给定时间间隔运行的频率(比如每200毫秒或每10分钟一次......)。
托马斯:使用低频定时器 - 延迟时间为1秒或更长的定时器 - 我们可以创建许多定时器而不会显着降低[Android G1或iPhone 3G]的性能。即使安排了100个计时器,我们的应用也没有明显降低响应速度。然而,对于高频定时器,故事恰恰相反。每隔100-200毫秒触发几个计时器就足以让我们的UI感觉迟钝。
托马斯:
请记住,此代码将每秒执行多次。循环一系列已注册的回调可能是稍微“干净”的代码,但这个函数尽可能快地执行至关重要。硬编码函数调用还可以很容易地跟踪计时器内正在完成的所有工作。
Resig的:
一旦你开始进入64-128个同步计时器的范围,你在大多数浏览器中都运气不佳。
有人可能会看一下Chronos
答案 1 :(得分:3)
我的问题是,在用户交互过程中在后台运行多个setTimeouts(10+)会降低我的应用程序的性能吗?
在这些数字中,没有。 (取决于+
中+
的{{1}}的方式。我的意思是,我预计会有一百万可能是个问题。)
另一种方法是使用一个计时器(例如,每分钟)来检查应该在该分钟发生的通知。 E.g:
10+