#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节 土耳其开局的更多相关文章

  1. 迷你MVVM框架 avalonjs 沉思录 第3节 动态模板

    模板的发明是编程史上的一大里程碑,让我们摆脱了烦锁且易出错的字符串拼接,维护性大大提高. 都在JSP,ASP时代,人们已经学会使用include等语句,将多个页面片断拼接成一个页面. 此外,为了将数据 ...

  2. 迷你MVVM框架 avalonjs 沉思录 第2节 DOM操作的三大问题

    jQuery之所以击败Prototype.js,是因为它自一开始就了解这三大问题,并提出完善的解决方案. 第一个问题,DOM什么时候可用.JS不像C那样有一个main函数,里面的逻辑不分主次.但JS是 ...

  3. 迷你MVVM框架 avalonjs 0.95发布

    迷你MVVM框架 avalonjs 0.95发布 本版本最主要的改进是ms-with 深层绑定的实现,至少,avalon1.0所有重要的feature已经开发完毕,之后就是小补小漏,性能优化了. ms ...

  4. 迷你MVVM框架 avalonjs 0.85发布

    迷你MVVM框架 avalonjs 0.85发布 本版本对循环绑定做了巨大改进,感谢@soom, @limodou, @ztz, @Gaubee 提供的大量测试文件. fix scanNodes, 在 ...

  5. 迷你MVVM框架 avalonjs 0.82发布

    迷你MVVM框架 avalonjs 0.82发布 本版本最大的改进是启用全新的parser. parser是用于干什么的?在视图中,我们通过绑定属性实现双向绑定,比如ms-text="fir ...

  6. 迷你MVVM框架 avalonjs 1.3.9发布

    本次升级,avalon改进了许多内部方法,大大提升性能,并且带来异步刷新视图的新功能. ms-html内部不再使用异步 head元素中的avalon元素加入ms-skip指令 重构计算属性,现在超级轻 ...

  7. 迷你MVVM框架 avalonjs 1.3.8发布

    avalon1.3.8主要是在ms-repeat. ms-each. ms-with等循环绑定上做重大性能优化,其次是对一些绑定了事件的指令添加了roolback,让其CG回收更顺畅. 重构ms-re ...

  8. 迷你MVVM框架 avalonjs 1.3.7发布

    又到每个月的15号了,现在avalon已经固定在每个月的15号发布新版本.这次发布又带来许多新特性,让大家写码更加轻松,借助于"操作数据即操作DOM"的核心理念与双向绑定机制,现在 ...

  9. 迷你MVVM框架 avalonjs 1.3.6发布

    本版本是一次重要的升级,考虑要介绍许多东西,也有许多东西对大家有用,也发到首页上来了. 本来是没有1.36的,先把基于静态收集依赖的1.4设计出来后,发现改动太多,为了平缓升级起见,才减少了一部分新特 ...

随机推荐

  1. 关于将vector以及string传递给较老的api的问题

    现在可能STL使用的越来越多,但是一些较老的api并不支持例如vector这样的兑现,但是可以使用一些技巧来使其适应于这些函数. 例如对于使用到int*型的函数来说,传入一个 &vector[ ...

  2. 【LeetCode 38_字符串_算术运算】Count and Say

    string countAndSay(int n) { string res; ) return res; res = "; ) { int len = res.size(); int i, ...

  3. 201621123006 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 List中指定元素的删除(题集题目) 1.1 实验总结.并回答:列举至少2种 ...

  4. 手动整合实现SSH项目开发02

    在bean包下建立User类和User.hbm.xml文件,实现User类和数据库表User的映射关系,具体User类不多说,User.hbm.xml如下: <?xml version=&quo ...

  5. python3.5 安装 numpy1.14.4

    AMD64 import pip._internal print(pip._internal.pep425tags.get_supported()) WIN32 import pip print(pi ...

  6. swagger api 转graphql npm 包试用

    graphql 比较方便的进行api 的查询,操作,swagger 是一个方便的open api 描述标准,当前我们有比较多的 restapi 但是转换为graphql 是有成本的,还好swagger ...

  7. SimpleDateFormat 和 LocalDate、LocalTime 以及时间大小比较简单示例

    package mytest; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time ...

  8. 黄聪:VS2010中如何让webbrowser不弹出JS异常错误窗口(c#.net)

    1.在属性窗口找到ScriptErrorsSuppressed,选择"true",这个选择的意思是,如果网页上有出现错误命令,这个错误提示将被抑制 2.[项目管理那里,在项目上右击 ...

  9. 基于C#的微信公众平台开发系列1

    1.首先服务器地址及Token验证: Token验证请求地址wx.ashx代码: using System; using System.Web; public class wx : IHttpHand ...

  10. Spring容器初始化数据(数据库)BeanPostProcessor的应用

    1.目的:在Spring启动的时候加载在数据库保存的配置信息,一方面杜绝随意修改,一方面方便管理 2.BeanPostProcessor是Spring提供的一个方法通过implements方式实现 会 ...