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

2017-01-13  本文已影响83人  纸简书生

对编程语言的基本理解

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

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

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

来看一个简单的例子: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经过解析之后就能被计算机理解了。

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

解释器和编译器的区别

他们之间的对比图


浏览器的如何工作

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

浏览器主要构成:



最为重要的是其中的:

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


下面这几段来至翻译:

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

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

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

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

webkit解析主流程:


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

未完待续...

上一篇下一篇

猜你喜欢

热点阅读