Hello World
Spiga

标签:JavaScript

专访Jscex作者老赵(上):缘由、思路及发展

2012-07-28 22:01 by 老赵, 5462 visits
摘要:Jscex是很有特点的一个JavaScript异步编程类库,最近作者不但发布了其眼中的里程碑版(v0.6.5),还在“我们的开源项目”系列活动和阿里技术嘉年华上连续露脸,获得广泛关注。InfoQ专诚对Jscex的作者老赵做了正式的书面采访。在采访的上篇,老赵着重阐述对于Jscex类库设计的思考和心得。注:本文首发于InfoQ,出于阅读体验等方面考虑,现在重新发于博客。 阅读全文

使用Node.js编写Shell脚本,暨Jscex 0.6.5版本发布

2012-06-19 00:12 by 老赵, 5778 visits
摘要:昨天不得不花时间做了点保护博客阅读体验的事情,但其实这篇才是我真正想写的。上个星期在香港出差,晚上的活动大都是喝酒,回到酒店便借着些许酒劲改进Jscex。如今虽然Jscex的开发工作并没有详细的时间计划,但我正在使用GitHub的Issues页面记录需要制作的任务点,因此每天都是朝着目标逐步前进的。按照计划,Jscex的0.6.5的主要目标是对Jscex的模块机制进行改进,统一辅助方法,并使用Node.js重新编写发布脚本。这些工作的目的都是为接下来的0.7.0版本作准备,它将会是Jscex在项目功能与质量,以及专业性上有重大突破的版本。 阅读全文

HTML Metro开发里的数据绑定(1):WinJS.Binding.List

