开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情
框架的类别
从范式角度看
范式是一种学科之内,在一定程度内具有公认性的一种模式,一种规范。
而从范式角度看,视图层框架通常分为命令式以及声明式。这两种类别分别分别代表不同的范式,而这两种范式各有千秋。
命令式框架
特点
注重过程,在使用框架语法去书写逻辑代码时,是将具体效果的过程一步一步实现的。可以说是将原生的js进行了简单的封装。
比如:大象进冰箱。 该类型的框架与原生的语言一样。实现这个效果都是,先生成大象和冰箱,之后令冰箱打开门,大象走进去,冰箱门关闭。
声明式框架
特点
更注重结果。使用该类框架书写语法时,直接对结果加以描述,具体过程则是由框架封装,代替程序员完成。
所以可能这类框架的实现过程是命令式的,但是用户体验到的则是声明式。
还是大象进冰箱这个例子:该类框架只用声明:大象在冰箱里。框架就会自动的为我们完成大象进冰箱的所有具体过程。内部实现肯定是像命令式框架一样。但是可以说是对用户更友好了。
命令式框架与声明式框架的比较
声明式的最优性能不优于命令式
在代码水平都为最好的情况下,声明式的代码性能肯定不会优于命令式的性能。
因为声明式框架是封装了命令式的代码来实现自身的,所以它自身实现功能时,肯定最少也得走一遍命令式的逻辑。
对于一个框架来说,实现最优的事物更新性能肯定是:先找出更新前后差异,然后花最小的力气去只改变要改变的地方。
而命令式的代码则不需要花费时间去找出更新前后的差异,这部分是由人工完成的,而声明式框架则将这部分交给了框架自身去实现,所以这部分消耗是在所难免的。
假定找差异的消耗为a,改变具体内容的消耗为b。
那命令式消耗便为 b。而声明式的消耗则为 a + b。
a最少也只能是0,在最优性能上高下立判。
不过请注意,由于人们代码思维和风格不同,写出来的代码性能也不同,这样的话命令式的代码消耗其实波动很大,而命令式的由于大部分逻辑以及封装,虽然性能仍受程序员本身影响,但是小了很多。所以由人来写的话,实现一个功能在性能上说不定声明式更高。
声明式的可读性与可维护性优于命令式
声明式代码的可维护性更强,因为命令式的开发往往要完成并维护 目标实现过程中的每一步的代码实现。而声明式仅仅只用描述结果,看上去更简洁,代码量更少,可读性自然更高。
有时候人工维护的开销特别大,尤其是复杂项目中。而牺牲一小部分性能去减少巨大的维护成本无疑是一个正确的决定。
从框架效果来看
一个框架可以分为:纯运行时、纯编译时以及运行时+编译时。
我们将举例说明这些框架的特点。该例子来自于《Vue设计与实现》
Vue自身特点
- 声明式框架:上面已经介绍了,就是注重结果的框架
- js框架:将js进行封装而形成的框架
- 组件化:是以组件为单位实现一个应用的。【若是你用过cocos可能会很好理解。无法理解请先保留疑问。】
- 渐进式:可以部分代码使用Vue语法,也可以全部语法都使用。可以根据自身成长与需求循序渐进地去使用这个框架。
组件化开发
定义
开发一个应用,比如说是页面。我们可以察觉:一个页面上由多个功能板块。而我们进行开发的时候,其实可以将整个页面根据功能进行板块的划分。
那么我们就得到了很多个功能板块。实现的时候也是按功能板块去实现,最后进行组装。
而这样的思想其实就是组件化开发。一个功能板块就是一个组件,每个组件在开发完成后可以进行拼接组装形成一个完整的应用。
组件树
前端在提到组件化开发时,很多时候会提到组件树这个概念。
而组件树就是以开发时的组件作为节点,他们之间的包含关系【组合关系】作为连线依据所形成的树状图。
例如:一个页面有a、b、c、d四个功能模块。b功能模块可以细分为e、f两个模块。
将这些模块都看作一个个组件实现并组装后,所组成的页面的组件树为下图。其中页面整体也应该是一个组件,我们成为根组件,图中表示为root。
好处
那么为什么要以这种方式进行实现呢?
- 逻辑清晰,实现难度小:以组件的形式进行开发,有助于程序员理清思路,整体要实现的功能逻辑减少了,实现难度就小了。
- 可复用,可维护性强:将每个组件的实现单独放在一个文件中,那么多个同种功能的模块就可以直接用一个组件实现,使用时传入不同数据就可像js函数一样达到复用的效果。再者是某个功能模块出了问题或是需要改进时,可以对指定的文件进行修改,直观来说整体代码量少,便于理解,且指向性强不用花大量时间寻找对应功能的代码,修改难度大大降低。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 N 天,点击查看活动详情