美文网首页
编程中很少思考的问题(一)

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

作者: 纸简书生 | 来源:发表于2017-01-13 10:27 被阅读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经过解析之后就能被计算机理解了。

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

    解释器和编译器的区别

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

    他们之间的对比图


    浏览器的如何工作

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

    浏览器主要构成:



    最为重要的是其中的:

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

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


    下面这几段来至翻译:

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

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

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

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

    webkit解析主流程:


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

    未完待续...

    相关文章

      网友评论

          本文标题:编程中很少思考的问题(一)

          本文链接:https://www.haomeiwen.com/subject/vdzjbttx.html