2012-05-01 22:53 by 老赵, 3519 visits
摘要:前段时间接触了一些WPF开发方面内容,了解如何使用MVVM模式将界面与模型几乎彻底分离开来,只通过其强大的绑定功能连接两者,让人叹为观止。Win8的Metro开发支持使用XAML(配合C#,C++等语言)或是HTML(配合JavaScript),前者的控件和数据的绑定已经相当完备,而后者一直没有一个标准的模型。之前我也简单了解过如Knockout这样的绑定支持与MVVM模式实现,理论上说也完全可以在Metro开发里使用,但其实Metro开发本身也已经提供了一些内置的绑定支持,基本对应于XAML/C#开发里涉及到的ObservableCollection与INotifyPropertyChanged。 阅读全文

JavaScript:假如default不是switch的最后一项

2011-05-24 11:33 by 老赵, 7806 visits
摘要:话说大家对于switch语句应该再熟悉不过了,各种类C语言都不例外,JavaScript自然也是如此。switch的逻辑很简单,根据switch内容的值执行对应的case项,否则执行default项即可。但是不同的语言在具体一些细节上面的处理却是不同的。例如在JavaScript里,每个case项都可以没有break,于是语句便会顺延到下个case或是default里面去——但某些语言设计者认为这种特性容易造成代码理解上的偏差,因此比如在C#里便要求每个非空的case都要有个break。那么再来一个细节问题:如果default之后还有case,那么会出现什么样的情况?如果default里没有break呢? 阅读全文

Jscex使用BSD授权协议正式发布

2011-04-22 00:15 by 老赵, 3115 visits
摘要:这次打算把Jscex好好搞一下了,其实很少会有技术方面的障碍能“轮到”我们去突破,但我觉得Jscex的确有机会,HTML 5、Node.js各个都是红火的玩意儿。前几天我花了两个晚上用半生不熟的中式英语写了一篇自认为比较完整的说明文字放到了Github上的项目首页上,没想到几个小时后便收到了StratifiedJS(一个与Jscex目标有些类似的项目)作者的邮件,提到了一些关于StratifiedJS的事情。我向他咨询了StratifiedJS的某些细节问题,也向他简单介绍了Jscex的实现原理。如今Jscex已经使用BSD授权协议正式发布(中文站也会在近期推出),再进行一些细节上的优化便要开始作推广了。 阅读全文

Jscex项目现状:UglifyJS解析器及AOT编译器

2011-04-15 02:04 by 老赵, 3929 visits
摘要:Jscex项目是我为了简化JavaScript异步的一个类库,支持任意JavaScript(ECMASCript 3)引擎。Jscex小巧而强大,可以极大地改善前端的AJAX及动画等场景的编程体验,同样也可以用在node.js进行服务器开发。从产生Jscex的想法到现在也有几个月的时间了,也一直想设法进行推广。在思考过程也发现了它在实际生产中可能会遇到的问题,于是前两个星期的主要工作,便是针对这些问题进行优化。首先我将Jscex的JavaScript分析器从Narcissus换成了UglifyJS,并基于node.js开发了一个简单的AOT编译器。接下来我也打算写个稍微详细一点的介绍,然后在国外社区看看反响如何。 阅读全文

通过定义常量控制Closure Compiler的行为

2011-04-11 01:12 by 老赵, 2797 visits
摘要:上一篇文章里我提到,在进行Closure Compiler压缩之前可以对代码进行一些预处理,这样可以得到更好的效果。在回复中有朋友提到可以使用一些Annotation(标记),例如加上@export,然后使用--generate_export,便可以保留需要的那些变量名。不过经过实验还是没有得到预期的效果,所以使用标记来“指导”高级压缩行为依旧是一个不太可行的做法。不过有个标记与我的设想一直,那就是使用@define来“定义一个常量”,然后在编译(压缩)时对其进行覆盖。这为一些压缩需求提供一种更直接的控制方式。 阅读全文

使用Google Closure Compiler全力压缩代码

2011-04-07 09:30 by 老赵, 17923 visits
摘要:JavaScript压缩代码的重要性不言而喻,如今的压缩工具也有不少,例如YUI Compressor,Google Closure Compiler,以及现在比较红火的UglifyJS。UglifyJS的出名是由于它代替Closure Compiler成为jQuery项目的压缩工具。根据我的实测,jQuery Core的代码使用UglifyJS压缩后(节省62.5%)的确要比Closure Compiler压缩后(节省57.53%)更小一些。很显然,这是因为UglifyJS的压缩策略比Closure Compiler更“聪明”一些。我这里用了“聪明”而不是“激进”,是因为“激进”带上了一丝负面的意味——就好比Closure Compiler的“高级”优化方式。之前与UglifyJS相比的是Closure Compiler的“简单”优化方式,它们都是“安全”的,而Closure Compiler的“高级”优化几乎100%会破坏您的代码,因此它提出了各种“激进”的手段去“破坏”您的代码,以此达到压缩的目的。这种手段是把双刃剑,如果您能掌控它的压缩规则,则代码便可以压缩至极小。 阅读全文

UglifyJS有个不错的JavaScript解析器

2011-04-01 15:40 by 老赵, 8516 visits
摘要:我一直在为Jscex寻找好用的JavaScript解析器,之前我用的是Narcissus,也写过相关文章。不过可惜的是,Narcissus使用了SpiderMonkey的扩展,因此它并不是用ECMAScript 3实现的,无法在IE 8等浏览器中使用。目前Jscex使用的是NarrativeJS中旧版的Narcissus,但是我并不喜欢它输出的AST结构,使用中也发现高级功能里的一些bug,有些食之无味弃之可惜的感觉,而改写新版Narcissus又必须大动干戈。最近我接触到了UglifyJS,发现它的解析器相当不错,性能也比Narcissus高出许多,在此介绍给大家。 阅读全文

基于Jscex.Async的JavaScript动画/游戏

2010-12-16 01:03 by 老赵, 4473 visits
摘要:首先和大家宣布一个消息,Jscex的代码已经提交至Github上了,感兴趣的朋友下载来Dog Fooding一把,并欢迎提出反馈意见。Jscex受到F#计算表达式的启发,是一个面向JavaScript语言的monadic扩展,最常见的用途便是编写异步程序,尤其是逻辑复杂的异步程序。不过除此之外,使用这套异步库来编写动画或是游戏也是十分容易的事情。例如,一个人物的走动或是爆炸效果,其实可以视为一个贴图随时间不断变化的过程。这个变化的过程是异步的,但是有了Jscex.Async,我们只需使用最直接的同步形式编写代码就行了。 阅读全文

演出季上“异步编程模型的演变”幻灯片

2010-12-11 22:01 by 老赵, 4418 visits
摘要:演出季终于过去了,现在就来做一个收尾吧。这次的主题是“异步编程模型的演变”,主要回顾了微软在.NET平台上异步编程上的进化:基于回调,基于迭代生成器,基于类库,基于语言。不过这样的编程模型其实并非微软独有,而是一些运用比较广泛的异步编程方式,因此在SD 2.0大会上我其实完全用JavaScript进行演示。从结果上来看,除了最早的TUP,其他两场演讲(.NET技术大会和SD 2.0)的反响都不错。 阅读全文

适合JavaScript 1.7中迭代生成器的异步编程机制

2010-12-03 19:09 by 老赵, 3411 visits
摘要:上篇文章我提出了一种基于JavaScript 1.7中迭代生成器(yield)的异步编程方式,它可以让混乱的异步代码逻辑变得清晰一些。不过之前的AsyncIterator其实是对基于C# 2.0的AsyncEnumerator的仿制品,在公司的分享会上进行交流以后,同事hax提出其实可以实现地更漂亮一些。在他的提示下,我了解到JavaScript 1.7中不同于C# 2.0里的特性,因而对这种异步编程机制提出了改进。只可惜yield特性被ECMAScript 5排除了,这实在可以说是委员会设计模式的又一次伟大胜利。 阅读全文

JavaScript版本的AsyncEnumerator

2010-11-29 22:25 by 老赵, 4187 visits
摘要:地球人都知道,在C# 2.0里提供了yield关键字,可以方便好用地生成一个迭代器,更可以简化异步操作——这是因为有了Jeffrey Richter开发的AsyncEnumerator。在接下来的某些演讲中我准备的主题是“异步编程模型”的演变,自然少不了这非常重要的一环。为了便于广大人民群众更好地接受,我决定使用JavaScript来进行说明。为此,我用JavaScript实现了一个AsyncEnumerator。 阅读全文

使用Narcissus解析JavaScript代码

2010-11-17 18:08 by 老赵, 4209 visits
摘要:最近在做一个有关JavaScript的实验,需要在客户端将JavaScript代码解析为一棵语法树。换句话说,就是一个用JavaScript实现的JavaScript解析器。这方面的选择有很多,常见的yacc、lex或是bison等等都有JavaScript的版本,使用ANTLR也可以将生成目标设为JavaScript。不过我不想在这方面耗费太多时间,自然想找个现成的工具,于是最终我将目标放在了Narcissus上。 阅读全文

服务器端执行JavaScript代码

2010-11-09 18:11 by 老赵, 16509 visits
摘要:话说,如今不在客户端使用JavaScript代码才是稀奇事儿。由于Web应用的体验越来越丰富,客户端用JavaScript实现的逻辑也越来越多,这造成的结果就是某些几乎一致的逻辑需要在客户端和服务器端各实现一遍。这违反了DRY原则,不容易维护。幸运的是,我们可以在服务器端执行JavaScript代码,谁让JavaScript傍上了这无比霸道的浏览器平台呢? 阅读全文

趣味编程:在JavaScript中实现简单的yield功能(2 - 循环支持及解释执行)

2010-06-11 20:41 by 老赵, 3313 visits
摘要:在上一篇文章里,我们构造了$yield和$yieldSeq两个基础编程组件,于是我们可以“在一定程度上”使用C#中的yield功能来构造一个迭代器。从表面上看来似乎不错,不过它的实际价值还是有值得推敲的。例如,我们目前还必须使用递归来代替循环,那么我们有办法改变这种变成方式吗?此外,在评论中有朋友谈到,这样写代码其实不是一个格式化就混乱了吗?至少,您是否觉得这种编程方法的function和括号实在多了些呢?这次我们就来探索这些问题的解决办法。 阅读全文

趣味编程:在JavaScript中实现简单的yield功能(1 - yield与yieldSeq)

2010-06-10 09:36 by 老赵, 2834 visits
摘要:上文我谈到了迭代器及其生成器,即C#或Python中的yield功能,它们极大地简化了创建一个迭代器的工作,让代码的语义和可读性有了很大提高。虽然在JavaScript 1.7中已经有了相同的功能,可惜目前我们还无法用到这种强大的能力。那么,我们能不能为JavaScript提供如C#中一样的功能?在文章的评论里许多朋友也给出了他们的解决方案,也让我获得了许多启发。因此,我也打算在以后的文章中总结一下各位的做法。不过在这篇文章里,我先来阐述一下我个人的想法。 阅读全文

趣味编程:在JavaScript中实现简单的yield功能(问题)

2010-06-08 15:33 by 老赵, 8173 visits
摘要:说起迭代器(Iterator)大家一定都不陌生,无论是是Java,C#或是Python等语言都有内置标准的迭代器结构,它们也都提供了内置的for或foreach关键字简化迭代器的“使用”。不过对于迭代器的“生成”,不同语言之间的就会有很大差距。例如,在C#和Python中都提供了yield来简化迭代器的“创建”,此时生成一个迭代器便再简单不过了。但对于Java程序员来说,即使到了Java 7还必须为在迭代器内部手动维护状态,非常痛苦。而更重要的一点是,利用yield我们可以轻松地创建一个“延迟”的,“无限”的序列。那么,我们能否在JavaScript中享受到这样的yield生成器呢? 阅读全文

编程语言的发展趋势及未来方向(4):动态语言

2010-05-23 22:16 by 老赵, 13036 visits
摘要:这是Anders Hejlsberg在比利时TechDays 2010所做的开场演讲。由于最近我在博客上关于语言的讨论比较多,出于应景,也打算将Anders的演讲完整地听写出来。在上一部分中,Anders谈及了声明式编程的另一个重要组成部分:函数式编程,并使用.NET平台上的函数式编程语言F#进行了演示。在这一部分中,Anders讨论了动态语言及JavaScript的相关内容,“动态性”也是Anders眼中编程语言的发展趋势之一。 阅读全文

一些技术图书编写、推荐、出版人员需要自重

2009-09-23 20:04 by 老赵, 18804 visits
摘要:国内图书市场已经很不健康了,虽然现在许多出版社、编辑和作者的努力都看得到,但是总有更多的书冒出来拖他们的后腿。对于普通人来说,有多少人会区分出版社,区分作者呢?因此,我真希望技术图书的编写、推荐和出版人员还是要自重,写不好书就不要写,出不了好书就不要吹,没看过书就不要推。图书产业虽然也早已商业化,但是这毕竟还代表了知识,有其特殊性,经济利益不该是你们唯一考量的东西。 阅读全文
1
使用Live Messenger联系我