为啥单页应用程序通常必须在每页发出更多请求时更快?

Posted

技术标签:

【中文标题】为啥单页应用程序通常必须在每页发出更多请求时更快?【英文标题】:Why is single-page apps faster when it generally has to make more requests per page?为什么单页应用程序通常必须在每页发出更多请求时更快? 【发布时间】:2014-02-10 18:52:29 【问题描述】:

当 SPA 通常必须发出多个请求来获取页面上不同部分的数据时,单页应用 (SPA) 应该如何更快?与渲染服务器端相反,浏览器只需发出一个请求即可获取整个页面?

我还记得在某处读到打开/关闭 Web 请求有时是 Web 请求的瓶颈。

那么,为什么每个页面发出更多请求的方法应该让网站更快呢?

【问题讨论】:

【参考方案1】:

因为你只加载你需要的东西。

例如,在“普通”网页上,菜单、侧边栏等必须在每个页面上重新呈现,但使用 SPA 时只会更改内容。

另外,想想这个案例:一个在首页(带有图片)显示 100,000 个项目的网站。在传统情况下,加载页面需要很长时间,但使用 SPA,您只加载“第一个屏幕”(即用户可以看到的内容),并在他向下滚动时加载其余部分。

换句话说,SPA 并不神奇:只是它们只需要更新页面中发生变化的部分,从而缩短用户的响应时间(即他们可以更快地“使用”新联系人)。

【讨论】:

发出http请求的开销如何?我在某处听说打开/关闭请求占用了请求时间的很大一部分。 (抱歉没有消息来源,我是在一次谈话中听到的) 你需要找到一个平衡点:显然,最好发出一个“大”请求而不是 20 个“小”请求,因为开销太大。但是,如果您的请求是合理的,那么 http 开销就不是什么大问题了。【参考方案2】:

通常 SPA 使用惰性模式方法构建:仅在需要时才获取信息。

进出水疗中心的数据通常采用仅关注数据的格式(例如 json)。表示层是 SPA 的关注点,所有必需的资产都应该已经加载。

所以通常它们更快,更易于维护。

但情况并非总是如此。

【讨论】:

【参考方案3】:

如果做得好,它们会更快,因为:

部分服务器工作负载被客户端抵消。 在任何给定时间仅加载所需的页面片段。 减少了冗余模板代码。一个模板可以为多个项目设置样式,而不必一次为整个页面输出大量 html

它们还有助于延迟加载和在空闲时间下载新数据,以及并行性:元素的并发下载。

【讨论】:

以上是关于为啥单页应用程序通常必须在每页发出更多请求时更快?的主要内容,如果未能解决你的问题,请参考以下文章

为啥数字数组,更多数据排序比对象数组更快,Javascript中的数据更少?

HTTP 行首阻塞:为啥响应必须按顺序返回

为啥即使我使用 Alamofire 发出请求,我的应用程序仍然冻结?

如果我使用 Meteor,为啥需要 Angular? [关闭]

打印时使用 css 在每页上重复标题

为啥从 localhost 向 localhost 发出请求时会启动同源策略?