#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. CF86D

    题解: 莫队分块 分块大小为sqrt(n) 代码: #include<bits/stdc++.h> using namespace std; ; typedef long long ll; ...

  2. Big Table中文翻译

    题记:google 的成功除了一个个出色的创意外,还因为有 Jeff Dean 这样的软件架构天才. 官方的 Google Reader blog 中有对BigTable 的解释.这是Google 内 ...

  3. CS231n课程笔记翻译4:最优化笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Optimization Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,堃堃和李艺颖进行校对修改.译文含公式 ...

  4. PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改

    最近在跑下面这么一个代码,怎么跑都无法连通服务器,如下: # -*- coding: utf-8 -*- ''' [简介] PyQt5中 处理database 例子 ''' import sys fr ...

  5. vim没有权限却可以强制保存时所引起的思考 ------ 文件夹权限对所属文件的权限影响

    最近在拿着Linux 鸟叔私房菜对着Linux 系统学习一下基本操作,虽然已经使用Linux系统已经好多年不过却一直没有系统的学习一下.在用vim 编辑一个文件的时候出现了一个很神奇的事情,明明该文件 ...

  6. 利用xpath来解析douban电影相对应的信息

    from lxml import etree import requests url = "https://movie.douban.com/chart" headers = {& ...

  7. 在Linux中批量修改字符串的命令

    昨天一个朋友忽然问我,在Linux下如何批量修改字符串,当时瞬间懵逼了,完全想不起来....... 今天特意的重温了一下Linux下的一些常用命令,并将这个遗忘的批量修改字符串的命令记录下来(资料来自 ...

  8. python 生成器 迭代器 yiled

    文章来源:http://python.jobbole.com/81911/ https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449 ...

  9. [UOJ213][UNR #1]争夺圣杯

    uoj description 一个长为\(n\)的序列,给定一个参数\(m\),求所有长度为\(m\)的区间的最大值之和. 对于所有的\(m\in[1,n]\)你都需要分别求出答案然后异或起来. \ ...

  10. 深入理解java虚拟机,类加载

    1,通过使用静态字段,只有真正定义这个字段的类才会被初始化,(子类不初始化,父类初始化 2,new数组,不初始化 3,通过类来调用一些类的常量,可以不初始化类,(常量在编译期,被优化到NotIniti ...