我继承了一个使用knockout js和asp.net的网站。在加载完所有内容后,该网站运行良好,但初始加载还有很多不足之处。通过代码挖掘大约有20个模型,每个模型调用一个ajax方法在页面加载时从服务器获取数据。从db中查询的数据相当多,导致性能问题,因为服务器发送js,然后客户端通过20种方法发送和接收大量数据。
我希望在将其发送到客户端之前处理服务器端的所有查询,然后从该数据加载js模型。我正在考虑将这些数据作为JSON发布在页面上的隐藏div中,并从那里加载模型而不是ajax调用。
我的问题是,这是最佳做法吗?有没有更好的方法来优化这种情况?
答案 0 :(得分:1)
如果您在页面响应中内联来自20个查询的数据,则页面响应时间可能会显着延长。这将导致浏览器必须坐在上一页或无聊的空白页面上等待。
但是,如果按原样保留解决方案,那么用户最初会更快地获取页面,并且数据将在准备就绪时弹出。
虽然内联数据的总加载时间可能会更好,但从用户的角度来看,感知性能会更差。这是一篇关于这个主题的好文章:http://www.lukew.com/ff/entry.asp?1797
另一个好处是,您没有最薄弱的链接问题,因为页面响应时间将是最慢查询的时间。在查询超时条件下,这将非常严重。
如果一个查询失败,也要注意问题,那么您仍然必须内联成功的查询,并处理失败的查询。
我认为从浏览器中进行查询要好得多。
如果您希望更有效地执行20个查询,则需要考虑一些技巧。考虑使用SignalR之类的东西在单个连接中发送所有查询,并使结果也在单个连接中流回。我之前使用过这种技术非常成功,它还使我能够在返回慢速后端服务的最新结果之前,回流缓存的结果(来自服务器端缓存)。