为什么会有浏览器兼容问题
面对新技术或许 了解它为什么产生,解决什么问题,会怎么发展,如何在现有的工程中进行实践,比讨论它们的优劣更有意义.
首先我们来看看常用的浏览器的诞生.
在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准。
后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步。(2001年推出的古老的IE 6到今天仍然有人在使用!)
没有竞争就没有发展。微软认为IE6浏览器已经非常完善,几乎没有可改进之处,然后解散了IE6开发团队!而Google却认为支持现代Web应用的新一代浏览器才刚刚起步,尤其是浏览器负责运行JavaScript的引擎性能还可提升10倍。
什么是引擎, 百度百科的解释,浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”。 内核, 我们最常打交道的就是看自己的浏览器是基于 IE 某版本的内核去做兼容问题. . 它主要负责对网页语法的解释(如标准通用标记语言下的一个应用HTML、JavaScript)并渲染(显示)网页。所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及页面的格式信息。不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不同内核的浏览器中测试网页显示效果的原因。
至此,看完这段,是不是就明白了 同一套代码,为什么在chrome 上的展示效果与 在 火狐上的展示效果不一样. 还有就是该死的IE 兼容性问题, 都能大致的有所了解.
但是还没完, 我们可以再做一点扩展,故事继续...
先是Mozilla借助已壮烈牺牲的Netscape遗产在2002年推出了Firefox浏览器,紧接着Apple于2003年在开源的KHTML浏览器的基础上推出了WebKit内核的Safari浏览器,不过仅限于Mac平台。
随后,Google也开始创建自家的浏览器。他们也看中了WebKit内核,于是基于WebKit内核推出了Chrome浏览器。 注:(WebKit 是一个开源的浏览器引擎,前身是 KDE 小组的 KHTML,想深入了解的话,请自行度娘 . 哦对了, 同时WebKit 也是苹果Mac OS X 系统引擎框架版本的名称,主要用于Safari,Dashboard,Mail和其他一些Mac OS X程序。注意别搞混了)
Chrome浏览器是跨Windows和Mac平台的,并且,Google认为要运行现代Web应用,浏览器必须有一个性能非常强劲的JavaScript引擎,于是Google自己开发了一个高性能JavaScript引擎,名字叫V8,以BSD许可证开源.
现代浏览器大战让微软的IE浏览器远远地落后了,因为他们解散了最有经验、战斗力最强的浏览器团队!回过头再追赶却发现,支持HTML5的WebKit已经成为手机端的标准了,IE浏览器从此与主流移动端设备绝缘。
我们开始引入下一章节需要了解的话题,你所认知的 javascript , node.js 前端这几年进步太快了,我尝试按照不同方向讨论一下这些技术栈。
脱离浏览器的JavaScript : Node.js
又或者说: 跑在服务器上的JS
我们讨论的JavaScript更多是以浏览器为宿主的ECMAScript,同源的ActionScript以Adobe的Flash作为宿主的。
浏览器中的JavaScript提供了大量与浏览器相关的API。脱离这些特定API看JavaScript,异步是它特别重要的一个特性。Google的V8引擎,让JavaScript的运行时性能大大提升,是Node.js的产生另一个必要的条件。
从上文说的浏览器大战和Node有何关系?
话说有个叫Ryan Dahl的歪果仁,他的工作是用C/C++写高性能Web服务。对于高性能,异步IO、事件驱动是基本原则,但是用C/C++写就太痛苦了。于是这位仁兄开始设想用高级语言开发Web服务。他评估了很多种高级语言,发现很多语言虽然同时提供了同步IO和异步IO,但是开发人员一旦用了同步IO,他们就再也懒得写异步IO了,所以,最终,Ryan瞄向了JavaScript。(注: 高级语言,低级语言,不了解的自行百度)
因为JavaScript是单线程执行,根本不能进行同步IO操作,所以,JavaScript的这一“缺陷”导致了它只能使用异步IO. 选定了开发语言,还要有运行时引擎。这位仁兄曾考虑过自己写一个,不过明智地放弃了,因为V8就是开源的JavaScript引擎。让Google投资去优化V8,咱只负责改造一下拿来用,还不用付钱,这个买卖很划算。
于是在2009年,Ryan正式推出了基于JavaScript语言和V8引擎的开源Web服务器项目,命名为Node.js。虽然名字很土,但是,Node第一次把JavaScript带入到后端服务器开发,加上世界上已经有无数的JavaScript开发人员,所以Node一下子就火了起来。
在Node上运行的JavaScript相比其他后端开发语言有何优势?
最大的优势是借助JavaScript天生的事件驱动机制加V8高性能引擎,使编写高性能Web服务轻而易举。
了解了node.js 最初的产生,那么它的出现是为了解决具体的哪些问题呢,它有什么优缺点以及它适用于什么场景呢?
至于它的优缺点,及适用场景请自行百度.
我们来探讨下, Node.js 给前端带来了什么?
即使在Ajax这种技术风靡全球之后,前端工程师的主要工作曾经也仅局限于浏览器窗口之内。HTML、CSS和JavaScript是前端工程师必须要掌握的三种核心技术,前端同后端的唯一交集仅仅是前端需要确保后端的数据能够以正确合适的格式输出到浏览器上。在某种意义上来说,Web开发有两个UI层,一个是在浏览器里面我们最终看到的,另一个在server端,负责生成和拼接页面。因为传统前端基本上没有办法自主决定server端如何处理数据拼接生成页面,因为数据如何组织,往往是会受到后端工程师所选择的技术框架的影响的,而后端不理解前端的一些需求,所以他们选择的时候也就很少会从前端方便的角度进行考虑。
浏览器里的UI层是完全归前端工程师管的。服务器端的UI层则是前后端都关心的部分,剩下的部分是服务端的底层,诸如数据处理、缓存、权限控制和其他核心模块,这些是归后端管的。我们还是回过头来看我们所关心的server端UI层吧,这一层所做的事情通常是拼页面模板以及处理具体的业务交互逻辑。 所以,传统的前后端分工是由前端负责浏览器,而其他浏览器之外的东东统统归由后端负责。前后端的交集server的UI层也是由后端来主导的。这是目前最主流的一种前后端分工方式。
Node 如何工作?
Node 本身运行 V8 JavaScript。等等,服务器上的 JavaScript?没错,您没有看错。对于只在客户机上使用 JavaScript 的程序员而言,服务器端 JavaScript 可能是一个新概念,但这个概念本身并非遥不可及,因此为何不能在服务器上使用客户机上使用的编程语言?
什么是 V8?V8 JavaScript 引擎是 Google 用于其 Chrome 浏览器的底层 JavaScript 引擎。很少有人考虑 JavaScript 在客户机上实际做了些什么?实际上,JavaScript 引擎负责解释并执行代码。Google 使用 V8 创建了一个用 C++ 编写的超快解释器,该解释器拥有另一个独特特征;您可以下载该引擎并将其嵌入任何应用程序。V8 JavaScript 引擎并不仅限于在一个浏览器中运行。因此,Node 实际上会使用 Google 编写的 V8 JavaScript 引擎,并将其重建为可在服务器上使用。太完美了!既然已经有一个不错的解决方案可用,为何还要创建一种新语言呢?
说白了, Node.js是一个服务器端的JavaScript解释器. 或者说就是跑在服务器上的js. 你可以就把Nodejs当成跟前端交互的api。 nodejs的作用在mvc中相当于C(控制器)
未完待续......