背景介绍
前端的需求的升级:从展示静态页面到要求高交互性
以前的开发:直接操作原生dom。存在的问题:
- 需要熟悉dom操作的API
- 使用相对底层的dom进行操作,会导致代码比较冗长
- 需要知道每个用户动作之后,需要执行什么副作用,如果副作用较多则容易有遗漏导致出差错
- 以to do list为例,比如添加了一个新的待做事项之后,就需要1. 更新待做事项列表 2. 更新未做事项数量(compute);
- 完成了一个待做事项,则需要1. 更新待做事项列表,把这个已做事项删除(dom删除); 2. 更新已做石像列表,添加这个事项(dom增加); 3.更新统计表格,把所有相应数据/图表进行更新
使用原生dom api 进行开发
developer.mozilla.org/zh-CN/docs/…
vue和jquery的开发对比:www.smashingmagazine.com/2018/02/jqu…
- jquery需要关心dom结构
- jquery只能使用log进行debug,而vue有自己的专属工具
- 代码风格的改变:
- vue:陈述式 declarative
- jquery: 命令式 imperative
框架带来的好处
- 解决高交互需求下,UI更新麻烦,开发体验不好的问题----提高开发体验----》 声明式数据驱动UI开发体验
- 由于前端的需求基本就是围绕数据进行,所以数据驱动的核心思想很贴合前端需求 -------》框架提供的响应式数据
- 提供软件开发的意见(可预测性、同质性),有利于软件的规模发展
- 框架本身的api设计、开发核心思想(心智模式、哲学),为开发人员提供了一个成熟的设计架构参考,有利于软件的发展
- 提供社区工具、组件化开发、路由(现成的解决方案)
- 工具类-》提高开发效率
框架带来的问题
-
框架的学习成本
- 本来使用框架的原始目的,是为了提高开发效率,但是使用框架的方法是需要学习的。而且在之前每天一个新框架的时代中,框架的学习成本其实是很高的,因为程序员也不知道哪个框架会成为下一个风口。个人看到的影响有:1. 新老项目技术栈不一样,对团队的技术栈提出了要求;2. 在框架迭代速度快的情况下,团队招人的时候,也比较难找到老框架的适格者。
-
过度工程化
- 框架可能会带来过度设计的问题。那么对于大项目来说如鱼得水的功能,对于小项目来说反而是影响灵活性的负担。
-
更大的代码基线和抽象
- 更大的运行时:声明式编程提高了开发体验,但是最终还是要框架将声明式编程转换成dom的命令式操作,那么框架不可避免的会带来更大的运行时或者更长的编译时间。这个对于小型设备而言可能是一个致命的本质优化问题(见svelte框架,该框架为了提高在小型设备的运行性能,去除了运行时)。
- 容易忽略HTML的语义化,并降低应用的可访问性(图片挂掉了,需要有一个alt提醒这个图片里有啥)。
- 模糊开发应用的优先级。框架可以帮助我们更快的开发出复杂的web应用,同时也掩盖了我们应该关注的其它问题,比如说性能和可访问性。如果我们在开发的过程中没有注意这些事情,日积月累的寒冷将会导致冰冻三尺,到时候再用重构解决,将会付出巨大的代价。
怎么选择框架
- 支持的浏览器
- domain-specific langanges:主要考虑团队的学习成本
- 强大的社区支持
- 良好的文档支持
框架比较的维度
- scope
- 模板
- 编译