让我们来看看最受欢迎的SPA网站之一,GMail。
1. SPA对于响应非常迅速的网站来说非常好:
服务器端渲染并不像以前那样困难,例如在URL中保留#hash,或者最近的HTML5 pushState
。使用此方法时,Web 应用的确切状态将嵌入到页面 URL 中。与在GMail中一样,每次打开邮件时,都会向URL添加一个特殊的哈希标签。如果复制并粘贴到其他浏览器窗口可以打开完全相同的邮件(前提是它们可以进行身份验证)。这种方法直接映射到更传统的查询字符串,区别仅在于执行。使用HTML5 pushState(),您可以消除并使用完全经典的URL,这些URL可以在服务器上解析第一个请求,然后在后续请求中通过ajax加载。#hash
2.使用SPA,我们不需要使用额外的查询到服务器来下载页面。
用户在访问我的网站期间下载的页面数量??当他/她打开他/她的邮件帐户时,一些人真的读了多少邮件。我一次性阅读了>50。现在邮件的结构几乎相同。如果您将使用服务器端渲染方案,则服务器将在每个请求(典型情况)上渲染它。- 安全问题 - 你应该/不应该为管理员/登录保留单独的页面,这完全取决于你的网站的结构采取 paytm.com 例如,也做一个网站SPA并不意味着你为所有用户打开所有端点我的意思是我使用表单身份验证与我的水疗中心网站。- 在可能最常用的SPA框架Angular JS中,开发人员可以从网站加载整个html temple,以便根据用户的身份验证级别完成。所有身份验证类型的预加载 html 不是 SPA。
3.可能还有其他优势吗?不要听说其他任何消息。
- 这些天,您可以安全地假设客户端将具有支持javascript的浏览器。
- 只有网站的一个入口点。正如我之前提到的,状态的维护是可能的,你可以有任意数量的入口点,但你肯定应该有一个。
- 即使在SPA用户中也只能看到他拥有的适当权限。您不必一次注入所有东西。加载 diff html 模板和 javascript 异步也是 SPA 的有效部分。
我能想到的优点是:
- 渲染html显然需要一些资源,现在每个访问您网站的用户都在这样做。现在不仅渲染主要逻辑都是在客户端而不是服务器端完成的。
- 日期时间问题 - 我只是给客户端UTC时间是一个预设的格式,甚至不关心我让javascript处理的时区。对于我不得不根据从用户IP派生的位置来猜测时区来说,这是一个很大的优势。
- 对我来说,状态在SPA中维护得更好,因为一旦你设置了一个变量,你就知道它会在那里。这给人一种开发应用程序而不是网页的感觉。这通常有助于制作食品熊猫,flipkart,亚马逊等网站。因为如果您没有使用客户端状态,则使用的是昂贵的会话。
- 网站肯定是非常敏感的 - 我将举一个极端的例子,尝试在非SPA网站中制作计算器(我知道它很奇怪)。
来自评论的更新
似乎没有人提到套接字和长轮询。如果您从另一个客户端注销,说移动应用程序,那么您的浏览器也应该注销。如果不使用 SPA,则必须在每次重定向时重新创建套接字连接。这也应该适用于数据中的任何更新,如通知,个人资料更新等
另一个角度:除了您的网站,您的项目是否会涉及原生移动应用程序?如果是,您很可能会将原始数据从服务器(即JSON)馈送到该本机应用程序,并进行客户端处理以呈现它,对吗?因此,有了这个断言,你已经在做一个客户端渲染模型。现在的问题是,为什么你不应该在项目的网站版本中使用相同的模型呢?有点不费吹灰之力。然后问题就变成了您是否只想为了SEO的好处和可共享/可书签URL的便利性而呈现服务器端页面