有人可以解释究竟是什么 Eteration 并展示一个例子吗?
来源:道格拉斯克罗克福德的Long running tasks YUI博客
答案 0 :(得分:32)
最初,我认为这只是迭代的错字,因为在线搜索 eteration 不会产生重大结果。
但是,然后,我遇到了references,声称这个词是由克罗克福德本人在他的一次谈话中创造的。
在线,我可以找到解释的唯一地方是The Factorial Tutorial页面上的一篇文章,在 Act 2 中,作为对代码示例的评论,他声明:< / p>
法案2a:消息迭代(eteration)
这似乎是一对相关术语的一部分,因为他的下一个代码示例在不使用堆栈的情况下执行递归,包含该对的另一个成员:
动作2b:消息递归(ecursion)
因此,似乎 eteration 和 ecursion 是Crockford自己发明和定义的术语,用于在E Programming Language的上下文中引用消息迭代和递归,为编写分布式应用程序的开发人员在Java之上设计。
语言被称为 E 的事实可能是给出其特定迭代和递归风格所选术语的理由(** e * teration *和** e *** cursion *)。
如果Javascript的背景,Crockford在谈话Crockford on JavaScript -- Scene 6: Loopage中解释术语 eteration ,从分钟 30:40开始:
迭代意味着将任务分成多个转弯,以便在每个转弯上 在底部进行迭代,而不是通过传统的循环 我们称之为
setTimeOut
的循环,传递一个导致它的函数 我们要做下一个迭代。这意味着转弯将是 简短 - 转弯只有一次转换 - 我们可以这样做 我们想要的很多事情,而不是锁定事件循环。
结果是,如果需要太长时间,阻塞接口而不是紧密循环, eteration 会调度循环的每一步,在一个仅阻塞接口的链中步骤执行,而不是步骤之间。这使得可以在与接口相同的线程中执行长时间运行的任务(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
,一个显示正在进行的迭代的索引,另一个显示文本接口仍然响应!每个试用我按下按钮。从代码中可以看出,迭代步骤按setTimeout
的某个时间间隔进行调度,允许用户进行交互并进行处理。因此,当用户点击按钮并触发第二个div的更新时,迭代步骤将继续运行,保持页面的响应性,同时在其必须执行的工作(在这种情况下,仅显示索引)中实现真正的进展。