如何构建单页WEB应用

栏目: 编程工具 · 发布时间: 6年前

内容简介:如何构建单页WEB应用

简单来说,是因为单页应用具有组件化,复用性,易于维护等多方面优点,场景主要在控制台应用,管理后台等等,当然通过服务器渲染做成网站应用的也有。

Gmail、Evernote、Trello,Teambition…都是单页应用的成功案例,拥有更好的用户体验,对单页应用来说模块化的开发和设计显得相当重要。

SPA历史

首先单页应用,我首先想到的是ExtJS,重量级的UI组件,开发者基本上不需要写HTML代码,全部通过new Component的方式,来展示UI,构建应用。

后来随着移动互联网的兴起,很多应用慢慢开始尝试做web本地应用(单页应用,完全在webview中运行),通过Phonegap, Cordova 最终发布到Android Market,Apple Store,让SPA大行其道。最早的比如 Sencha TouchJquery Mobile ,以及现在的 ionic 等等。

现在有了 AngularEmberJSBackboneVuejsReactJS ……, 选择适合的Framework 使得我们构建单页应用变的更简单,更高效。

如何构建SPA应用?

我们通过三点来重点说明如何构建:

  • 模块化
  • 状态管理
  • 程序构建

模块化

Single Page, 顾名思义,就是单一页面,一个HTML,程序之间的切换通过直接或间接操作DOM来实现。

抛开单页,我们在开发多页webapp的时候,经常性的会看到页面引入大量script标签:

<script src="http://your-domain/jquery.js"></script>

<script src="http://your-domain/utils.js"></script>

<script src="http://your-domain/app.js"></script>
......

这么写有什么不好么?不好的地方在于:

  1. 应用大量的script,相当于发起N次网络请求,增加网络负担;
  2. 由于JS并没有命名空间的概念,引入多个script,很容易造成命名空间冲突,导致代码出现问题,很难及时定位。
  3. 代码很难复用,维护成本高。

通过SPA,我们将代码模块化、组件化,充分做到代码复用,我们不再在程序中通过script来引入另外一个组件,而是通过CMD、AMD, CommonJS 方式来组织代码。

例如一个view中需要引用Alert组件,只需在JS中:

import Alert from 'path/to/Alert.js';
// 使用
Alert.show();

是不是很方便?

这里推荐大家使用 Browserify 或者 Webpack 来模块化你的组件,他们配合Babel,让我们写ES6的语法,享受代码的简洁性。

状态管理

当我们的单页应用慢慢变的大起来,我们通过直接修改DOM,很容易出错,也很容易造成性能问题,也很难将逻辑与UI进行分离,代码又成了一团糟,此时人们发明了程序组件的状态化,通过动态更改State来改变UI,而不是直接操作DOM。让程序变得更加健壮,而且更易于测试。

常见State管理,比较有名的是Flux,也有非常流行的,受Flux启发的 ReduxVuex 等等。

程序构建

当我们在开发SPA程序,如何做到代码更易于调试,如何通过热加载来加快程序开发,在程序开发完毕,如何将代码合并,压缩,如何将代码分片异步加载……。好在现在已经有了很多成熟的 工具 帮我们完成这一系列的动作。

常见的有: GruntGulpWebpack

Grunt, Gulp都是基于任务式的,可以很灵活的通过编程方式来操作构建行为,区别在于Grunt任务配置项之多也常常被人诟病,较臃肿,配置一个任务,轻轻松松几百行…

Gulp相比Grunt更有设计感,易于学习,核心设计基于Unix流的概念,通过管道连接,前面输出结果作为后面的输入,遵循代码优于配置策略,维护Gulp更像是写代码。

相比Gulp&Grunt,他们更像是一个工具,而Webpack是模块化方案。

  1. Webpack 遵循commonJS 的形式,但对 AMD/CMD 的支持也很全面,方便旧项目进行代码迁移。
  2. 能被模块化的不仅仅是JS ,所有的静态资源,例如css,图片等都能模块化。
  3. 开发便捷,能替代部分 Grunt/Gulp 的工作,比如打包、压缩混淆、CSS预编译、图片转base64等等。

总结

现在我们可以构建我们的SPA程序了,通过:

  1. 通过将程序模块化,让组件分离,便于复用;
  2. 然后通过状态管理,间接改变程序状态(State),而不是修改DOM,来动态更新UI;
  3. 程序构建,将组件化的程序打包,压缩,预编译…,然后部署上线。

完美~

SPA的boilerplate, 请到github查看源代码:

  1. 通过vuejs1.0 & vuex构建SPA: vue-spa-boilerplate
  2. 通过vuejs2.0 & vuex构建SPA: vue2.0-spa-boilerplate
  3. 通过reactjs & redux构建SPA: react-spa-boilerplate

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

服务设计与创新实践

服务设计与创新实践

宝莱恩 (Andy Polaine)、乐维亚 (Lavrans Lovlie)、里森 (Ben Reason) / 王国胜、张盈盈、付美平、赵芳 / 清华大学出版社 / 2015-6-1 / CNY 69.00

产品经济的时代渐行渐远,在以服务为主导的新经济时代,在强调体验和价值的互联网时代,如何才能做到提前想用户之所想?如何比用户想得更周到?如何设计可用、好用和体贴的服务?这些都可以从本书中找到答案。本书撷取以保险业为代表的金融服务、医疗服务、租车及其他种种服务案例,从概念到实践,有理有据地阐述了如何对服务进行重新设计?如何将用户体验和价值提前与产品设计融合在一起? 《服务设计与创新实践》适合产品......一起来看看 《服务设计与创新实践》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具