迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局
#cnblogs_post_body p{
text-indent:2em; margin-top: 1em;
}
正如一切传说的开端那样,有一远古巨神开天辟地,然后就是其他半神喧宾夺主。我们对最巨贡献与创建力的远古巨神懵懂不知,却对巫师们的话语津津乐道。这同样也是我们前端的现实。
MVVM是来自.NET,另一个遥远的界域。前端,相对于后端,怎么看都是蛮夷之地。JS这个肩负着前端一切交互工作的语言,竟然被视为恶魔,屡屡被屏蔽禁用。些微可用的脚本,变量与函数没有组织地野蛮生长着,直到JAVA的传教士为它带来类与库。
很长一段时间,人们把类看作是福音。明知这是两种不同语言, 正如Christ你怎么念也念不成“基督”,因此真正与类配套使用的接口怎么也推销不出去,更甭论什么设计模式,IOC了。
没有办法,人口太少了,想点技能树,必须要到达某一上限。这经历了Prototype与jQuery这两个阶段,尤其是后者,前端终于有足够人力来研究加载器,MVC,MVP,路由器这些非常炫的东西,MVVM只是这潮流的一部分。
我们合计一下时间,JS前十年(1995-2005)在干什么了,基本上什么也没有,而同期JAVA在诞生后,在大公司的支持下高唱猛进,忙着做自己的标准库。其他出名的语言也差不多这样,标准库基本立即进入里程。而JS刚出生就被山寨(JScript),此外被受到VBScript, ActionScript的威胁。
第二个时期比较很短,2005-2008, 那时世界发生大事了,伟大的DDH大神创建了rails,而作为rails的子项目Prototype.js立马把JS界那些小喽罗吓呆了。占领了80%市场的Prototypejs无论是在语言底层或DOM上都有大量建树,降低了入门门槛。这像盛唐之前的隋朝一样,打下很好的架子。同期,JAVA的Spring打遍天下无敌手。
第三时期,是jQurey引衔的。这个不用多展开,野心膨胀的JSer开始玩其他语言的人玩剩的东西了。模块化,加载器,MVC,各种字眼满天飞。MVC在一两年内跑马灯时换了好几代,先是javascriptMVC,然后是backbone,与.NET进得近的人还知道有个叫knockout的东西,ruby的大神跨界过来搞ember,2013年人们也听到一个叫angular的高富帅框架,其爹是谷歌,于是2014年就基本是它的新闻了。就像jQuery初期,我们知道有mootools这样有力的竞争对手,现在都不知哪里去。
这是一个新旧交替的时期,代表DOM操作的极致的jQuery与想隐藏DOM操作的MVVM框架发生冲突了。不禁让我想起了《土耳其开局》的影评——
那是一场发生在葵地里的战争,华丽得让人目眩:漫无边际的一片金黄色的向日葵,身着土黄色的俄军士兵,头戴红帽身着蓝色军服的土军士兵,双方在向日葵里时隐时现,相互追杀,枪炮的硝烟遮蔽了湛蓝的天空。
那也是一场古典的战争,发生在两个没落强国之间的战争,都有着华丽的外表。因为他们都身处欧洲的边缘,已有了华丽的军服,先进的枪炮;两个欧洲曾经的霸主,现在已是强弩之末,战争只能靠人来堆积,所以是用现代的武器所打的冷兵器之战。
双方在巴尔干及黑海之间,你来我往,打得还颇热闹。一共打了二百多年,一直打到第一次世界大战,两国之间的战争大的就有十一次之多,影片中所描写的战争大约应该是第十次俄土之战了。至此以后,强大的奥斯曼帝国走向衰亡,取得胜利的沙皇俄国在一战之中也迅即倒塌。
……
时下的jQuery可以看作是土耳其的化身,它是可以自豪,如同土耳其以它那口径则高达30英寸(约合762mm)的乌尔班巨炮征服君士坦丁堡一样,振聋发聩。
angular是沙俄,财大气粗,暴兵极快, 比虫族更加虫族。
但DOM操作终归要退居幕后,无论你做得多好多精,而jQuery也像进化到尽头,最后在github上没什么大动作了。
而angular虽然如日中天,但它最大的要害始终没有解决——上手难。在浮燥的前端界,JSer的忠诚度是极其低。可能昨天鼓吹backbone的那帮人,今天就是angular的免费水军。
时局难料,纷战不已,这样一个时代有着无尽的可能性。未来的王者可能在这边角上虎视眈眈。
它继承了远古巨神的衣钵,虽然不像其他半神那样恬噪,但也会发出自己的声音。那是远离尘世的乐土,avalon。它在悄悄积聚着自己的力量。
迷你MVVM框架 avalonjs 沉思录 第1节 土耳其开局的更多相关文章
- 迷你MVVM框架 avalonjs 沉思录 第3节 动态模板
模板的发明是编程史上的一大里程碑,让我们摆脱了烦锁且易出错的字符串拼接,维护性大大提高. 都在JSP,ASP时代,人们已经学会使用include等语句,将多个页面片断拼接成一个页面. 此外,为了将数据 ...
- 迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题
jQuery之所以击败Prototype.js,是因为它自一开始就了解这三大问题,并提出完善的解决方案. 第一个问题,DOM什么时候可用.JS不像C那样有一个main函数,里面的逻辑不分主次.但JS是 ...
- 迷你MVVM框架 avalonjs 0.95发布
迷你MVVM框架 avalonjs 0.95发布 本版本最主要的改进是ms-with 深层绑定的实现,至少,avalon1.0所有重要的feature已经开发完毕,之后就是小补小漏,性能优化了. ms ...
- 迷你MVVM框架 avalonjs 0.85发布
迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...
- 迷你MVVM框架 avalonjs 0.82发布
迷你MVVM框架 avalonjs 0.82发布 本版本最大的改进是启用全新的parser. parser是用于干什么的?在视图中,我们通过绑定属性实现双向绑定,比如ms-text="fir ...
- 迷你MVVM框架 avalonjs 1.3.9发布
本次升级,avalon改进了许多内部方法,大大提升性能,并且带来异步刷新视图的新功能. ms-html内部不再使用异步 head元素中的avalon元素加入ms-skip指令 重构计算属性,现在超级轻 ...
- 迷你MVVM框架 avalonjs 1.3.8发布
avalon1.3.8主要是在ms-repeat. ms-each. ms-with等循环绑定上做重大性能优化,其次是对一些绑定了事件的指令添加了roolback,让其CG回收更顺畅. 重构ms-re ...
- 迷你MVVM框架 avalonjs 1.3.7发布
又到每个月的15号了,现在avalon已经固定在每个月的15号发布新版本.这次发布又带来许多新特性,让大家写码更加轻松,借助于"操作数据即操作DOM"的核心理念与双向绑定机制,现在 ...
- 迷你MVVM框架 avalonjs 1.3.6发布
本版本是一次重要的升级,考虑要介绍许多东西,也有许多东西对大家有用,也发到首页上来了. 本来是没有1.36的,先把基于静态收集依赖的1.4设计出来后,发现改动太多,为了平缓升级起见,才减少了一部分新特 ...
随机推荐
- js中字符串处理成数字的方法
<script> var a="11.1111"; var b="12.2222"; //第一种方法:乘以1的方法 //alert(a*1+b*1) ...
- cx_oracle 安装和配置
前提条件: 已经成功安装python 已经成功安装oracle客户端 1.去官网上下载对应版本的cx_oracle http://cx-oracle.sourceforge.net/ 注意版本必须与p ...
- 201621123006 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 2 ...
- [leetcode] 204. Count Primes 统计小于非负整数n的素数的个数
题目大意 https://leetcode.com/problems/count-primes/description/ 204. Count Primes Count the number of p ...
- ios 加密解密工具类字符判断等
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface Helpers : NSObject ...
- windows 下键盘映射
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout下添加二进制键 Scancode Map完后注销后即可生效
- BZOJ2121: 字符串游戏(DP)(字符串删单词,求最多可以删去多少)
2121: 字符串游戏 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 672 Solved: 376[Submit][Status][Discuss ...
- Spring Boot 的项目打包成的 JAR 包,制作成 docker 镜像并运行
上一篇:Docker学习(三)docker容器操作 首先把本地的项目打包好,我这里直接把已经打包好的springboot-mybatis-0.0.1-SNAPSHOT.jar包直接上传到linuxmy ...
- 20155318 2016-2017-2 《Java程序设计》第八学习总结
20155318 2016-2017-2 <Java程序设计>第八学习总结 教材学习内容总结 学习目标 了解NIO 会使用Channel.Buffer与NIO2 会使用日志API.国际化 ...
- 【.NET】AutoMapper学习记录
在两个不同的类型对象之间传输数据,通常我们会用DTOs(数据传输对象),AutoMapper就是将一个对象自动转换为另一个对象的技术 背景 一些orm框架,在用到Entity的时候有一些开源代码用到了 ...