《JavaScript核心概念及实践》——第1章 概述 1.1 JavaScript简史

第1章 概述

1.1 JavaScript简史

20世纪90年代,在早期的Web站点上,所有的网页内容都是静态的。所谓静态是指除了点击超链接外,你无法通过任何方式同页面进行交互,比如让页面元素接受事件,修改字体等。但是人们又迫切地需要一种方式来打破这个局限,于是到了1996年,网景(Netscape)公司开始研发一种新的语言Mocha,并将其嵌入到自己的浏览器Netscape中。这种语言可以通过操纵DOM(Document Object Model,文档对象模型)来修改页面,并加入了对鼠标事件的支持。Mocha使用了C的语法,但是设计思想上主要从函数式语言Scheme那里获得了灵感。当Netscape 2发布的时候,Mocha被改名为LiveScript,当时可能是想让LiveScript为Web页面注入更多的活力。后来,考虑到这个脚本语言的推广,网景采取了一种宣传策略,将LiveScript更名为JavaScript,目的是为了跟当时非常流行的面向对象语言Java发生暧昧的关系。这种策略显然颇具成效,以至于到现在很多初学者还会为JavaScript和Java的关系而感到困惑。

JavaScript取得成功了之后,确实为页面注入了活力,微软也紧接着开发自己的浏览器脚本语言,一个是基于BASIC语言的VBScript,另一个是跟JavaScript非常类似的Jscript。但是由于JavaScript已经深入人心,所以在随后的版本中,微软的IE几乎是将JavaScript作为一个标准来实现。当然,两者仍然有不兼容的地方。1996年后期,网景向欧洲计算机厂商协会(ECMA)提交了JavaScript的设计,以申请标准化,ECMA去掉了其中的一些实现,提出了ECMA-262标准,并确定JavaScript的正式名字为ECMAScript,但是JavaScript的名字已经深入人心,故本书中仍沿用JavaScript这个名字。

1.1.1 动态网页
Web页面在刚开始的时候,是不能动态修改其内容的。要改变一个页面的内容,需要先对网站上的静态HTML文件进行修改,然后需要刷新浏览器。后来出现的JSP、ASP等服务器端语言可以为页面提供动态的内容,但是如果没有JavaScript则无法在服务器返回之后动态地在前端修改页面,也无法有诸如鼠标移上某页面元素则高亮该元素之类的效果,因此JavaScript的出现大大丰富了页面的表现,提高了用户体验。

而当Ajax流行起来之后,更多的非常绚丽的Web应用涌现了,而且呈越来越多的趋势,如Gmail,Google Map,Google Reader,Remember the milk,Facebook等优秀的Web 2.0应用,都大量使用了JavaScript以及基于JavaScript技术的Ajax。

这些优秀的Web 2.0应用提供动态的内容,客户端可以局部更新页面上的视觉元素,比如对地图的放大/缩小,新邮件到来后的提醒等。用户体验较静态页面得到了很大的提升。事实上,后期的很多应用均建立在B/S架构上,因为HTML构筑UI的成本较桌面开发低。因此基于Web的应用开始占有一定的份额,正在逐步替换C/S架构的桌面应用。

动态网页的好处在于,客户端的负载较小,只需要一个浏览器即可,主要的负担在服务器端,这就节约了客户端的开发成本。但是前端页面正在向着复杂化的方面发展,随着前端的MVC框架的发展(backbone.js,javascriptMVC等),JavaScript正在变得更加复杂,甚至在一些互联网应用中,前端代码的代码量已经和后端的代码量相当。一个典型的模型是:后台服务提供RESTFul形式的API,以提供对资源的所有操作,而前端则完全独立为一个应用程序,仅把后台程序作为数据源。

