Evaluate之迷思
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 expressionsj
,10
,5*i
,10 + 5*i
andj = 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加载网页的过程:
- 当用户输入网页URL的时候,WebKit调用其资源加载器加载该URL对应的网页。
- 加载器依赖网络模块建立连接,发送请求并接受答复。
- WebKit接收到各种网页或者资源的数据,其中某些资源可能是同步或异步获取的。
- 网页被交给HTML解释器转变成一系列的词语(Token)。
- 解释器根据词语构建节点(Node),形成DOM树。
- 如果节点是JavaScript代码的话,调用JavaScript引擎解释并执行。
- JavaScript代码可能会修改DOM树的结构。
- 如果节点需要依赖其他资源,例如图片、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”么?(笑)。
参考资料
- What is the difference between execution and evaluation?
- The Glossary of Human Computer Interaction
- 浅谈script标签的defer和async
Evaluate之迷思相关推荐
- 机器学习研究的七个迷思
作者 Oscar Chang 总结了机器学习研究中的七大迷思,每个问题都很有趣,也可能是你在研究机器学习的过程中曾经遇到过的"想当然"问题.AI 前线对这篇文章进行了编译,以飨读者 ...
- Gartner:解开关于人工智能的六个迷思
来源:Gartner "人工智能将自动执行所有工作并让人类失业.""人工智能只是一种虚构的技术.""机器人将占领整个世界." 围绕人工智能的 ...
- 赠书:面向对象的两大迷思,再给你们解答一次
面向对象是目前最流行的一种程序设计和实现思想.无论从事企业级开发.互联网应用开发,还是手机软件开发,都会用到面向对象的技术. 在主流的编程语言中,C++.Java.C#.PHP.Python等都是支持 ...
- 软件项目管理0709:一个项目经理对产品方案的迷思
软件项目管理0709:一个项目经理对产品方案的迷思已经两周了,我一直被产品方案折磨着,新领导入职之后由于公司产品经理的缺失,领导让我做一下自己的项目的简单的产品方案的ppt,但是反复修改,总是有这样那 ...
- 绝非偶然 苹果iPhone领先5年背后的迷思 【推荐】
今天看到一个好的文章,[绝非偶然 苹果iPhone领先5年背后的迷思],地址如下: http://www.chinamac.com/2010/1208/58274.html 1 团队 2 技术 3 不 ...
- 全局中断_实时性迷思(3)——80%时间屏蔽了中断,实时性还有救么?
[写在前面的话] 在本系列的第一篇文章<实时性迷思(1)--快是优点么?>中,我们介绍了实时性的基本模型: 并得出两个重要的结论: 实时性只关注"是否能在实时性窗口内完成对应事件 ...
- 私有云之迷思:未来是什么?
本文讲的是私有云之迷思:未来是什么?,[编者的话]非常好的一篇文章,作者从OpenStack目前的困境讲起,聊到了私有云的产生背景,进而介绍了云计算的发展史.从云计算诞生的初衷以及现在流行的分布式应用 ...
- IT从业者的迷思与求解之道——座谈会实录摘选
本次座谈会于上周六开始,由于网络原因,很多国内的小伙伴们没有能够连进去,挺遗憾的.所以我整理了本次座谈会的部分内容,希望能对大家有所帮助. 洞察力 主持人:大家好我们来自开源社群,今天举行在线it社区 ...
- IT从业的迷思与破解之道(更新)
我只是单纯做技术的程序员,什么靠微信广告攒钱这些,跟我没有半毛钱关系, 初衷很简单,只重视正三观的正确技术知识分享 在这到处都是线上培训,付费知识的社群里,随便搜个词都有您想要的内容哪轮到我们. 技术 ...
最新文章
- C篇(一) 用Codeblocks建立一个C的工程
- 使用Delphi命名空间
- portainer 启动mysql_Docker管理工具Portainer
- LL-verilog语法:case用法
- kotlin 初始化数组
- javascript 中文排序 localeCompare
- 邮件服务器两种协议,邮件服务器协议
- Java讲课笔记18:异常处理
- (xd mac直装版)支持m1完美支持m1完整详细教程
- NDK-JNI实战教程(二) JNI官方中文资料
- [转载]Mapx常见问题
- H5 活动利用Canvas把用户信息和二维码合并到图片内。
- 解决高并发(数据库锁机制)
- 大气压力换算公式_压强单位bar,psi,pa,mpa,kg换算公式
- JavaScript 汉字与拼音互转终极方案 附JS拼音输入法
- Python量化学习笔记04——量化投资——以Python为工具 Part01-C04
- 奈奎斯特定理和香农定理解释
- Linux、Qt等安装镜像下载--清华大学开源软件镜像站
- java基础知识点、面试选择题归纳整理
- 微信小程序底部弹窗(半屏弹窗)---WeUI组件使用
热门文章
- 微信小程序软件测试junit,微信小程序兼容性能测试方法
- 解决Win10更新后兼容性助手提示VMware虚拟机无法在Windows上运行的问题
- 寒江独钓 第二章 课后习题
- 传奇人物《周兴和》书连载30 成功背后的陷阱
- JSP核心——分页查询
- [LaTex报错解决]Unicode character , (U+FF0C)
- 曼哈顿算法公式_距离计算方法总结 | Public Library of Bioinformatics
- 二维码是如何设计出来的?
- 泰克MDO3104示波器_六合一示波器_无限多功能
- Eclipse设置自动保存