编程中很少思考的问题(一)

对编程语言的基本理解

编程语言和人类语言有许多相似之处,就是大家遵从一种公认的约定,通过这种约定达到传递信息的目的。对比人类语言包含的主要要素有:词汇表,语法。

这里自己弄了一份对比表。大致能表达这种意思。

分类 词汇表 语法
人类语言 动词,名词... 主谓宾...
编程语言 数据类型,操作符... 编程规则:比如末尾加分号...

来看一个简单的例子:2+3-1
词汇表包含如下:

INTEGER:0|[1-9][0-9]*

PLUS:+

MINUS:-

这里用正则表达式定义整数

语法通常用BNF格式定义

expression := term operation term

operation := PLUS | MINUS

term := INTEGER | expression

通过上面这样我们差不多就约定了一种交流方式。通过约定这种方式,2+3-1经过解析之后就能被计算机理解了。

对于平时使用的编程语言,基本的设计思路其实就是这样。只不过在词汇表及语法两部分丰富更多。这样就会有一个庞大的组合。

解释器和编译器的区别

  • 解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。
  • 编译器是把源代码整个编译成目标代码,执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多。比如C语言代码被编译成二进制代码(exe程序),在windows平台上执行。

他们之间的对比图


编程中很少思考的问题(一)_第1张图片

浏览器的如何工作

把浏览器和App对应起来看。他们做的事情大部分都是获取数据,然后通过特定的方式展示数据并和用户交互。而浏览器和App最大的区别就是:浏览器是为各式各样的应用程序服务的,而通常情况下App只是为单独的应用程序服务。

浏览器主要构成:


编程中很少思考的问题(一)_第2张图片

最为重要的是其中的:

  • 浏览器引擎- 用来查询及操作渲染引擎的接口
  • 渲染引擎- 用来显示请求的内容,例如,如果请求内容为html,它负责解析html及css,并将解析后的结果显示出来

所涉及的东西确实有点多,
渲染引擎主流程如下:


下面这几段来至翻译:

渲染引擎开始解析html,并将标签转化为内容树中的dom节点。接着,它解析外部CSS文件及style标签中的样式信息。这些样式信息以及html中的可见性指令将被用来构建另一棵树——render树。

Render树由一些包含有颜色和大小等属性的矩形组成,它们将被按照正确的顺序显示到屏幕上。

Render树构建好了之后,将会执行布局过程,它将确定每个节点在屏幕上的确切坐标。再下一步就是绘制,即遍历render树,并使用UI后端层绘制每个节点。

值得注意的是,这个过程是逐步完成的,为了更好的用户体验,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html都解析完成之后再去构建和布局render树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

webkit解析主流程:


编程中很少思考的问题(一)_第3张图片

这里有篇非常不错的英文文档。
How Browsers Work: Behind the scenes of modern web browsers

未完待续...

你可能感兴趣的:(编程中很少思考的问题(一))