1.1.2 浏览器之战
1994年网景公司成立,并推出了自己的浏览器的免费版本Netscape,很快就占有了浏览器市场。到了1995年,微软公司开始加入,并很快发布了自己的Internet Explorer 1.0。在随后的几年间,网景和微软公司不停地发布新版本的浏览器,支持更多的新功能。很快,这两者的目标就不是如何做好浏览器,而是在对手擅长的方面压制对方。比如,网景的浏览器Netscape标榜速度快,IE就要开发出比网景更快的浏览器,而对自身的安全漏洞,渲染能力等方面放任自流。这样纯粹为了竞争而竞争,对广大的用户来说无疑是非常不利的事情。但是一直到1997年,网景的浏览器Netscape份额大概在72%,而IE只占到18%。

但是,IE在随后的版本IE4.0的时候开始支持W3C的标准,并且在网页的动态性方面加入了很大的支持。事实上,这时候的网景已经不敌慢慢崛起的微软帝国了,微软利用自己的操作系统Windows,在其中捆绑了IE浏览器,而且完全免费。这样,IE的市场占有率开始超过Netscape。当出现一家独大的场面之后,标准化就显得步履维艰了,开发人员开始只为IE浏览器编写代码,因为不需要在其他任何浏览器上运行,所有的网页都很可能只能在IE下运行,或者只能在IE下效果才可以得到保证。

1998年,网景的Netscape开放了源码,分散在世界各地的开发人员开始贡献代码和补丁,使得这个浏览器变得越来越出色。到了2004年,Firefox,作为这个项目中的一个产品,推出了1.0版本。这个以Mozilla为基础的浏览器才慢慢开始发展。一方面,捆绑在Windows XP系统中的IE6.0漏洞百出,大量的蠕虫病毒都会攻击IE浏览器,而Firefox则没有这方面的问题,安全且高效。因此从2006年到2008年,Firefox的市场占有率开始回升,IE的平均占有率大约为85%,Firefox平均占有率为15%。而某些地区,如在欧洲,Firefox的占有率高达20%。

到了2009年,由于反垄断法及开源项目的影响,Windows 7不再捆绑IE浏览器,这样,用户可以有权利选择自己需要的浏览器,但这并不意味着Firefox胜出,IE落败。事实上,这更促进了其他的浏览器如Safari、Opera、Chrome的发展。

一些“小众”的浏览器正在变得越来越流行,并占据了相当的市场份额,比如Firefox和Chrome,在很多场景下Chrome甚至已经超过了IE的份额。

时间: 2024-08-03 09:29:29

《JavaScript核心概念及实践》——第1章 概述 1.1 JavaScript简史的相关文章

《JavaScript核心概念及实践》——1.3 JavaScript应用范围

1.3 JavaScript应用范围 当JavaScript第一次出现的时候,是为了给页面带来更多的动态,使用户可以与页面进行交互.虽然JavaScript在Web客户端取得了很大的成功,但是ECMA标准并没有局限其应用范围.事实上,现在的JavaScript大多运行于客户端,但是仍有部分运行于服务器端,如Servlet.ASP等.当然,JavaScript作为一个独立的语言,同样可以运行在其他的应用程序中,比如Java版的JavaScript引擎Rhino.C语言版的SpiderMonkey等

《JavaScript核心概念及实践》——第2章 基本概念 2.1 数据类型

第2章 基本概念 本章将聚焦于JavaScript中的基本概念,这些概念与传统语言有比较大的不同,因此单独列出一章来做专门描述.理解本章的概念对书中后续章节的概念,代码的行为等会有很大的帮助,读者不妨花比较多的时间阅读本章,即使你对JavaScript已经比较熟悉,也建议通读本章. 本章主要讲述JavaScript中的数据类型(基本类型与引用类型).变量(包括变量的作用域).操作符(主要是一些较为常见,但是不容易从字面上理解的操作符).由于JavaScript中的"一切皆对象",在掌握

《JavaScript核心概念及实践》——1.2 JavaScript语言特性

