可怜的人在 JavaScript 中的缓存

[TL;博士版本: 使用 cookie 来存储异步调用的结果; 立即呈现过去异步调用的结果,然后在页面加载后验证它们。]

我一直在 SharePoint 的内联网网站为客户端的功能, 除其他外, 程式化的二级导航菜单选项都通过定期的老自定义列表管理。  想法是在客户端获取,不影响或受影响,由它推出的全球导航控制"他们的"网站的菜单.

(有件事令人难以置信颠覆有关添加指向一个 HTML 文件,加载一些 CSS 和 JS,从根本上改变几乎一切有关站点的行为......,但那是另一篇文章为 CEWP)

这个漂亮的简单的代码:

痛点这里是,每次有人点击其中一个站点的页面, 该用户的 web 浏览器伸出手来获取列表中的项。  一旦开发完成并测试已被证明是稳定和完整的东西, 此调用是不必要的多 99% 因为菜单中很少发生变化的时间。  它也有一个怪异的 UI 影响这是常见的这个勇敢新世界的超 ajaxy web 站点 — — 呈现页和菜单只然后呈现。  它是紧张不安,在我看来让人分心。  和紧张不安. 所以, 缓存。 

我修改了逻辑广交:

  • 查找包含菜单中,当我最后读到它的浏览器中的 cookie
    • 如果发现, 立即呈现它。  不要等待页面完成加载。  (您需要确保您的 HTML 战略性地放在这里, 但它是不难做到).
  • 等待页面完成加载,使异步调用以加载菜单项从列表中使用休息或 lists.asmx 或不管了
  • 比较与 cookie 得到了什么
    • 如果它匹配, 停止
    • 否则, 使用 jQuery, 如果动态填充一束 <李>中 <ul>
  • 使用 CSS 来做的所有格式
  • 利润!

你们中的一些将要说的话, "嘿,你! 有是没有真正缓存会在这里因为你反正读菜单中 每一次.”  你说得对 — — 我不会给服务器任何种类的休息。  但因为该调用是异步和发生后页面的初始 HTML 有效载荷完全呈现, 它"感觉"更能响应用户。  菜单中将呈现相当多为页绘制。  如果菜单中发生的变化, 用户被受到紧张不安重新绘制菜单, 但仅此一次.

有一些方法可以使此缓存更有效,同时也帮助了服务器:

  • 在"cookie 缓存"是有效的最低限度的规则中 24 小时或一些其他时限. 只要没有过期的 cookie, 使用 cookie 的菜单快照和永远不会撞到服务器.

好,这就是一切,现在我想 :). 

如果任何人有任何聪明的想法在这里我想知道他们.

最后 — — 这种技术可以用于其他的东西。  此客户机的页面在各种页面上有大量的数据驱动的事情, 很多人改变相对地很少 (如每周或每月一次).  如果您针对特定地区的功能, 你可以通过从本地 cookie 存储拉内容并立即呈现给一个响应更快的用户界面。  它感觉快到用户即使你不节省服务器任何周期。  你 可以 通过一些条件和触发器决定作废这本地 cookie 缓存保存服务器周期。  这就是所有情景和艺术的东西和真正最大的乐趣 :). 

</结束>

undefined订阅我的博客.

跟我在 Twitter 上 http://www.twitter.com/pagalvin

一个念头在“可怜的人在 JavaScript 中的缓存

  1. Jonathan 鲁塞尔

    嗨保罗,

    很好的执行, 这就是我们使用的东西,但我们使用 HTML5 本地存储 API 而不是饼干. 第一个驱动器就是我们需要存储 cookie 可以让更多的. 但一个额外的好处是它不会增加有效载荷, 而 cookie 会被发送来来回回. 从开发的角度,它是很容易使用.
    浏览器支持并非十全十美,但老实说很好, http://caniuse.com/namevalue-storage .

    乔纳森 ·

    答复

留言

您的电子邮件地址不会被公开. 必需的地方已做标记 *