【问题标题】:best practices loading knockout js models from server side code从服务器端代码加载淘汰赛 js 模型的最佳实践
【发布时间】:2014-01-09 20:42:06
【问题描述】:

我继承了一个使用 Knockout js 和 asp.net 的网站。加载完所有内容后,该站点运行良好,但初始加载还有很多不足之处。通过代码挖掘大约有 20 个模型,每个模型调用一个 ajax 方法在页面加载时从服务器获取数据。从数据库中查询的数据相当多,导致性能问题,因为服务器发送js,然后客户端发送和接收超过20种方法的大量数据。

我想在将其发送到客户端之前处理服务器端的所有查询,然后从该数据加载 js 模型。我正在考虑将这些数据作为 JSON 发布在页面上的隐藏 div 中,并从那里加载模型而不是 ajax 调用。

我的问题是,这是最佳做法吗?有没有更好的方法来优化这个场景?

【问题讨论】:

    标签: javascript jquery asp.net ajax knockout.js


    【解决方案1】:

    如果您在页面响应中内联来自 20 个查询的数据,则页面响应时间可以显着延长。这将导致浏览器不得不坐下来等待上一页或无聊的空白页。

    但是,如果您将解决方案保持原样,那么用户最初会更快地获得页面,并且数据会在准备好时弹出。

    虽然内联数据的总加载时间可能会更好,但从用户角度来看,感知性能会更差。这是一个关于这个主题的好帖子:http://www.lukew.com/ff/entry.asp?1797

    另一个好处是您没有最弱链接问题,因为页面响应时间将是最慢查询的响应时间。这在查询超时条件下会非常严重。

    还要注意一个查询失败的问题,那么您仍然必须内联成功的查询,并处理失败的查询。

    我认为从浏览器进行查询要好得多。

    如果您希望更有效地执行这 20 个查询,则需要考虑一些技术。考虑使用 SignalR 之类的东西在单个连接中发送所有查询,并让结果也在单个连接中流回。我以前使用过这种技术并取得了巨大的成功,它还使我能够在返回来自慢速后端服务的最新结果之前流回缓存的结果(来自服务器端缓存)。

    【讨论】:

    • 你有没有关于 Knockout 的 SignalR 东西的链接/示例?
    • 不幸的是,没有什么可以公开的。几年前,我在 SignalR 出现之前实现了该技术,然后使用了永久 iframe。我在正常的 XHR 调用中发送了一组查询,该调用立即返回,没有延迟。实际响应来自永久帧(相关 id)。当时一些浏览器限制只有 2 个并发 XHR 请求,我们需要做大约 15 个。使用 SignalR,实现起来要简单得多。这与淘汰赛无关,但是淘汰赛使得从流数据更新 UI 变得更加简单。
    • 这很有意义。我将研究用于 SharePoint ECMAScript 调用的 SignalR。现在的性能非常糟糕,因为 jquery 必须等到调用完成才能连接到页面上的任何 html 控件,给用户 3 秒的页面中断时间,然后输入这个让我觉得我可以尝试重新排列 jquery 在页面加载时执行的顺序。无论如何,肯定回答了我的问题。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-09
    • 1970-01-01
    • 2014-04-13
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多