1.2 JavaScript语言特性 JavaScript是一门动态的.弱类型.基于原型的脚本语言.在JavaScript中"一切皆对象",在这一方面,它比其他的面向对象的语言来得更为彻底.即使作为代码本身载体的函数(function),也是对象,数据与代码的界限在JavaScript中已经相当模糊.虽然它被广泛应用在Web客户端,但是其应用范围远远未局限于此.下面就这几个特点分别介绍. 1.2.1 动态性动态性是指,在一个JavaScript对象中,要为一个属性赋值,我们不必事先创建

《JavaScript核心概念及实践》——2.3 运算符

2.3 运算符 运算符,通常是容易被忽略的一个内容,但是一些比较古怪的语法现象仍然可能需要用到运算符的结合率或者其作用来进行解释.JavaScript中,运算符是一定需要注意的地方,有很多具有JavaScript编程经验的人仍然免不了被搞得晕头转向. 我们在这一节主要讲解这样几个运算符,诸如算术运算.位运算等和其他的主流程序设计语言类似,在这里不做讨论. 2.3.1 中括号运算符([]) 中括号([])运算符可用在数组对象和对象上,从数组中按下标取值. var array = ["one&quo

《Storm企业级应用:实战、运维和调优》——第3章 核心概念和数据流模型

第3章 核心概念和数据流模型 本章从细节入手,了解Storm的核心概念,包括Stream.Spout.Bolt.Tuple.Task.Worker.Stream Grouping和Topology.Stream是被处理的数据,Spout是数据源,Bolt处理数据,Tuple是数据单元,Task是运行Spout或Bolt中的线程,Worker是运行这些线程的进程,Stream Grouping规定了Bolt接收何种类型数据作为输入.Topology是由Stream Grouping连接起来的Spo

Docker技术入门与实战(第2版)2.1 核心概念

核心概念与安装配置 本章首先介绍Docker的三大核心概念. 镜像(Image) 容器(Container) 仓库(Repository) 只有理解了这三个核心概念,才能顺利地理解Docker容器的整个生命周期. 随后,笔者将介绍如何在常见的操作系统平台上安装Docker,包括Ubuntu.CentOS.MacOS和Windows等主流操作系统平台. 2.1 核心概念 Docker的大部分操作都围绕着它的三大核心概念--镜像.容器和仓库而展开.因此,准确把握这三大核心概念对于掌握Docker技术

《Spark大数据分析:核心概念、技术及实践》一 第2章 Scala编程

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第2章,第2.1节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 第2章 Scala编程 Scala是当前热门的现代编程语言之一.它是编程语言界的凯迪拉克.它是一门强大且优美的语言.学会了它,对你的职业生涯大有裨益. 用不同的编程语言都可以编写大数据应用程序,比如Java.Python.C++.Scala等.Hadoop本身就是用J

《Spark大数据分析:核心概念、技术及实践》大数据技术一览

本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1节,作者穆罕默德·古勒(Mohammed Guller)更多章节内容可以访问"华章计算机"公众号查看. 大数据技术一览 我们正处在大数据时代.数据不仅是任何组织的命脉,而且在指数级增长.今天所产生的数据比过去几年所产生的数据大好几个数量级.挑战在于如何从数据中获取商业价值.这就是大数据相关技术想要解决的问题.因此,大数据已成为过去几年最热门的技术趋势之一.一些非常活跃的开源项目都与大数据

《Spark大数据分析:核心概念、技术及实践》一1.2 数据序列化

  本节书摘来自华章出版社<Spark大数据分析:核心概念.技术及实践>一书中的第1章,第1.2节,作者[美] 穆罕默德·古勒(Mohammed Guller),更多章节内容可以访问"华章计算机"公众号查看. 1.2 数据序列化 数据有自己的生命周期,独立于创建或使用它的程序.大多数情况下,数据比创建它的应用存活得更久.一般来说,数据保存在硬盘上.有时,也会通过网络把数据从一个应用发送给另一个应用. 在硬盘上存储或通过网络发送的数据格式与数据在内存中的格式是不一样的.把内存