- 浏览: 961481 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
sscsacdsadcsd:
mike8625 写道react还要自己的一些标签 还得编译 ...
对于React体系的一点想法 -
mike8625:
说的都是给大公司听的,国内很多还是小公司,做个小项目, 说实话 ...
关于国内前端和JS技术发展的乱想 -
mike8625:
react还要自己的一些标签 还得编译 编译吧浏览器端说还慢 ...
对于React体系的一点想法 -
u012814086:
下意识想到了Golang
JavaScript语句后应该加分号么? -
xueduanyang:
我是水羊,年轻的时候觉得只要有好斧子就能做成好产品,各种产品都 ...
关于国内前端和JS技术发展的乱想
2008年3月更新:
本系列由于某些原因没有继续完成,可能等过一段时间再完成。
http://qiezi.iteye.com/blog/163182的comments中提到的async_call与这里的思路有类似之处,虽然那是在讨论ErLang。
众所周知,AJAX虽然提高了用户体验,并提出了一种创新的web应用架构模式,但是也带来了一个问题,就是异步编程非常复杂。
单纯一个异步XHR调用或许还不算什么,但当多个XHR交织的时候,复杂性就指数级上升。例如,考虑这样一个人造的例子:
一个股票页面(带劲吧?)
首先从一个数据源读取当前用户所持有的股票种类和数量。
然后读取这些股票的当前价格。由于用户可能持有不同市场的股票(如中国A股、中国B股、香港股票、NADQ……),每个市场数据来自不同的xml源,其格式可能不同。
每个xml源可能使用不同的xslt来转换到html片段,比如中国股票与NADQ股票就用不同的xslt来转换。但有些可能共用相同的xslt,如A股和B股的格式差不多,所以用同样的xslt转换。又,香港股票xml源是首先用一个xslt转换成与A股和B股一样的xml格式,然后再用前述的xslt转换为html片段。
页面还会根据所有数据计算出用户的当前在每个市场上市值,以及总市值。
好了,以上这些,如果用传统的异步方式做,你会看到多少callback漫天飞舞呢?
而且我们知道,异步callback是非常难以调试和跟踪的,你经常不知道问题出在哪里,而且很多时候异步问题是很难重现的。
如果异步编程能像同步编程一样清晰,一样易于调试,那该多好!
2005年年底的时候,我突发奇想,借鉴Java 1.5新增的Future类,揉合JavaScript的特性,创造了AJAX的Future编程模式,使得可以用同步编程的编码方式进行异步编程,并可在同步和异步下自由切换,在同步状态下进行业务测试,保证业务实现的正确性,然后切换到异步,进行网络和负载的测试!
在以后的数天里,我会将这种方法与大家共享,也希望大家能共同验证这一模式的可行性!
我觉得Hax楼主所说的,和上述两个链接谈及的技术完全不一样。
从我个人角度看,我认为,Hax考虑更多的是参考Java 5 中Cocurrent的API设计,在JavaScript中类似地使用Future模式。
在那里?别放冷枪嘛。给出个地址来,也让我们好研究研究。别光掉人胃口。
不给地址名字总该透漏一下吧:(
是有一点类似。不过:
1. 我主要从javascript本身出发,并不限于remote调用的异步,也可以针对setTimeout之类的异步。
2. 针对result的join,我原来确实也是有类似的做法,即有若干个task,然后可以顺序化或并行化,有点像排一个flow。但是后来我觉得这样还是不够,程序员还是要被迫使用一种新的概念和编程模式。我希望程序员能像处理一般的程序那样——即“异步”只是背后发生的,对于程序员可以透明。程序员写出的是很easy的程序,但是通过某种方式,Future模式能透明的把它转换为实际上以异步方式执行。
这样的代码
要能不改变b函数,而直接写成类似
同时基于js单线程特性、用户体验、跨浏览器这些前提,基本上只有一种方法,就是 自动 按照程序员写的后面那种代码 生成 前面那种代码。
程序员这么写:
然后 go = $sync(go);就自动生成代码
而实现方式也不难:利用firefox和ie都支持的Function.prototype.toString,就是在运行时能得到一个方法的源代码。
这个源代码是语法正确的,只要分析一下格式,生成其他代码就可以了。
计划在objot库21版中提供这种代码分析和生成的功能,并用它来实现aop和模拟多线程(就类似前面举的例子)
非也,本身许多东西是同步的,但是它依赖异步的结果,导致本来可同步执行的内容必须callback。请考虑我前述的例子。
既然许多东西都是同步的,那依赖哪些异步的东西呢?主要的也就是XmlHttp和event handler,设计上很容易将他们和同步的分开
是有一点类似。不过:
1. 我主要从javascript本身出发,并不限于remote调用的异步,也可以针对setTimeout之类的异步。
2. 针对result的join,我原来确实也是有类似的做法,即有若干个task,然后可以顺序化或并行化,有点像排一个flow。但是后来我觉得这样还是不够,程序员还是要被迫使用一种新的概念和编程模式。我希望程序员能像处理一般的程序那样——即“异步”只是背后发生的,对于程序员可以透明。程序员写出的是很easy的程序,但是通过某种方式,Future模式能透明的把它转换为实际上以异步方式执行。
本系列由于某些原因没有继续完成,可能等过一段时间再完成。
http://qiezi.iteye.com/blog/163182的comments中提到的async_call与这里的思路有类似之处,虽然那是在讨论ErLang。
众所周知,AJAX虽然提高了用户体验,并提出了一种创新的web应用架构模式,但是也带来了一个问题,就是异步编程非常复杂。
单纯一个异步XHR调用或许还不算什么,但当多个XHR交织的时候,复杂性就指数级上升。例如,考虑这样一个人造的例子:
一个股票页面(带劲吧?)
首先从一个数据源读取当前用户所持有的股票种类和数量。
然后读取这些股票的当前价格。由于用户可能持有不同市场的股票(如中国A股、中国B股、香港股票、NADQ……),每个市场数据来自不同的xml源,其格式可能不同。
每个xml源可能使用不同的xslt来转换到html片段,比如中国股票与NADQ股票就用不同的xslt来转换。但有些可能共用相同的xslt,如A股和B股的格式差不多,所以用同样的xslt转换。又,香港股票xml源是首先用一个xslt转换成与A股和B股一样的xml格式,然后再用前述的xslt转换为html片段。
页面还会根据所有数据计算出用户的当前在每个市场上市值,以及总市值。
好了,以上这些,如果用传统的异步方式做,你会看到多少callback漫天飞舞呢?
而且我们知道,异步callback是非常难以调试和跟踪的,你经常不知道问题出在哪里,而且很多时候异步问题是很难重现的。
如果异步编程能像同步编程一样清晰,一样易于调试,那该多好!
2005年年底的时候,我突发奇想,借鉴Java 1.5新增的Future类,揉合JavaScript的特性,创造了AJAX的Future编程模式,使得可以用同步编程的编码方式进行异步编程,并可在同步和异步下自由切换,在同步状态下进行业务测试,保证业务实现的正确性,然后切换到异步,进行网络和负载的测试!
在以后的数天里,我会将这种方法与大家共享,也希望大家能共同验证这一模式的可行性!
评论
32 楼
winterwolf
2007-07-05
还是用一个请求获得数据简单
从多个数据源获得数据并加工的事情 交给服务器吧
从多个数据源获得数据并加工的事情 交给服务器吧
31 楼
legend
2007-07-05
怎么还没看到楼主大作?
30 楼
zhourenjian
2007-06-12
Hax,
该是时候贴点东西(即使未完成,也聊胜于无)上来了,大家等了比较长时间了。
该是时候贴点东西(即使未完成,也聊胜于无)上来了,大家等了比较长时间了。
29 楼
zhourenjian
2007-06-12
smaviller 写道
我觉得Hax楼主所说的,和上述两个链接谈及的技术完全不一样。
从我个人角度看,我认为,Hax考虑更多的是参考Java 5 中Cocurrent的API设计,在JavaScript中类似地使用Future模式。
28 楼
legend
2007-06-10
不能理解,太高深了,期待楼主解答。
27 楼
birdjavaeye
2007-06-10
嗯,重新解析js,或者说编译的方法,也就是我前面提到的思路,差别只是具体如何实现。
但这种方式需要深入研究。同步的写法,是调用一个函数,等待返回,拿到返回值,继续执行。而实际是异步执行,setTimeout、XmlHttp、onclick等等都可能会有回调。
为了保证语义,不是被调用函数的那些回调都必须被屏蔽。否则就好像,被调用函数包含了其他回调的功能,这就改变了被调用函数的语义和作用。
屏蔽不容易,继续深入的话,最后就变成了一个纯粹的没有回调的单线程,用做计算可以,但用于界面就不切实际了
然而用于计算,基本没有异步的情况…
保持同步语义,而又不失灵活性,还是等ie、firefox都支持多线程吧。不过那样又有多线程本身的复杂性了。。。
但这种方式需要深入研究。同步的写法,是调用一个函数,等待返回,拿到返回值,继续执行。而实际是异步执行,setTimeout、XmlHttp、onclick等等都可能会有回调。
为了保证语义,不是被调用函数的那些回调都必须被屏蔽。否则就好像,被调用函数包含了其他回调的功能,这就改变了被调用函数的语义和作用。
屏蔽不容易,继续深入的话,最后就变成了一个纯粹的没有回调的单线程,用做计算可以,但用于界面就不切实际了
然而用于计算,基本没有异步的情况…
保持同步语义,而又不失灵活性,还是等ie、firefox都支持多线程吧。不过那样又有多线程本身的复杂性了。。。
26 楼
jindw
2007-06-09
异步变同步,我能想到的方法只有两种。
1.采用mozilla新版本支持的线程处理函数。
2.代码编译。
第一种方法的弊端:目前还局限于mozilla,非正式标准。
第二种方法:编译麻烦,而且,好像也只能整站编译。基于它的实现很难作为类库使用。
不知道hax的实现思路如何?
能否透漏一点?
1.采用mozilla新版本支持的线程处理函数。
2.代码编译。
第一种方法的弊端:目前还局限于mozilla,非正式标准。
第二种方法:编译麻烦,而且,好像也只能整站编译。基于它的实现很难作为类库使用。
不知道hax的实现思路如何?
能否透漏一点?
25 楼
smaviller
2007-06-09
24 楼
jindw
2007-06-09
smaviller 写道
国外已经有人实现这种特性,但是需要重新解析js,而且有一定的限制
在那里?别放冷枪嘛。给出个地址来,也让我们好研究研究。别光掉人胃口。
不给地址名字总该透漏一下吧:(
23 楼
smaviller
2007-06-09
国外已经有人实现这种特性,但是需要重新解析js,而且有一定的限制
22 楼
fuhao9611
2007-06-05
LZ加油,期待ing~~~!
21 楼
hax
2007-06-04
正在赶工中。。。
20 楼
笨笨狗
2007-06-04
赶紧放出来吧,等几天了都……
19 楼
andot
2007-06-04
期待 hax 的大作!
18 楼
birdjavaeye
2007-06-04
还有其他办法?说说看
要支持ie&firefox, windows&linux哦
要支持ie&firefox, windows&linux哦
17 楼
hax
2007-06-04
birdjavaeye bingo! 不过并不需要分析源代码,有其他途径可以达到。
16 楼
birdjavaeye
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和模拟多线程(就类似前面举的例子)
15 楼
birdjavaeye
2007-06-01
hax 写道
非也,本身许多东西是同步的,但是它依赖异步的结果,导致本来可同步执行的内容必须callback。请考虑我前述的例子。
既然许多东西都是同步的,那依赖哪些异步的东西呢?主要的也就是XmlHttp和event handler,设计上很容易将他们和同步的分开
14 楼
hax
2007-06-01
jindw 写道
是有一点类似。不过:
1. 我主要从javascript本身出发,并不限于remote调用的异步,也可以针对setTimeout之类的异步。
2. 针对result的join,我原来确实也是有类似的做法,即有若干个task,然后可以顺序化或并行化,有点像排一个flow。但是后来我觉得这样还是不够,程序员还是要被迫使用一种新的概念和编程模式。我希望程序员能像处理一般的程序那样——即“异步”只是背后发生的,对于程序员可以透明。程序员写出的是很easy的程序,但是通过某种方式,Future模式能透明的把它转换为实际上以异步方式执行。
13 楼
jindw
2007-06-01
发表评论
-
对于React体系的一点想法
2015-06-12 01:53 5780这一年来react和react native火得不行。 我对 ... -
图片lazyload兼容无脚本的小改进
2012-12-04 19:09 5719刚刚改进了一下某个页 ... -
tagName的大小写问题(QWrap选择器的一个bug)
2011-07-16 23:33 6520今儿写程序。 对于现 ... -
document.enableStyleSheetsForSet() 的兼容
2011-06-17 16:27 3502可能有不少同学已经了 ... -
IE神奇小bug一则
2010-12-03 18:05 2769<input type="text&quo ... -
前端优化新得一则
2010-02-22 15:05 2845因为把公司的电脑搞坏两台,这两天没有工作电脑可用了,所以就不干 ... -
一个史上最快的Web语法高亮引擎即将诞生
2009-05-02 03:33 6224对比对象是目前最有名,也是JavaEye所使用的highlig ... -
getUsedValue 0.4发布
2009-04-28 18:46 2059关于used value的基本解释,请看getUsedValu ... -
getUsedValue 0.1
2009-04-06 03:26 3666前不久写了一个小脚本,用来获取页面中CSS样式的 used v ... -
表单数据提交时的字符编码问题
2009-01-18 02:28 6210人老了,以前研究过的东西都忘记了。所以还是记录下来比较好。 ... -
再贴一次form的属性和控件name冲突的老问题
2008-11-07 18:59 3182更新: John Resig也谈到了这个问题。 而这里是一个非 ... -
一个嵌入式HTML引擎
2008-05-10 18:28 4131http://www.terrainformatica.com ... -
西方人通常发现不了的一个IE的bug
2008-05-09 20:00 8812这个问题我大概在一年 ... -
IE memory leak 备忘
2008-03-03 01:07 5148本篇只记录一下工具,有空再做研究。 Drip: http:/ ... -
批量修改style采取哪种方式好(续篇)
2008-02-24 19:20 3953前篇见批量修改style采取哪种方式好,主要是回答fins的提 ... -
XBL2的实现
2008-02-24 02:35 2344今天发现几种XBL2的实现。浏览器实现XBL2还要等上一段时间 ... -
批量修改style采取哪种方式好(答fins)
2008-02-23 21:55 4379fins同志向我提了个问题。因这个问题其实可以展开讨论,所以提 ... -
使用捕获事件监听器(useCapture=true)的陷阱及其对策
2008-02-17 07:02 9723DOM event flow有三个phase,capture、 ... -
写了一个XML Base的JS实现(简介篇)
2008-01-23 01:08 3155最近想在一个小应用中采用浏览器端的xinclude。找了一下, ... -
MSXML默认解析外部DTD
2007-11-07 18:17 3587昨日aimingoo说它测试xmldom的速度,发现载入一个w ...
相关推荐
这部分内容不需要读者有任何的客户端开发知识,只要在Visual Stuio中轻松拖放即可实现强大的客户端Ajax功能,例如局部页面更新、异步回送、拖放、动画等,非常适合为现有的ASP.NET 2.0应用程序添加少量的Ajax特性,...
### 对立统一——异步时钟同步化 #### 一、什么是对立统一 在讨论异步时钟同步化之前,我们首先理解“对立统一”的概念。在FPGA设计领域,“对立统一”主要指的是系统中不同频率时钟信号之间存在的矛盾与协调。...
AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换...理解并熟练运用AJAX的同步和异步模式,是提升Web应用性能和交互性的重要手段。
具体来讲,co库支持以下特性来实现异步变同步的效果: 1. 生成器(Generators):生成器是一种特殊的迭代器,可以暂停函数的执行并返回一个中间结果,稍后再从中断的地方继续执行。生成器函数通过function*关键字...
调用方法:1 将下载好的Ajax js文件引用到页面 代码如下:<script src " js MyAjax js" type "text javascript">< script> 2 调用方法:(1)异步: MyAjax " 要调用的方法...
2. **异步请求**:Ajax的关键特性就是异步,意味着它不会阻塞浏览器执行其他任务。用户可以继续浏览网页,而Ajax请求在后台默默地进行。 3. **JSON数据格式**:尽管名称中有XML,但实际应用中,JSON(JavaScript ...
例如,使用$.ajax()或$.post()方法发送异步请求,获取服务器端的响应,并根据返回的结果更新DOM元素。 4. **Web服务或API**:后端可能提供了一个Web服务(如ASMX或Web API),用于接收和处理Ajax请求,进行用户注册...
"上传控件——ajaxUpLoader"就是一个专为此目的设计的工具,它提供了高效且用户体验良好的上传功能。以下是对这个控件及其相关技术的详细解释。 1. **Ajax上传**: Ajax(异步JavaScript和XML)技术允许网页在不...
* 同步模式有多进程模式和动态链接库模式两个子模式,异步模式有简单异步模式和完全异步模式两个子模式。 在 PROE 二次开发中,选择合适的模式取决于具体的应用场景和开发需求。了解同步模式和异步模式的区别可以...
### 关于解决jQuery同步异步的问题 在前端开发过程中,我们经常会使用到jQuery库来进行DOM操作及Ajax请求等。而在处理Ajax请求时,默认情况下jQuery的`$.ajax()`方法是采用异步的方式执行的,这对于大部分场景来说...
此资源与我的博客13_JavaWeb——AJAX中的两个案例对应,其中Demo5使用AJAX异步处理页面实现对用户输入的实时校验,Demo6使用Axios+JSON完成对品牌列表的展示和添加,取代了先前的JSP。希望有所帮助
- **异步通信**:AJAX 的关键特性,允许在不阻塞用户界面的情况下进行数据交换。 ### 2. AJAX 请求过程 1. **创建对象**:使用 JavaScript 创建 XMLHttpRequest 对象。 2. **初始化请求**:设置请求类型(GET 或 ...
在Web开发中,jQuery是一个非常流行的JavaScript库,它极大地简化了DOM操作、事件处理以及Ajax交互。本主题聚焦于jQuery中的Ajax功能,特别是如何利用它进行异步用户名验证。Ajax,即Asynchronous JavaScript and ...
总结来说,Ajax Interceptor 是一个方便的Chrome插件,它利用AJAX的异步特性,为开发者提供了强大的控制和调试能力。通过理解和运用这个工具,开发者可以更高效地进行前端开发,尤其是在处理复杂的API交互时。同时,...
本卷侧重分析ASP.NET AJAX框架的客户端部分,包括对JavaScript 在面向对象、DOM 操作方面的扩展、ASP.NET AJAX 客户端组件、ASP.NET AJAX XML脚本等,还介绍了ASP.NET AJAX 框架为开发者在客户端用JavaScript 与...
**Ajax(Asynchronous JavaScript and XML)**是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。这个技术由JavaScript实现,通常与XML数据格式配合使用,但如今更常见的是JSON,因为JSON格式的数据处理...
此压缩包"ASP.NET源码——ajax 插入 删除功能.zip"提供了一套示例代码,演示了如何在ASP.NET应用中使用AJAX(Asynchronous JavaScript and XML)技术来实现数据的无刷新插入和删除功能。AJAX允许在不重新加载整个...
《三相异步电机CAD系统——哈工大计算程序》是一款专为电机设计者打造的专业软件,由哈尔滨工业大学开发,旨在提高三相异步电机的设计效率和精度。这款软件集成了丰富的理论知识与实践经验,是电机工程领域的得力...
异步方法的返回值默认是Future类型,意味着你可以在后续代码中通过Future对象获取异步方法的结果。如果异步方法抛出异常,Spring会捕获它,并将其记录在日志中。如果需要自定义异常处理,你可以创建一个`...