`
hax
  • 浏览: 962809 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于国内前端和JS技术发展的乱想

阅读更多
玉伯在我的一条微博后面写了一些(和主题不是很相关但)非常值得思考的评论。而这些评论的源头来自于我非常尊敬的不在你们前端界混的JS大师愚公(爱民)。


摘录如下:
玉伯也叫射雕 写道

想起愚公的一番言论:我们做了一个不错的东西,有很多好的 IDEA。最终这些东西却消散了,变成了另外一些更大更好的东西的局部。我们的努力白费了。我们的成果湮没了。我们——我指的是国内的软件开发的现状——什么“好”的东西也做不出来。
其根本的原因并不是我们技术不行,开发能力不好,或者投入不够多。老老实实地讲,这些我们都不会承认。我以前就一直说:我们离最先进的技术的差距只有半年。我们并不差多少,在一个问题上努力耕耘半年,我们就会变成顶尖的好手。但是,接下来我们仍然会白费、湮没,以至于消失得无影无踪。
kissy 也好,qwrap 也好,jet 也好,都面临这样一个问题。


我想补充几点。

至少在前端技术和JS语言上,我不认为我们的前端精英(比总是比最好的那一群)离最先进的技术有什么差距,半年也没有。甚至我们有许多东西是领跑世界的。

比如最早的鼻祖级人物wch的JSVM,在JS包和命名空间管理、JS代码编译、单页应用框架方面,绝对是世界领先。最近这三方面的发展都非常活跃,但至少在上个世纪,wch就已经涉及了三方面的工作!

再如,在RequireJS风行之前,金大为做的JSI就已经达到了几乎所有RequireJS的功能。我认为至今也未见任何module管理方案对它有实质性的功能超越。

还有,像传说中的月影mm在JS的函数式编程方面有大量创造性的研究,尖端程度肯定不输给underscore。

又如,在UI组件方面,有非常多,一段时间里几乎所有大一点的团队都会自己做一套,虽然质量参差不齐,但敢说其中没有能与当时的ExtJS比肩的?

还有,著名的51js社区,在上面有大量非常有创意和技术的脚本和产品。

还有不得不提的小盆友infinte(现在叫belleveinvis),他两次在D2上展示了他做的编译器和语言设计方面的尝试,我认为在这个方面,技术上已经不存在任何距离(当然有其他问题,下面再说)。



那么问题出在哪里?为什么这么多好东西都湮没了?


玉伯提到的是企业和团队存在问题。我相信这是很重要的方面,但是我认为这不是核心问题。


我大略分析几个案例:

JSVM的问题是,他太庞杂了,并且错误选择了java风格,其名字也有误导,后来再做调整也无济于事了。但最最关键的是,当时还是前ajax时代。JSVM生不逢时。

金大为的JSI的问题也部分是,有一定的超前度,代码模块管理的优点和必要性在几年前还没有在国内得到普遍认知。另外老金太低调,宣传太不够(偶倒是到处提到,不过没有原创者来推广总是不够)。老金要成,必须走出去,把自己做成标准才行,可惜的是这个时间已经错过了。

这就提到一个问题,酒香也怕巷子深。我们许多人只会关起门来写代码,出来交流得太少。这有一个原因是国内的前端技术交流会议太少,且只集中在北京和杭州。这个问题现在稍有改善,但各种会议交流还是不够丰富和多样化。这方面w3ctech做了一些努力,希望能有改善。


但最主要的问题,我觉得是,我们有非常出色的顶尖牛人,水平是世界级的,但是社区是与世界是脱节的。

这个一个是语言因素。本人也深受其累。无他,唯尝试耳。写出文档文法词法狗屁不通,管他呢,先弄出去,态度要好,将来找英语好的同志(或者直接老外)帮忙就是了。

另一个是心态问题,就是不够开放,不够主动。你要主动参与到世界性社区里。因为语言和技术是没有国界的。


同样是是模块、包管理、loader之类的,为什么SeaJS现在势头就不错?【最近几个明显无法通过面试的小朋友也都知道seajs了】


几个原因:

1. 整个国内社区对这块的认识上来了

2. 玉伯同志在社区的号召力比较强,并主动出来介绍

3. 玉伯的文档不错,国际化程度高

4. SeaJS的质量好

注意这个质量好,并不是指代码实现质量高(当然seajs可能实现质量确实也不错),而是我们最缺的一块,就是API接口的质量高。

这个从哪里来呢?我们就注意到了,SeaJS是站在社区规范上的,即CommonJS规范,且API基本照抄FlyJS,站在巨人的肩膀上了。


这是非常大的进步。


我们最大的缺点是老是敝帚自珍。这本身其实也没错,重造轮子也ok。但你必须吸收前人的好东西。特别是接口上,规范上。这个是关键的关键。这也是SeaJS胜过当年JSI的最大优点。


5. 专注

我可以断言,现在在大的框架上要出头已经没有前景(这也是qwrap要面临的问题),jQuery是事实标准,YUI/MooTools/Dojo/ExtJS等瓜分了剩下的地盘,昔年的Prototype/MochiKit已经日落西山,任何一个新的大而全的框架(走出企业团队以外)已经没有任何机会【除非有突破性的地方,像当前selector改变书写方式那样,这个几乎不可能再有】。除非在专门领域如移动开发方面,才有一点点空间(但也马上将被前述大框架瓜分完毕——毕竟这是应有之义,移动web开发仍然是web开发,应该被统一起来)。

但是现在前端和JS方面确是前所未有的欣欣向荣,大量专注解决单一方面问题的库涌现出来,可以到microjs上去看一看,就会发现了。

实际上,在module方面的推进是非常重要的,目前基本上已经被统一到几个方向(也就是事实标准),即CommonJS 1.0规范(如nodejs),AMD等。

当module体系能稳定下来后,整个系统的生态将一下子被激活。NodeJS社区的蓬勃发展,与此不无关联。

可以预见,这个趋势会越来越明显。


因此,我可以说,只要我们顺应这个潮流,做到:
1. 心态开放
2. 融入社区
3. 国际化
4. 专注

做出好东西并能持续成功的可能性将会很高。



另外,心态方面,还有一点,其实不必考虑所有的东西都要有巨大市场,那样太功利,太功利往往反而束缚了自己。

比如 老赵jscex / 小盆友的编译器 / qobean 等,由于种种原因注定是小众,并且注定是过渡性产物【具体不赘述,有机会再阐述】,即研究和尝试性质更大。不是说不能产品化实用化,但是不要包过高的期望。将来有新东西超越、吸收、融合你的东西几乎是必然的,也应该是乐见此事。比如jscex的async语义已经在ES harmony的proposol里,这是一件很好的事情,虽然这也宣布了jscex的寿命最长就活到harmony定案。小盆友的编译器也是,coffeescript非常火——已经前有珠玉,怎么能做到更好?几乎是不可能的,只有做好自我定位,专注在某个方向上,或者干脆就是研究性质的,说不定未来就能结出果实。



再补充一个重要的问题。

如果要产品化,特别是通用化,我认为考虑标准是及其重要的。这个标准,不仅是指现在已经有的纸面标准,而是要考虑标准的方向。

比方说过去大量的js库都是建立在一个小的方法集上的。但是新的库就应该注重base在ES5标准上。因为这是方向。不仅是纸面标准,而且也一定会是事实标准。在JS生存10年之后,我们必须认清楚,现在是一个跨越,就是开发者的baseline即将或已经提升到了ES5(比如nodejs上的开发社区),而不是之前残疾的ES3。

社区精英们,应该集中力量到如何在ES5基础上构建自己的库,而不要再浪费时间在那些无谓兼容性上。因为开发者即将以ES5为baseline,你再提供某些和es5重复的部分是没有意义的。所有那些用到元编程或OO或类似方向尝试的,都应该考虑如何建立在ES5的语义基础上,若能考虑到harmony的方向,甚至参与进去就更好了。

Traits.js就是这样一个例子。作为又一种OO增强,问题不在于traits如何比其他mixins方案好,甚至traits这个模式本身就有其他的js实现,关键在于Traits.js很好的match了ES5,也就是,它是ES3/5的语义增强,而不是自创体系。经过ES4的分歧之后,从ES3到ES5到Harmony,认识逐渐统一到尽量是充分利用到已有设施,并增强之,而不是单纯添加特性。库开发者也应有这个认识。


当然ES5这个baseline,是需要建立的,这就需要有库能把legacy浏览器弥补好。现在这个方向做的最好的是es5-shim。但是说实话,它真的还不够好。这块是有机会的,如果国内js高手们能联合起来,专注于这一个方向上做出世界级的库,绝不是天方夜谭。


另外一个我认为非常广阔的领域是dom。是的,始终是。

尽管我之前说过了,大框架没有机会。但是注意到一点,jQuery等仍然是建立在前ES5前HTML5时代的。因此那些库其实都干了大量重复的事情。真正有益的是把这些事情做一次,做好它,怎么做好?不是发明各种自己的api,而是大家努力按照html5的规范,去尽量实现一套一致的符合html5语义的底层dom api。

然后大家自由在这个api上去发展自己的各种特色库,且这些特色库可以只解决他们该解决的问题(封装高级功能,解决易用性问题等),并且所有这些库可以很好的协作融合——而这需要三点配合:编程语言模块机制、编程语言的基础API、dom基础API。

seajs是第一点(但还有提升余地),es5-shim是第二点(做得还不够好,空间大大),第三点也已有大量尝试(未开垦领域太多了)。


我个人认为qwrap的思路与我讲的所有理念是match的。但是似乎没有那么明确。只是说解决一个API风格问题是不够的,大家其实不太关心这个。包括高级的函数式编程会吓走一些人。类似traits的构建方式其实更友好。另外如我之前所说,qwrap的baseline还是旧的模式。

一个可比的例子是qobean,它只用js的一个子集构建系统,但是那是一个元编程的实验性项目,所以无所谓。qwrap也只从一个基本的函数式变换构建出来,这值得骄傲,但是仅此并不提供生产力价值。


开发者其实并不会纠结于你的Array上的map/reduce等方法是静态方法变换而来。【也许会关心是否能将这些方法变换到dom collection上】,可裁剪、定制、转换……都只在baseline以上才有意义。

所以我个人提供一个思路,供jk、月影等qwrap的同志参考:

可将qwrap拆分成几个项目(代码上估计已经拆分了,但建议在项目体系上拆分):

0. JS module system
何种形式暂未想好。我个人对seajs不是最满意,qwrap下的未仔细研究。

1. 补齐es5 baseline的库
这一部分用何种机制实现并不重要,我个人倾向于避免依赖过于复杂的函数变换。这一部分的目标并非好看,或者实现精巧,这一部分的最关键的目标是实现一个好的baseline:
A. 正确性,最大限度符合es5标准
B. 高效

2. 核心的函数变换是独立的库,不必跟浏览器挂钩,到处可用。整成像underscore那样,说不定在nodejs上就火了!

3. JS语言增强库。长什么样无所谓。其实这块最好就是百花齐放的。所以qwrap现在做的库只是其中一个选择而已。这里在0和2的帮助下,应该尽量做成可独立使用的小模块。之间的依赖性越小越好(也就是只依赖0,1,2,互相间无依赖)。

以上是JS,下面是DOM

4. 补齐 html5 DOM baseline的库
以html5规范和语义为准。时刻记得避免夹带私货。此库的最高境界是只作为给浏览器打patch用,也就是一个patch框架加patch实现。此方面技术实现难度和方式都有待研究。不一定是光用函数变换或者traits之类的能解决的,有大量的坑。依赖何种JS库不重要。

5. 基于4的包装库。实际上等价于基于html5开发一个库。此方面大家萝卜青菜各有所爱无所谓了。


所以,qwrap这一整个大框架,其实我觉得拆得四分五裂,每一个都叫不同的名字,可以分别发展团队,才是最有前途的。哈哈哈。


以上这些就是最近一段时间来想法的大致总结,由玉伯引用爱民的评论开始,后面就逐渐离题了,不过无所谓了,能引起大家的思考就好了。




47
20
分享到:
评论
2 楼 lifesinger 2011-07-19  
看完了,除了赞同,还是赞同。hax 多讲下对 seajs 的建设性意见。es5-shim 这一块,和我的想法很相近。我的想法是,seajs 提供一个 conditional load plugin,当探测到当前浏览器缺少哪些 es5 的东东时,自动修复好。这样,所有模块都可以直接基于 es5 来开发,而且对开发者是透明的。

更进一步,还可以提供 less 和 coffeescript 等编译扩展,使得基于 seajs 做开发时,可以直接用 less 写 css,用 coffee 语法写 js. 这样可以提前实现将 javascript 变成编译目标语言的愿景,使得 js 的开发直接可利用上最新技术。

基于模块环境+模块的方式来构建类库,最难的是模块环境要具有通用性,目前commonjs和nodejs的努力,使模块环境逐步成熟。其次就是各种模块的筛选和开发了,我早就想拆掉 kissy,只恨目前力又不逮。如果 qwrap 能拆分成多个小类库,绝对支持。拆分的好处,可能会造成少量重复,但好处是更灵活,更自由了。因为小了,意味着可替换性更好,这样,有现成做得不错的,直接拿来用就好。如果找不到满意的,大不了自己开发一个,满足自己的需求同时也能贡献给社区。这是一种良性竞争下的百花齐放。

这样,逐步努力下去,就会形成一个生态圈。生态圈呀,一旦形成,所有人都会受益。希望我不是在作梦
1 楼 aeoluszzf 2011-07-19  
认同,接口的价值一直被埋没

相关推荐

    初中语文文摘文苑你永远都不会知道会为你乱想的人有多么

    虽然给定的文件标题和描述似乎与IT行业无关,但我们可以从中提取出一些普遍适用的人生智慧和情感交流的技巧,这些都是在人际交往中非常重要的知识点。 1. **情感表达**:在第一段故事中,我们看到即使在面对生死...

    医疗乱象专项整治行动方案.pdf

    医疗乱象专项整治行动方案.pdf

    专题讲座2021-2022年浅谈小学科学课教学中几个需要注意的问题.doc

    通过整理和筛选问题,可以确保探究活动的有效性和深度,如案例中关于潜水艇沉浮的问题,尽管学生提出了多个问题,但它们本质上是相似的,教师应引导学生识别并聚焦于核心问题。 7. **学生科学素养的培养**:小学...

    我会给你幸福精选.doc

    【资料】: "我会给你幸福精选.doc" 是一篇包含了情感表达和打动人心的话语集合,主要分为两个部分:经典语句和打动女生的话。这些话语充满了哲理和感情色彩,展现了人生的各种情感体验以及与人交往中的微妙情绪。 ...

    项目管理师试题分类精解

    作为学习和考试的资料,本书无疑会详细介绍项目管理的理论、方法、工具、技术、案例分析和问题解决策略。 由于提供的【部分内容】主要重复了“糊思乱想计算机资料专营店收集整理”以及一个网址,这部分信息对知识...

    浅谈小学科学教学论文.docx

    然而,教师在鼓励学生提问时,应同时引导他们对问题进行分类和筛选,以提高问题的质量,避免无目标的“乱想”和“瞎问”。 2. 手脑结合的互动活动:科学课堂强调实践操作,但不应过度强调动手而忽略动脑。教师应...

    Weibo Karma-crx插件

    由于只是纯前端JavaScript实现,因此难免不准确。Karma = (转发*10 + 评论*5) / sqrt(粉丝数)这个公式是我乱想的,纯娱乐,如果有更好的请不吝赐教 @awguo特点、缺点:1、简单环保,装了就用,不作任何微博的AP

    肉麻七夕情书.doc

    例如,傻瓜自从和你在一起以后我会变得很傻、总会乱想、会往好也会往坏的想!发现认识你很幸福、有飘飘然的感觉!这些都是我们可以在情书中表达的内容。 此外,我们也需要掌握如何真正掌握追女生的技巧。约会核心...

    leovan.me:个人网站

    现数据科学,深度学习,强化学习,自然语言处理,复杂网络,知识图谱,因果推断和逻辑推理等领域的产品和技术。好 (多为闲书),善 (没事乱想),学了多年绘画,虽不再执笔,但对美仍有追求。对生活拥有无限的向往,爱...

    dex2jar最新版

    不过需要注意的是,由于Android的优化和混淆技术,反编译出的代码可能并不直观,甚至难以理解。 dex2jar还支持与dex2class、dex-tools等其他工具配合使用,实现更复杂的操作,如单独处理特定类或方法,或者进行更...

    算法概论及算法导论合订版

    《算法概论》和《算法导论》是两本在计算机科学领域中具有极高影响力的教材,对于学习和理解算法有着重要的指导作用。这两本书分别针对不同程度的读者,提供了丰富的算法知识和实践指导。 《算法概论》是为初学者...

    上拉加载下拉刷新的RecycleView

    支持瀑布流,单列表,网格,使用见我博客

    自动横向循环滑动图片控件

    自己实现的可以循环自动滑动的控件,使用方法见博客

    学校的信息,json数据

    就是涵盖了大部分学校的信息(名称,位置)的json数据

Global site tag (gtag.js) - Google Analytics