前端知识对比

主流框架粗略对照

对照类别 angularjs angular2+ vue react
数据流 双向 单向 单向 单向
状态管理 vuex redux+react-redux
数据绑定 双向(脏值检测) 双向([可定制]脏值检测) 双向(变量劫持+观察订阅模式) 单向
体积和性能 小(vdom) 小(vdom)
通用app(webapp) NativeScript、 ionic ionic2 react-native
SEO支持 Angular-universal Angular-universal nuxt.js next.js
测试 jasmine jasmine jest
优点 生态完善 简单、效率高 组件化提高复用
缺点 开发周期长,学习成本高 生态相对不完善 React 只是一个 View 层,它是为了优化 DOM 的操作而诞生的

可复用的组件

component.jpg

概括起来,就是Vue、Component的组件相对灵活、轻量,添加依赖就可以无缝集成到遗留系统中。对于从0到1的系统,也可以使用新的实践来构建工程,例如ES6、Webpack等技术。Angular4官方推荐使用TypeScript,这需要单独构建和打包,不方便与遗留系统集成。Ember.js自定义了一整套生态,基于CoC理念的设计,采用了前端工程中比较前沿的实践和标准,很难与遗留系统集成,更适合在新项目中使用。至于数据绑定,各有优势。双向绑定在表单交互多的场景中更便捷,单向绑定在管理跟踪记录组件状态时更高效。组件状态更新,各有不同的实现:

  • Vue2.js通过定义setter来监听状态变化,特殊场景需要特殊的API支持, 基于virtual DOM的视图更新。
  • React在组件的状态或属性的变化后,也是基于virtual DOM的视图更新。
  • Angular4在引起状态变化的时刻,框架自动触发脏检查,也可以手动执行脏检查,直接操作HTML DOM更新视图。
  • Ember.js提供数据模型,所有数据的操作通过API执行,使用Glimmer引擎进行HTML渲染和更新。

其中,主要的区别是Angular4是通过事件监听,对比数据更新,直接操作DOM来更新视图,而其它都通过Virtual DOM的思路来更新视图。

学习曲线

learning.jpg

Vue.js和React的重点更侧重于创建可复用、易于测试、能灵活集成的组件。当然,通过其它扩展组件,以及一些脚手架插件的支持,也可以方便的搭建一个采用最新实践的前端应用的构建框架。它们最大的优点是按需定制,学习曲线平滑,构建出来的应用小而精。

相对来说,Angular4和Ember是大而全的框架,它们更侧重于大型前端工程的构建,为开发人员屏蔽项目构建底层的细节,提出了自己的一套解决方案。使用它们的难点是要度过前期曲线陡峭的学习期,优点是由于使用了标准化的开发方式,后期能极大的提高开发生产力,提升开发效率。

Reference

https://www.zhihu.com/question/35069742

https://www.jianshu.com/p/b2b8161c9565

http://imweb.io/topic/573e766f1156025b1dce9404

h5和原生android的优缺点

native(原生) h5 Hybrid(混合)
优点 充分发挥系统特性(调用系统服务,内存管理),操控设备硬件(相机、蓝牙、振动器等),提供更好用户体验、界面,适合游戏等性能要求高的应用开发,可访问本地资源。 使用web方式制作mobie app最大的好处是,客户端无需更新,而且界面的更新由于是基于html5,可能只需要写几个插件就完成了功能的更新添加。 对于对界面的灵活性有较高要求的app,比较倾向于用web方式实现mobie app。 混合方式开发的app拥有上述两者的一些优点,比如Web app的更新迅速,简单,成本低之类的,也能像Native app一样访问本地的很多资源和服务 。
缺点 更新发布版本不方便; 各平台不兼容,多平台的开发、移植比较复杂,开发成本高,开发周期长; 针对多种设备(不同分辨率、不同硬件配置等)的调试和适配较麻烦,开发成本高,开发周期长。 受限于手机浏览器的支持。 性能上无法充分发挥系统特性(调用系统服务、内存管理等),无法操控设备硬件(如相机、蓝牙、振动器等)。 Hybrid App与移动Web App有一些共同的特点。不像纯粹的Native App可直接使用操作系统提供的图形API和用户界面服务,在Hybrid App中,大多数页面由浏览器的渲染引擎来执行——就好比它们是在网页里面。这就意味着,目前,只有以原生方式编写的页面才能获得游戏质量的图形.

编写h5需要注意什么

https://juejin.im/entry/589810295c497d00560194d8

单个页面内容不能过多

导航栏与底部工具栏会遮挡

标题简短

导航条宽度有限

css动画要加webkit前缀

使用 CSS3 来制作动画效果的话,webkit 前缀一定记得加,要不然在某些手机下动画效果是没有的。

二维码图片不要设置为背景

不然没办法出发长按扫描的功能。

cookie、sessionStorage、localStorage

特性 Cookie localStorage sessionStorage
数据的生命期 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 除非被清除,否则永久保存 仅在当前会话下有效,关闭页面或浏览器后被清除
存放数据大小 4K左右 一般为5MB
与服务器端通信 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 仅在客户端(即浏览器)中保存,不参与和服务器的通信
易用性 需要程序员自己封装,源生的Cookie接口不友好 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持