单页 web 应用

现在的公司很多大部分产品都做成了单页应用的形式。

单页应用是指在浏览器中运行的应用,它们在使用期间不会重新加载页面,从而获得比较良好的用户体验。

也就是说,单页面应用是仅包含单个网页的应用,目的是为了提供类似于本地应用的流畅用户体验。

现在很多网站都在用,比如 印象笔记Google DocsGmail


实现方式

现在有很多 Js 框架来比较方便的构建单页应用,比较常用的有 AngularJS, Ember.js, Backbone 等。

这些框架都提供了 MVC、 构建 DOM、管理 UI 交互,管理状态和路由等功能。

优缺点

重点说下单页应用的优缺点。

优点:

1.	前后端分离:前端专注于页面展现,后端注重于存储和计算,可以避免前后端需要交叉的太多(现状是前端得写很多 Jstl、后端 Ajax、 Jsp 都要关注);
2.	后端代码重用:由于后端暴露给前端的只是一个个 Json 接口,同一套后端程序可以做成 Web 端、Mobile 端、手机端;
3.	用户体验好:可以很快的、局部的去渲染页面,避免跳转和重复渲染;
4.	有利于前端 CDN:由于前端代码和后端完全没必要放在一起,前端想怎么折腾都行,可以非常方便的 CDN,这是传统的 Jsp 应用搞不定的;
5.	减轻服务端压力:服务端只用来提供数据,不用管页面的任何东西,会显著提高吞吐性;

缺点:

1.	前端的开发难度增加:以前传统的方式,Js 什么的大部分后端都可以写了,做成单页,很多后端束手无策;
2.	页面抖动:由于过多的 Ajax 请求,导致很明显的页面抖动;
3.	初次加载慢:这个用过 Gmail 的人应该都知道;
4.	很多文字性的说明、静态页面很显得很尴尬;
5.	浏览器后退按钮、书签基本作废;
6.	SEO 基本没有;
7.	基本无法做社交网站分享;

关于后面三点缺点,据说有解决方案,估计也不会解决的特别好。

而对于商业应用来说这些可能就足以致命,如果主要是企业展示站或者对外的商业应用,不太建议使用。

(我厂那么多单页应用,难到是因为大部分都是内部系统吗?哈哈)