evaluate这个词到底是什么意思?按照翻译的解释:

form an idea of the amount, number, or value of; assess.

实在是有点抽象。在应用中,感觉最常见的意思大概就是“评估”了。不过,在数学里,它是“求值”,求出某个表达式的值(区别于solve,solve是解方程的“解”),对应于”value of“;在人机交互里,这个意思有点接近于评估,但是重点在让行为符合用户的精神模型,满足易学性,让用户能够顺利地“理解”系统功能,也是一个form idea的过程;在个别地方,还有隐含的近似于“赋值”的意思,不过这个多半就是意译了。语言么,总要有点只可意会不可言传的东西在里面。

对于JavaScript脚本来说,在parse解析之后,execute执行之前,还有一个evaluate的过程。那么,这个evaluate是什么呢?读了一大堆资料,总觉得对于外国人来说,这个词的意思是常识……不过我注意到,evaluate的同义词里,居然有一个analyze。也就是说,evaluate居然有一个隐藏的“分析”的意思。后来,我在Stack Overflow上看到了这么一段:

When a statement is executed then it comes to the action of evaluation of its expressions. First execution takes place and then evaluation.

In the snippet

int i = 5, j;
j = 10 + 5*i;

when the statement j = 10 + 5*i; is executed then evaluation of expressions j, 10, 5*i, 10 + 5*i and j = 10 + 5*i takes place. Note that first three can be evaluated in any order.

虽然他这里的evaluate似乎指的还是表达式求值,但是倒是提醒我了。我们知道,编译语言在执行之前,会经过词法分析、语法分析、代码生成的阶段。JavaScript事实上是编译语言,只不过是编译后立即执行而已,显然也会经历这三个阶段。因为词法分析阶段进行分词tokenize,语法分析阶段形成抽象语法树AST,也就是parse的过程;那么,evaluate对应的应该是代码生成,也就是将AST转换成可执行代码这个过程。虽然没有这么简单,因为JavaScript引擎(最著名的要数V8了吧)必然会有属于自己的性能优化过程;不过从大体来说应该是这样。

事实上,在《WebKit技术内幕》一书中提到了Chrome加载网页的过程:

  1. 当用户输入网页URL的时候,WebKit调用其资源加载器加载该URL对应的网页。
  2. 加载器依赖网络模块建立连接,发送请求并接受答复。
  3. WebKit接收到各种网页或者资源的数据,其中某些资源可能是同步或异步获取的。
  4. 网页被交给HTML解释器转变成一系列的词语(Token)。
  5. 解释器根据词语构建节点(Node),形成DOM树。
  6. 如果节点是JavaScript代码的话,调用JavaScript引擎解释并执行。
  7. JavaScript代码可能会修改DOM树的结构。
  8. 如果节点需要依赖其他资源,例如图片、CSS、视频等,调用资源加载器来加载他们,但是他们是异步的,不会阻碍当前DOM树的继续创建;如果是JavaScript资源URL(没有标记异步方式),则需要停止当前DOM树的创建,直到JavaScript的资源加载并被JavaScript引擎执行后才继续DOM树的创建。

在这一点上,我和这位的观点是一致的:如果加了async属性就相当于单独开了一个线程,而defer是和将<script>放到<body>底部一样的效果。

打开Chrome的开发者工具,在performance的Bottom-Up标签里能看到整个网页加载的全过程。可以看到,的确如此。compile的过程中有evaluate:

这里的evaluate可能更接近analyze的意思,进行了语法分析。这个阶段可能会修改DOM,所以会有Parse HTML和appendChild来修改DOM的过程。除此之外,还有一个单独的evaluate阶段:

这个阶段应该对应的就是代码生成了。

而且,有时候会看到,词法分析阶段会承担evaluate的一部分职责。这个我觉得是因为分词结束后,有一部分代码已经是可执行的了,没有必要进一步转换,可以直接生成可执行代码。至于为什么Parse HTML的时候也会有evaluate,是因为会有HTML内嵌的script;而且,script一直是内嵌在HTML里的,两者密不可分。

所以,如果要我给evaluate一个翻译,我想叫它“生成”。从大体上来看,这个解释是能够对应于analyze这个同义词的,而且也还算符合assess、form idea的定义;生成可执行代码,不算是“form an idea of the code”么?(笑)。

参考资料
  1. What is the difference between execution and evaluation?
  2. The Glossary of Human Computer Interaction
  3. 浅谈script标签的defer和async

