SPA
- 单页 Web 应用 (single-page application 简称为 SPA) 是一种特殊的 Web 应用。它将所有的活动局限于一个Web页面中,仅在该Web页面初始化时加载相应的HTML、 CSS和JavaScript 。一旦页面加载完成了,SPA不会因为用户的操作而进行页面的重新加载或跳转。取而代之的是利用 JavaScript 动态的变换HTML的内容,从而实现UI与用户的交互。由于避免了页面的重新加载,SPA 可以提供较为流畅的用户体验。
优点
- 良好的交互体验:前端进行的是局部的渲染,避免了不必要的跳转和重复的渲染。
- 前后端职责业分离(前端负责view,后端负责model),架构清晰:单页web应用可以和RESTful规约一起使用,通过REST API提供接口数据,并使用Ajax异步获取,这样有助于分离客户端和服务器的工作。
- 减轻服务器的压力:服务器只需要提供数据,不需要管前端的展示逻辑和页面合成,提高了性能。SPA应用中服务器可以先将一份包含静态资源(HTML CSS JS等)的静荷数据(payload)发送给客户端,之后客户端只需要获取渲染页面或视图数据即可。
- 共用一套后端程序代码:不用修改后端程序代码就可以同时用于web界面、手机、平板等多种客户端。
缺点
- SEO(搜索引擎优化)难度高:由于所有内容都在一个页面中进行动态的替换,也就是利用hash片段实现路由,而利用hash片段不会作为HTTP请求中的一部分发送给服务器,所以在SEO上有着天然的弱势。而SPA使用哈市片段的目的是;片段内容发送变化时,浏览器不会像URL发送变化时那样发送请求,这样就可以只请求页面或渲染所需的数据,而不是每一个页面获取并解析整份文档。
- 首次加载时间过长:为实现单页Web应用功能及显示效果,需要在加载页面使将js、CSS统一加载,部分页面按需加载。所以必须对JavaScript及CSS代码进行合并压缩处理,如果使用第三方库,建议使用一些大公司的CDN,因此带宽的消耗是必然的。
- 前进、后退管理:由于单页Web应用在一个页面中显示所有的内容,所以不能使用浏览器的前进后退功能,所有的页面切换需要自己建立堆栈管理,当然此问题也有解决方案,比如利用URI中的散列+iframe实现。