【发布时间】:2010-03-16 02:46:51
【问题描述】:
不久前我在这里问了一个关于为日历/日程安排网络应用程序缓存数据的问题,并得到了一些很好的回应。但是,我现在决定改变我的方法并在 javascript 中缓存数据。
我在 $('body').data() 对象内的日历网格中直接缓存每一天的列的 HTML,这提供了非常快的页面加载时间(几乎不引人注意)。
但是,当用户请求尚未在缓存中的数据时,就会出现问题。该数据由服务器使用 ajax 调用创建,因此是异步的,每周大约需要 0.2 秒的数据。
我目前的方法是在用户从服务器请求信息时阻止 0.5 秒,并在初始页面加载的任一侧缓存 4 周(每个页面更改请求额外 1 周),但是我怀疑这是最佳方法。
有人对如何改善这种情况提出建议吗?
总结一下:
- 每周从服务器异步检索需要 0.2 秒。
- 性能必须尽可能接近实时。 (但是数据不需要完全实时:大多数约会是由用户添加的,因此我们可以在此之后重新缓存)
- 目前在加载的初始周的任一侧缓存了 4 周:这还不够。
- 缓存 1 年大约需要 21 秒,这对于初始加载来说太慢了。
【问题讨论】:
-
这可能是 OT 并且不 打算以任何方式变得刺耳:对于服务器端时间,您可以做些什么吗?我很惊讶你能在 0.2 秒内恢复一周,但两周需要 ~0.4 秒。对于大多数后端,我预计两周将花费几乎与一周一样多的时间,其中大部分时间用于设置请求、检查数据库池中的连接等等,等等,而不是实际查询。但同样,这可能是 OT 并且肯定基于对您的基础架构的无知。 :-)
-
是的,我认为需要更多关于您在服务器上执行的操作的信息。你的减速在哪里?通常它在数据库中,当然,但也许它是别的东西。
-
不,这是一个公平的评论:我实际上取出了传输时间(包括它们在内,它接近 0.5):我不想指望传输速度:这是在我的本地运行目前 ASP.net 开发环境(调试中),因此无法保证它们在实时服务器上时会相同,特别是因为实时设置是负载平衡的,因此由于路由等而具有可变的性能. 一年的 20 多岁的数字包括转会费。我认为从数据源转换为 HTML 需要 1 周时间约 0.2 秒。
-
@WVDominick 数据直接来自数据库:实际上没有办法预先缓存它。还有创建 html 的开销,当您可以有多个并发约会时,让约会正确排列等非常困难,这导致每个输出日调用一次相当可怕的 O(nlogn) 函数。
-
这听起来很复杂而且 CPU 很重,我很想通过 API 遵循 GCal :)
标签: asp.net javascript jquery caching