加快单页应用程序(SPA)中的渲染速度

时间:2013-03-10 00:23:09

标签: javascript asp.net-mvc json rendering

所以我正在开发一个使用后端Web服务发送JSON有效负载的应用程序,然后通过专有的Javascript MVC框架在客户端上呈现。

在我们的特定应用程序中,我们有一个多页面表单向导。所有页面都是可自定义的,因此我们必须发送所有布局信息以及填充它的数据。模板存储在html中,然后在客户端将它们从DOM中删除并缓存以供重复使用。

与我通常看到的不同的是,整个表单的所有数据都在一个Ajax调用中加载,然后在应用程序响应之前呈现所有内容。这可能需要(取决于设置的大小)5,10,20秒。

表格加载后,一切都闪电般迅速,效果非常好。无需等待一次即可完成整个过程。然后,当你到达结束并提交时,ajax调用也需要10-20秒才能返回并显示确认。这是因为我们不会在发生任何事情时向服务器发送任何内容,我们会在最后保存所有内容。

所以回顾一下:

获取巨大的JSON有效负载(等待)>渲染一切(等待)>用户完成表单(所有客户端)>用户提交整个表单(等待)>确认页面

大部分时间花在第2步中渲染所有内容。

我加快这一点的想法有几个:

1)打破ajax调用。而不是获取整个表单,对每个页面进行ajax调用,将它们全部发送出去并开始在其回调方法中呈现该页面。

2)目前一切都是在客户端呈现的,我在考虑如何在我们等待数据时预先渲染服务器上的某些页面(在一个单独的线程中?)。

作为参考,我们在ASP.NET环境中,后端的ASMX Web服务和客户端的内部框架,我们确实有jQuery可用。

1 个答案:

答案 0 :(得分:1)

我建议做的是让每个“页面”分开。当你必须获取整个页面时,我只会返回第一页,其中可能包含指向下一页的链接。所以你的json响应可能是这样的:

{
    "layout":{
        // layout information
    },
    "data": {
        // info to render
    },
    "next_page" : "link/to/next/page"
}

现在当返回它时,渲染第一页(可能有一个web工作,稍后我将讨论),并启动对“next_page”的AJAX调用。对每个页面重复此过程,直到没有提供“next_page”(即最后一页)。

这将允许后续页面呈现,然后用户完成每个页面。

网络工作者(HTML5功能)

Web worker允许使用javascript线程,这样可以让您在后台进行渲染,而不会干扰UI循环。为了帮助您入门,您可以查看此introduction

请注意,我没有亲自使用Web worker进行任何操作,但您应该可以将它们用于大型渲染任务。如果您选择,请记住,您必须为不支持它们的浏览器提供某种回退。