w3ctech 2011 JavaScript专题会议(广州站)​综述

w3ctech 2011 JavaScript专题会议(广州站)​日前在华师大附中召开,参会者近300人,来自国内技术社区的四位知名专家陈广琛、赵劼、周爱民、贺师俊分别做了精彩的演讲,涉及的内容包括​​​​云端NodeJS、JS异步解决方案Jscex、开源Javascript引擎Narcissus、ECMAScript 5的strict模式等。InfoQ中文站整理了大会的精彩内容,供读者参考。

\

云端JavaScript漫游指南

\

雅虎前端工程师陈广琛演讲的主题是《云端JavaScript漫游指南》​,他以丰富的实例和现场演示介绍了NodeJS的强大功能和云端部署的​知识。

\

正如陈广琛在开场白里所说,十年前的Javascript还要看VBScript、PHP、CGI的脸色,而如今Javascript的强大从前端延伸到了后端。在​解释JavsScript依靠NodeJS平台作为服务器端编程语言​的优势时​,他在会场演示了两个功能不大但让人印象深刻的NodeJS开发案例,这些以前Web开发人员需要采用其他语言实现的功能,如今用熟悉的JavaScript即可完成。让我们来体会一下NodeJS的魅力。

\

域名重定向(biz-to-me)代码示例​:

\
\

 const http = require('http');
\ var server = http.createServer(function(request, response) {
\    var host = request.headers['host'];
\    var url = request.url; 

\    console.log('request from: http://' + host + url);


\    host = host.replace(/catchen\\.biz$/, 'catchen.me');\

    if (host == request.headers['host']) {
\        host = 'catchen.me';
\        url = '/'
\    }

\    var location = 'http://' + host + url;


\    console.log('redirect to: ' + location);
\    response.writeHead(302, {
\        Location: location
\    });

\    response.write('Temporarily moved to \u0026lt;a href=\"' + location + '\"\u0026gt;' + location + '\u0026lt;/a\u0026gt;.');


\    response.end();
\});
\var port = process.env.PORT || 3000;

\server.listen(port, function(){


\    console.log(\"Listening on \" + port);
\});\
\

​短URL解析(traceurl)的代码示例可以从这里查看。

\

从这两个例子中,我们可以看到一些亮点,比如:

\
  • 导入函数库时,可以赋值给命名常量,便于范围管理,像const http = require('http')。\
  • 服务器端处理主要函数是createServer中传入的回调函数function(request, response)。\
  • 从request解析http请求,用response返回响应。\
  • 采用Javascript语言,参数Json风格。\
  • 无需配置Apache。\
  • 支持URL路由(字符串定义和正则表达式两种)。\

陈广琛特别介绍了NodeJS的Express.js库,常用的功能包括:

\
  • 日志管理\
  • 路由\
  • cookie解析\
  • session管理\
  • 模板引擎\

有志于从事NodeJS应用开发的朋友,可能会担心NodeJS相关的支持工具包(package)不够多从而导致开发比较麻烦。陈广琛建议大家利用NPM搜索已有的工具包。NPM是针对NodeJS的包管理器,可以用来安装和发布NodeJS应用,它能够管理依赖等。除了利用第三方的工具包,陈广琛还介绍了如何构建自己的package(见短URL解析代码示例),大体分为三步:

\
  • 使用module.exports编写模块。\
  • 提供package.json和index.js文件。\
  • 使用npm publish发布。\

演讲的后半部分转到了演讲的关键字——云端。对于已经构建好的NodeJS应用,部署在何处?陈广琛指出,无论是租用机房的服务器还是购买VPS服务,都不是理想的选择,“云端”才是大势所趋。他介绍了四款NodeJS云端服务:

\

其中Heroku提供每月750小时的单进程免费服务,适合于简单的NodeJS应用和学习实践。

\

最后,陈广琛指出NodeJS的最大优势在于高并发和异步IO,只有应用存在这些需求时,NodeJS才会表现出相比其他平台或语言的过人之处。

\

提升JavaScript生产力的“异样”编程手段

\

IBM高级咨询师、InfoQ中文站编辑赵劼以《提升JavaScript生产力的“异样”编程手段》为题介绍了其创建的Javascript开源项目Jscex,对深陷异步编程困扰的开发人员很有启发和帮助。

\

老赵在开场阶段一如既往地批评Java语言的不足,他以构建书籍索引为例,C#语言的实现代码如下:

\
\

// C#
\List\u0026lt;string\u0026gt; keywords = ...;
\var result = keywords
\    .GroupBy(k =\u0026gt; k[0].ToUpper())
\    .ToDictionary(
\        g =\u0026gt; g.Key,
\        g =\u0026gt; g.OrderBy(k =\u0026gt; k).ToList());

\
\

与此形成鲜明对比的是Java语言的实现代码:

\
\

List\u0026lt;String\u0026gt; keywords = ...;
\Map\u0026lt;Character, List\u0026lt;String\u0026gt;\u0026gt; result = new HashMap\u0026lt;...\u0026gt;();
\for (String k: keywords) {
\    char firstChar = k.charAt(0);
\    if (!result.containsKey(firstChar)) {
\        result.put(firstChar, new ArrayList\u0026lt;String\u0026gt;());
\    }
\    result.get(firstChar).add(k);
\}
\for (List\u0026lt;String\u0026gt; list: result.values()) {
\    Collections.sort(list);
\}

\
\

老赵总结了Java的四点不足:

\
  • 命令式编程(强调怎么做)\
  • 复杂的匿名类型语法\
  • 强制写清所有类型名\
  • 无法扩展既有类型\

而现代语言的常见特性是什么呢?

\
  • 声明式编程(做什么)\
  • 易用的Lambda表达式语法\
  • 类型推断(对于静态语言)\
  • 无侵入的类型扩展\

老赵指出,Javascript有着优秀的特性,不过在异步编程时存在不足,会破坏代码局部性,将逻辑拆分地支离破碎,同时对异步操作之间的协作和组合、异常处理及取消造成了困难,开源项目Jscex(JavaScript Computation EXpression)正是为了解决这些问题,其借鉴了F#的计算表达式特性,Jscex是Javascript语言扩展,通过非常巧妙的手段让开发人员享受异步编程的乐趣。比如,在定义异步操作时,需要采用如下代码形式:

\
\

// 使用异步构造器执行编译后的代码
\var somethingAsync = eval(Jscex.compile(\"async\

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值