世界上用户量最大的应用软件--浏览器的知识整理

   终于实训完了,在经过了一系列的折腾后,android实训算是圆满完成了。  但是今天在汇报的时候老师问我一个问题,我竟然由于紧张而忘记了。  这在我看来是比较耻辱的,闷闷不乐了好一阵。。 原因在于: 一,自己近来确实很少在很多人面前讲话,况且有老师在,导致紧张。 大脑短暂性空白。   二,基础知识掌握得不够牢靠。  三,放得太松,以为将作品将上去以后就没自己啥事了。。 呵呵~~

   趁着这个闲暇之际,将早前整理在笔记本上的关于浏览器的知识给整理一下方便复习。

  为什么想要系统的学习一下关于浏览器的相关知识呢?  从我们学习的知识看,java知识主要用于网络编程的后端,为前端提供数据支持。   前端自己也零零散散的了解和学习了一些,比如html的使用,js脚本的使用,css样式表的使用。  在使用过程中不免要遇到许许多多的问题,而我们知道,这前端三剑客,都是依托于浏览器这款软件的。   包括有着下一代网页编程之称的三大技术:angular,react,vue, 他们都是要在浏览器这个容器中跑的。    在浏览器中,我们可以导入插件,完成定制化的要求;  可以播放时视频;  可以播放音乐;  可以观看直播;   可以实时聊天;   可以说,在电脑上能够做的,在浏览器都能做。   因为我们与电脑的交互主要通过屏幕;   而浏览器就是早期我们进入互联网的“屏幕”。

   较早的蛮荒年代,也就是众多的计算机语言还在成长,各种协议,各种技术还未成熟的时候,电脑主要是程序员的专用产品,偶尔有些发烧友用来用email沟通。  直到,直到,www万维网协议的发明者: Tim bernerse lee于1990年发明首个网页解释器。(万维网协议是1989年发布)。   1993年万维网协议免费商用。    后来有个公司叫网景(netscape)发明了能够显示多媒体的首个网页浏览器,名称就叫网景浏览器!!   时间是1994年左右!!!  要知道这时候的java才从老东家 awk转化过来,甚至没有正式定名。  所以很多的技术是同时并行进步的。   

   这里就将整个计算机系统发展的各项主要技术的时间线记录一下:

      看到如今这么庞大的互联网,曾经也是从这样一个蛮荒年代走过来的,内心不禁充满了感慨。。  在如今各项技术或者说领域都如此成熟的情况下,我们技术人该何去何从??  谁又能在将来的计算机编年史上添上浓墨重彩的一笔??   反正我知道不学习是肯定不可能的,虽然学习了也很困难,但是充满希望总是没错的。  

     发现又偏离主题了。  今天的任务是整理浏览器的相关知识。。嗯嗯~~~,刚刚已经说到了网景浏览器,算是给浏览器开了一个里程碑,后面不久就出现了其它很多的浏览器厂商,于是就有组织出来制定标准了,毕竟大家只有一起搞才能更好的成长嘛。   于是后来就有了w3c标准,css1,css2.7,css3标准,http1.0,http1.1,html1,0,html2.0,html3.0,html4.0,html4.01,html5; ECMA标准,如ES5,ES6,ES7。  这一切都是要以浏览器为参照对象和载体的。

    浏览器的组成主要有七大部分组成:  分别是:

          用户界面;

          浏览器引擎;

          渲染引擎:  geoko渲染引擎,webkit渲染引擎

          网络

          UI后端

          JS解释器

          存储

     大牛的这篇博客已经写的很详细了,实在是可以当成教科书印下来上课出版的。

     我要理解的是,从它的运行过程来揣测,它的运行机制,或者说它的运行原理。  因为通过实际的经验发现,这种所谓的猜测对我们的成长还是蛮大的,不论对错。  具有一定的预见性的猜测得到验证的时候,那种喜悦是难以言说的。

    以goole浏览器为例,进行实验。

    某次在电脑上将google完全退出,然后启动google浏览器,观察任务管理器:

   多次实验,发现它在启动的时候是默认有六个进程,通过不断的删除实验,发现至少有一个进程是维持 tab界面的,至少有一个进程,通常是初始占内存最大的那个是主线程,至少有一个进程是维持用户界面渲染的进程。

   理由是,当我删除一个进程时,出现上图的界面;  删除主进程,程序退出,所有进程销毁。  结束某个线程的时候,界面被浏览器占领的屏幕部分黑了一下屏,然后又重新绘制上了。   经过多次尝试,发现google浏览器要跑,至少要包括三个进程,主进程,以及用于渲染的进程以及  用于管理上下文的一个进程。

  从进程方面理解有些模糊了,毕竟我们是程序员,不是计算机工程师科学家之类的,我们能关注的应该要落实到线程上。于是在此刻,也就是正在整理笔记这个时候,打开任务管理器,可以发现:

   在只开有一个tab的情况下,具有六个进程,同时,最少的进程都具有三个线程。。。。我不禁疑惑了,如果没记错的话,大牛是说,浏览器有两个线程,一个负责渲染,一个负责处理Js事件???

   回头去看看大牛原文:

     

      看到这个8k,我突然想到自己以前调试后端的时候,可以看到流中缓存的数据为:也是按块划分的。  思考这样的一种场景,用户通过post方法提交了一个几兆的文件,或者说一个图片,那么根据tcp的要求,他也必然是需要分多次传输的。  因此,我们经常遇到的在tomcat后端接收图片的需求,他会在temp文件夹中有个缓存的文件,不论用那种第三方框架,其原理不过如此。。  此外,由这个引发的可能的错误会遇到的是,有时候我们那个缓存允许的大小不够,导致图片上传失败。。 

     

  这里比较奇特的一点是,我们常见的dtd都是定义xml文档规范的,原来html的 规范也是通过dtd定义的。

   这个概念不禁让我想起上课常说的文档流。  这个文档流有啥用呢?  就是在相对布局和绝对布局的时候,理解这个具有重大的意义。

  

  这里的知识,让我想到了我们老师提到过的状态机。而他当时也恰好是以html的解析来解释的。 说到这个状态机,我很自然的想到了运筹学中排队系统中关于 状态转移方程的定义,算是第一次比较深刻的理解 状态 二字。    同时,脑海中又不可不避免的出现了另外两个机:   向量机,自动机。。。     

   向量机这个概念是计算机系统的,用于提高系统并发的机制,提高效率;

   自动机这个概念是计算机语言范畴的,其中有限自动机是正则文法的理论原型,同时也是与正则完全等价的。

    

   最后,总结一下:  

     由于最近在学习android,尤其是实训的时候为了完成任务而较多的去是实现了一些布局的练习。  再加上看了这个文章,感觉浏览器就是一个小型的   操作系统。。。   确实有这个体验,为什么呢?  首先,它提供服务;  其次,它提供了专门的线程,或者说机制使得整个用户周期可用。  举个例子: 在不考虑硬件情况下,浏览器需要管理重绘更新,后台事件的处理,状态的更新维护,一些数据的缓存等;  android 也无非就是完成这些,只不过提供宿主环境的是android系统。    他们二者是相辅相成的关系。  学习android  让自己对事件机制有了一个更好的理解,学习html让自己对布局或者说动画,或者说可视化界面有了更好的理解。

猜你喜欢

转载自blog.csdn.net/qq_36285943/article/details/82558297