Evaluate之迷思相关推荐

  1. 机器学习研究的七个迷思

    作者 Oscar Chang 总结了机器学习研究中的七大迷思,每个问题都很有趣,也可能是你在研究机器学习的过程中曾经遇到过的"想当然"问题.AI 前线对这篇文章进行了编译,以飨读者 ...

  2. Gartner:解开关于人工智能的六个迷思

    来源:Gartner "人工智能将自动执行所有工作并让人类失业.""人工智能只是一种虚构的技术.""机器人将占领整个世界." 围绕人工智能的 ...

  3. ​赠书:面向对象的两大迷思,再给你们解答一次

    面向对象是目前最流行的一种程序设计和实现思想.无论从事企业级开发.互联网应用开发,还是手机软件开发,都会用到面向对象的技术. 在主流的编程语言中,C++.Java.C#.PHP.Python等都是支持 ...

  4. 软件项目管理0709:一个项目经理对产品方案的迷思

    软件项目管理0709:一个项目经理对产品方案的迷思已经两周了,我一直被产品方案折磨着,新领导入职之后由于公司产品经理的缺失,领导让我做一下自己的项目的简单的产品方案的ppt,但是反复修改,总是有这样那 ...

  5. 绝非偶然 苹果iPhone领先5年背后的迷思 【推荐】

    今天看到一个好的文章,[绝非偶然 苹果iPhone领先5年背后的迷思],地址如下: http://www.chinamac.com/2010/1208/58274.html 1 团队 2 技术 3 不 ...

  6. 全局中断_实时性迷思(3)——80%时间屏蔽了中断,实时性还有救么?

    [写在前面的话] 在本系列的第一篇文章<实时性迷思(1)--快是优点么?>中,我们介绍了实时性的基本模型: 并得出两个重要的结论: 实时性只关注"是否能在实时性窗口内完成对应事件 ...

  7. 私有云之迷思:未来是什么?

    本文讲的是私有云之迷思:未来是什么?,[编者的话]非常好的一篇文章,作者从OpenStack目前的困境讲起,聊到了私有云的产生背景,进而介绍了云计算的发展史.从云计算诞生的初衷以及现在流行的分布式应用 ...

  8. IT从业者的迷思与求解之道——座谈会实录摘选

    本次座谈会于上周六开始,由于网络原因,很多国内的小伙伴们没有能够连进去,挺遗憾的.所以我整理了本次座谈会的部分内容,希望能对大家有所帮助. 洞察力 主持人:大家好我们来自开源社群,今天举行在线it社区 ...

  9. IT从业的迷思与破解之道(更新)

    我只是单纯做技术的程序员,什么靠微信广告攒钱这些,跟我没有半毛钱关系, 初衷很简单,只重视正三观的正确技术知识分享 在这到处都是线上培训,付费知识的社群里,随便搜个词都有您想要的内容哪轮到我们. 技术 ...

最新文章

  1. C篇(一) 用Codeblocks建立一个C的工程
  2. 使用Delphi命名空间
  3. portainer 启动mysql_Docker管理工具Portainer
  4. LL-verilog语法:case用法
  5. kotlin 初始化数组
  6. javascript 中文排序 localeCompare
  7. 邮件服务器两种协议,邮件服务器协议
  8. Java讲课笔记18:异常处理
  9. (xd mac直装版)支持m1完美支持m1完整详细教程
  10. NDK-JNI实战教程(二) JNI官方中文资料
  11. [转载]Mapx常见问题
  12. H5 活动利用Canvas把用户信息和二维码合并到图片内。
  13. 解决高并发(数据库锁机制)
  14. 大气压力换算公式_压强单位bar,psi,pa,mpa,kg换算公式
  15. JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
  16. Python量化学习笔记04——量化投资——以Python为工具 Part01-C04
  17. 奈奎斯特定理和香农定理解释
  18. Linux、Qt等安装镜像下载--清华大学开源软件镜像站
  19. java基础知识点、面试选择题归纳整理
  20. 微信小程序底部弹窗(半屏弹窗)---WeUI组件使用

热门文章

  1. 微信小程序软件测试junit,微信小程序兼容性能测试方法
  2. 解决Win10更新后兼容性助手提示VMware虚拟机无法在Windows上运行的问题
  3. 寒江独钓 第二章 课后习题
  4. 传奇人物《周兴和》书连载30 成功背后的陷阱
  5. JSP核心——分页查询
  6. [LaTex报错解决]Unicode character , (U+FF0C)
  7. 曼哈顿算法公式_距离计算方法总结 | Public Library of Bioinformatics
  8. 二维码是如何设计出来的?
  9. 泰克MDO3104示波器_六合一示波器_无限多功能
  10. Eclipse设置自动保存