JavaScript浏览器发展史
Web发展史
-
Mosaic,是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器。于1993年问世。
-
1994年4月,马克.安德森和Silicon Graphics(简称为 SGl,中译为“视算科技"或“硅图")公司的创始人吉姆·克拉克(Jim Clark)在美国加州设立了“Mosaic Communication Corporation”。
-
Mosaic公司成立后,由于伊利诺伊大学拥有Mosaic的商标权,且伊利诺伊大学已将技术转让给Spy Glass公司,开发团队必须彻底重新撰写浏览器程式码,且浏览器名称更改为Netscape Navigator,公司名字于1994年11月改名为“Netscape Communication Corporation”,此后沿用至今,中译为“网景”。微软的Internet Explorer及Mozilla Firefox等,其早期版本皆以Mosaic为基础而开发。微软随后买下Spy Glass公司的技术开发出Internet Explorer浏览器,而Mozilla Firefox则是网景通讯家开放源代码后所衍生出的版本。
JS历史
-
JavaScript作为Netscape Navigator浏览器的一部分首次出现在1996年。它最初的设计目标是改善网页的用户体验。
-
作者:Brendan Eich
-
期初JavaScript被命名为,LiveScript,后因和Sun公司合作,因市场宣传需要改名JavaScript。后来Sun公司被Oracle收购,JavaScript版权归Oracle所有。
浏览器组成
主流浏览器 | 内核 |
---|---|
IE | trident |
chrome | webkit/blink(blink04年已消失) |
firefox | Gecko |
0pera | presto |
Safari | webkit |
百度、搜狗、360、UC、QQ浏览器等不是主流浏览器是因为没有自己的内核。
-
shell部分
-
内核部分(看不到的,处理代码的部分。中国没有自己的内核)
绘制网页的过程,从上往下
内核部分 = { 渲染引擎(语法规则和渲染 ) j s 引擎 其他模块 内核部分= \begin{cases} 渲染引擎(语法规则和渲染)\\ js引擎\\ 其他模块 \end{cases} 内核部分=⎩ ⎨ ⎧渲染引擎(语法规则和渲染)js引擎其他模块
js引擎
-
2001年发布ie6,首次实现对js引擎的优化和分离。
-
2008年Google发布最新浏览器Chrome,它是采用优化后的javascript引擎,引擎代号V8,因能把js代码直接转化为机械码来执行,进而以速度快而闻名。
-
后Firefox也推出了具备强大功能的js引擎
-
Firefox3.5 TraceMonkey (对频繁执行的代码做了路径优化)
-
Firefox4.0 JeagerMAonkey
js的逼格
-
解释型语言—(不需要编译成文件)跨平台
-
单线程
-
ECMA标注—为了取得技术优势,微软推出了JScript,CEnvi推出ScriptEase,与JavaScript同样可在浏览器上运行。为了统一规格JavaScript兼容于ECMA标准,因此也称为ECMAScript。
翻译分为两种:
-
编译型语言:
通篇翻译(面向对象)(C、C++)
(比如java生成.java(翻译之后是.class文件)和C生成.obj文件)
(看完所有代码之后通篇翻译,翻译完之后形成一个翻译完的文件,程序最终执行这个翻译完的文件)
.java – javac – > 编译–> .class — > jvm --解释执行(java是oak语言)
-
解释型语言:
(面向过程)(javascript、php)
(看一行翻译一行,翻译一行执行一行。)
-
两种翻译各自的优缺点
通篇编译比较快的原因:抄写是全看完写快还看一个字写一个字快?
C和C++不能跨平台,Java可以。(win系统生成的文件在Linux或者Mac中不能编译。)
优缺点 { 编译型语言 ( 面向对象 ) { 优点 : 编译速度快 缺点 : 移植型不好 ( 不跨平台 ) 解释型语言 ( 面向过程 ) { 优点 : 移植型不好 ( 不跨平台 ) 缺点 : 编译速度慢一点点 优缺点 \begin{cases} 编译型语言(面向对象)\begin{cases} 优点:编译速度快\\ 缺点:移植型不好(不跨平台)\\ \end{cases}\\ 解释型语言(面向过程)\begin{cases} 优点:移植型不好(不跨平台)\\ 缺点:编译速度慢一点点\\ \end{cases}\\ \end{cases} 优缺点⎩ ⎨ ⎧编译型语言(面向对象){优点:编译速度快缺点:移植型不好(不跨平台)解释型语言(面向过程){优点:移植型不好(不跨平台)缺点:编译速度慢一点点
线程
线程 { 单线程:同一时间只能做一件事儿 多线程:同一时间可以做多件事儿 线程 \begin{cases} 单线程:同一时间只能做一件事儿\\ 多线程:同一时间可以做多件事儿 \end{cases} 线程{单线程:同一时间只能做一件事儿多线程:同一时间可以做多件事儿
同步-异步
理解 { 计算机里面的同步是生活中的异步。 { 计算机中 { 同步 : 同一时间只能做一件事情 异步 : 同时做很多件事情 ( 同时执行 ) 计算机里面的异步是生活中的同步。 { 生活中 { 同步 : 同时做很多件事情 异步 : 同一时间只能做一件事情 理解 \begin{cases} 计算机里面的同步是生活中的异步。 \begin{cases} 计算机中\begin{cases} 同步:同一时间只能做一件事情\\ 异步:同时做很多件事情(同时执行)\\ \end{cases}\\ \end{cases}\\ 计算机里面的异步是生活中的同步。 \begin{cases} 生活中\begin{cases} 同步:同时做很多件事情\\ 异步:同一时间只能做一件事情\\ \end{cases}\\ \end{cases} \end{cases} 理解⎩ ⎨ ⎧计算机里面的同步是生活中的异步。{计算机中{同步:同一时间只能做一件事情异步:同时做很多件事情(同时执行)计算机里面的异步是生活中的同步。{生活中{同步:同时做很多件事情异步:同一时间只能做一件事情
javascript编译一行执行一行,执行到link标签下载css文件的操作是异步操作。(同时执行)
-
javascript原生的东西只能进行加减乘除、变量、数组等。
-
DOM :操作文档
-
BOM操作浏览器
js执行队列

轮转时间片:类似吃饭
吃一口饭吃一口白菜,再吃一口花菜,直到把饭菜吃完。
把任务一和任务二切成若干个片段,排布顺序完全随机,一个片段一个片段的往javsscript引擎里面送,javascript以一个时间片为一个基准单位去执行这个时间片段,然后把任务一和任务二按照片段执行完。