【问题标题】:Eteration - explanation and exampleEteration - 解释和示例
【发布时间】:2011-11-03 08:02:57
【问题描述】:

谁能解释一下究竟什么是Eteration并举个例子?

来源:Long running tasksDouglas Crockford 的 YUI 博客

【问题讨论】:

  • 我已经用更多相关信息编辑了我的答案,准确解释了 eteration 是什么以及它在 Javascript 上下文中的使用方式。
  • 我添加了一个代码示例,并附有相关说明。

标签: javascript terminology


【解决方案1】:

最初,我认为这只是 iteration 的拼写错误,因为在网上搜索 eteration 并没有什么显着的结果。

但是,然后,我遇到了references,他说这个词是由 Crockford 本人在他的一次演讲中创造的。
在网上,我唯一能找到解释的地方是他的页面,The Factorial Tutorial,在一篇文章中,在 Act 2 中,作为对代码示例的评论,他说:

Act 2a:消息迭代(eteration)

这似乎是一对相关术语的一部分,因为他的下一个代码示例在不使用堆栈的情况下执行递归,包含该对的另一个成员:

Act 2b:消息递归(ecursion)

因此,eterationecursion 似乎是 Crockford 自己发明和定义的术语,用于指代 E Programming Language 上下文中的消息迭代和递归,设计在 Java 之上为编写分布式应用程序的开发人员提供服务。

语言被称为 E 的事实可能是为其特定迭代和递归风格赋予所选术语(**e***teration* 和 **e***cursion *)。

如果是 Javascript 的上下文,Crockford 解释了术语 eteration 作为谈话的一部分 Crockford on JavaScript -- Scene 6: Loopage,从分钟 30:40 开始:

迭代意味着将一项任务分成多个轮次,以便在每个轮次 迭代,而不是通过传统的循环,在底部 在我们调用setTimeOut的循环中,传递给它一个导致 我们要做下一个迭代。这意味着转弯将是 短——转牌只需要一个迭代——我们可以这样做 根据需要进行多次迭代,而不是锁定事件循环。

结果是,如果时间太长,迭代会安排循环的每个步骤,而不是紧密循环,如果它需要太长时间,则阻塞接口,在一个仅阻塞接口的链中,而实际步骤执行,而不是步骤之间。这使得可以在与接口相同的线程中执行长时间运行的任务(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>

有两个 divs,一个显示正在进行的迭代的索引,另一个在每个 Try Me 按钮上附加文本 The Interface is Still Responsive!按。正如您从代码中看到的那样,迭代步骤由setTimeout 安排一段时间间隔,允许用户交互发生并被处理。因此,当用户单击按钮并触发第二个 div 的更新时,迭代步骤将继续运行,从而保持页面的响应能力,同时完成它必须执行的工作的实际进展(在这种情况下,只是显示索引)。

【讨论】:

  • 也许吧,但这个词是在 JavaScript 和 Nodejs 的上下文中使用的。没有 E 或 Java。
猜你喜欢
  • 2012-11-17
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
相关资源
最近更新 更多