论坛首页 Web前端技术论坛

预告:把异步变同步——AJAX之Future模式

浏览 18145 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-06-01  
不要掉人胃口啦,早点放出来,让大家一起研究研究,呵呵
0 请登录后投票
   发表时间:2007-06-01  
看来不是关注于XHR部分,而是某些计算方面的。不过就许多项目来说,除了XHR和界面事件回调,基本都是同步的了,类似future模式作用有多大呢
0 请登录后投票
   发表时间:2007-06-01  
birdjavaeye 写道
看来不是关注于XHR部分,而是某些计算方面的。不过就许多项目来说,除了XHR和界面事件回调,基本都是同步的了,类似future模式作用有多大呢


非也,本身许多东西是同步的,但是它依赖异步的结果,导致本来可同步执行的内容必须callback。请考虑我前述的例子。
0 请登录后投票
   发表时间:2007-06-01  
和我的想法差不多.
http://jindw.spaces.live.com/blog/cns!4D0B98F5F0C51177!152.entry
0 请登录后投票
   发表时间:2007-06-01  
jindw 写道


是有一点类似。不过:

1. 我主要从javascript本身出发,并不限于remote调用的异步,也可以针对setTimeout之类的异步。
2. 针对result的join,我原来确实也是有类似的做法,即有若干个task,然后可以顺序化或并行化,有点像排一个flow。但是后来我觉得这样还是不够,程序员还是要被迫使用一种新的概念和编程模式。我希望程序员能像处理一般的程序那样——即“异步”只是背后发生的,对于程序员可以透明。程序员写出的是很easy的程序,但是通过某种方式,Future模式能透明的把它转换为实际上以异步方式执行。
0 请登录后投票
   发表时间:2007-06-01  
hax 写道

非也,本身许多东西是同步的,但是它依赖异步的结果,导致本来可同步执行的内容必须callback。请考虑我前述的例子。

既然许多东西都是同步的,那依赖哪些异步的东西呢?主要的也就是XmlHttp和event handler,设计上很容易将他们和同步的分开
0 请登录后投票
   发表时间:2007-06-01  
hax 写道
jindw 写道


是有一点类似。不过:

1. 我主要从javascript本身出发,并不限于remote调用的异步,也可以针对setTimeout之类的异步。
2. 针对result的join,我原来确实也是有类似的做法,即有若干个task,然后可以顺序化或并行化,有点像排一个flow。但是后来我觉得这样还是不够,程序员还是要被迫使用一种新的概念和编程模式。我希望程序员能像处理一般的程序那样——即“异步”只是背后发生的,对于程序员可以透明。程序员写出的是很easy的程序,但是通过某种方式,Future模式能透明的把它转换为实际上以异步方式执行。

这样的代码
function go() {
  a();
  b(x, y, z, go2); // 给回调传结果的函数
}
function go2(result) {
  c(result);
}

要能不改变b函数,而直接写成类似
function go() {
  a();
  var result = b();
  c(result);
}

同时基于js单线程特性、用户体验、跨浏览器这些前提,基本上只有一种方法,就是 自动 按照程序员写的后面那种代码 生成 前面那种代码。
程序员这么写:
function go() {
  a();
  var result = $async(b, x, y, z, $callback);
  c(result);
}

然后 go = $sync(go);就自动生成代码
function go() {
  a();
  b(x, y, z, $temp1);
}
function $temp1(result) {
  c(result);
}


而实现方式也不难:利用firefox和ie都支持的Function.prototype.toString,就是在运行时能得到一个方法的源代码。
这个源代码是语法正确的,只要分析一下格式,生成其他代码就可以了。

计划在objot库21版中提供这种代码分析和生成的功能,并用它来实现aop和模拟多线程(就类似前面举的例子)
0 请登录后投票
   发表时间:2007-06-04  
birdjavaeye bingo! 不过并不需要分析源代码,有其他途径可以达到。
0 请登录后投票
   发表时间:2007-06-04  
还有其他办法?说说看
要支持ie&firefox, windows&linux哦
0 请登录后投票
   发表时间:2007-06-04  
期待 hax 的大作!
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics