有人可以解释到底是什么并显示示例吗?
来源:Douglas Crockford的Long running tasks YUI博客
最佳答案
最初,我认为这只是迭代的错字,因为在网上搜索激励不会产生明显的结果。
但是,然后,我碰到references,该词是克罗克福德本人在他的一次演讲中创造的。
在网上,唯一可以找到解释的地方是The Factorial Tutorial,在他的页面上,该文章在 Act 2 中,作为对代码示例的注释,他指出:
这似乎是相关术语对的一部分,因为他的下一个代码示例在不使用堆栈的情况下执行递归,包含该对中的另一个成员:
因此,似乎 eteration 和 ecursion 是Crockford自己发明和定义的术语,用于引用E Programming Language上下文中的消息迭代和递归,该术语是在Java之上为编写分布式应用程序的开发人员设计的。
该语言称为 E 的事实可能是为其选择特定术语(** e *** teration *和** e *** cursion *)赋予其特定的迭代和递归 flavor 的原因。
如果是Javascript上下文,则Crockford从分钟30:40 开始,将术语 eteration 解释为对话Crockford on JavaScript -- Scene 6: Loopage的一部分:
结果是 eteration 安排了循环的每个步骤,而不是一个紧密的循环,而是在太长的时间内阻塞了该接口(interface),该链条只在实际步骤执行时(而不是在步骤之间)阻塞该链。这样就可以在与接口(interface)相同的线程中执行长时间运行的任务(Javascript是单线程的),同时保持应用程序的响应能力。
查看全文,质量更高,并附上全文抄本here。
另外,有关如何实现这种技术的引用,请考虑以下情形:
<html>
<head>
<script type="text/javascript">
function testFeedback()
{
var feedbackDiv = document.getElementById("feedbackDiv");
feedbackDiv.innerHTML += "The Interface is Still Responsive!</br>";
}
var currentNumber = 0;
var loopStepDelay = 30;
function performLoopStep()
{
var numbersDiv = document.getElementById("numbersDiv");
numbersDiv.innerHTML = currentNumber++;
setTimeout("performLoopStep()", loopStepDelay);
}
setTimeout("performLoopStep()", loopStepDelay);
</script>
</head>
<body>
<div id="numbersDiv"></div>
</br>
</br>
<div id="feedbackDiv"></div>
</br>
</br>
<button onClick="testFeedback()">Try Me</button>
<body>
</html>
有两个
div
,一个显示正在进行的枚举的索引,另一个显示文本The Interface is Still Responsive!每按一次“尝试我”按钮。从代码中可以看到,通过setTimeout
间隔一定的时间安排了发布步骤,从而允许进行用户交互并进行处理。因此,随着用户单击按钮并触发第二个div的更新,逐步运行步骤将继续运行,在完成页面实际执行的工作的同时保持页面的响应速度(在这种情况下,仅显示索引)。