出生就遇浏览器大战,亲爹还不爱,命运坎坷的JavaScript终于苦尽甘来

提起JavaScript,很多开发者应该都很熟悉了,因为这门语言在语言排行榜上常年霸榜;不仅如此,JavaScriptweb开发中占据着举足轻重的地位,开发者众多,数量上已经快要超过Java开发者了,开发社区非常活跃,越来越多的优秀开发框架涌现,比如Vue、React、Angular等,深受企业和开发者们的信赖。

JavaScript

尽管如今的JavaScript发展如此繁荣,但曾经的它可没这么顺利,命运坎坷用来形容一点都不为过。下面就来一起梳理梳理吧!如果小伙伴有更详细的补充,欢迎在评论区留下您的高见!

Mosaic浏览器首发

1990年底,欧洲核能研究组织(CERN)科学家 Tim Berners-Lee,在互联网的基础上发明了万维网(World Wide Web,进而实现了在网上浏览网页文件;因为最开始时候,网页只能在操作系统的终端里浏览,只能使用命令行操作,网页也都是字符,并没有图片,更没有现在美观的样式和动画,不仅操作不方便,更没有使用体验和美观可言;万维网的出现,网页可以通过互联网来访问,使得这种情况得到大大改善。

万维网

1992 年Nombas 公司开发了一种脚本语言: CmmC-minus-minus,中文翻译为C减减,简称 Cmm),尽管Cmm在命名上和C++有些类似,但和C++却是完全不同的语言,Cmm 是一门可以替代宏操作的脚本语言,在语法上与 CC ++ 很高的相似度。

Nombas 公司为Cmm脚本语言开发了运行环境: CEnvi ,通过下载CEnvi ,便能在网页中嵌入Cmm脚本语言,Cmm的出现使得客户端脚本语言有了雏形。尽管后来NombasCmm 的名字改成了 ScriptEase,也仅仅是改了名字,虽然名字叫ScriptEase,但他和JavaScript却没有任何关系,更不是JavaScript语言的源头。

1992年底,美国国家超级电脑应用中心(NCSA)开发了史上第一个浏览器,叫做 MosaicMosaic浏览器不仅可以通过互联网访问网页,同时也可以显示图片,从此网页可以在图形界面的窗口浏览,浏览器时代正式开启。

Mosaic浏览器

Netscape Navigator 时代

1994年10月Mosaic浏览器的核心开发成员马克·安德森(Marc Andreessen吉姆·克拉克(Jim.H.Clark共同创立了Mosaic 公司,目的就是基于 Mosaic 继续开发浏览器。

马克·安德森
吉姆·克拉克

但由于Mosaic 的商标被伊利诺伊大学拥有,并且Mosaic 浏览器的技术已经被转让给了Spyglass公司,所以新成立的Mosaic 公司不久后改名为 Netscape(中文译为网景),并重新编写代码实现了一个新的浏览器,这个新浏览器被取名为 Netscape Navigator,即“导航者”。而它的对内称呼为Mozilla,意为Mosaic杀手。

网景公司

1994年12月Navigator 发布了1.0版,一经发布就取得了巨大成功,在短短的4个月里就占据了 90% 的浏览器市场,短期甚至内成为了默认浏览器;同时,Nombas 也发布了CEnvi 的首个可用版本。

Netscape Navigator

上网慢且贵

由于 Netscape Navigator 的成功,更多的应用开始出现在互联网上,让网上冲浪越来越流行;但此时,大部分因特网用户还仅仅通过 28.8 kbit/s 的调制解调器连接到网络,网速很慢而且上网费很贵,所以当时用户的上网体验不仅不好,而且还很昂贵;

使用体验差

有时候仅仅是简单的表单数据验证,就要与服务器进行多次的往返交互。设想一下,用户填完一个表单,点击提交按钮,等待了 30 秒的处理后,看到的却是一条您的用户名忘记填写的提示,如果表单更大、更复杂,交互过程将会更加漫长,对于用户来说,这个过程太痛苦了。

客户端语言提上日程

网景公司很快也发现了,如果用户忘记填写“用户名”,就点了“发送”按钮,到服务器再发现这一点就太晚了,最好能在表单数据与服务端交互前,就能检测出“用户名”未填写,进而提示用户“请填写用户名”;更是敏感的意识到了,此时的Navigator 浏览器需要一种可以嵌入网页的脚本语言,这种语言运行在浏览器端,可以控制浏览器行为,并且能和服务端交互

于是网景公司便决定开发一门可以Navigator 浏览器中运行的、轻量级的客户端脚本语言,如果此举成功,那么一些普通的用户操作便能放在客户端来执行,进而能大大改善用户操作体验,提高网络应用的运行效率。

互联网刮起了Java 东风

但是又一个问题摆在了网景公司面前,这是一个选择题,有两个可选项:

  • 到底是使用现有的语言来实现,比如:Perl、Python、Tcl、Scheme等;
  • 还是重新开发一门新语言来适应当前的需求;

两个选择各有利弊

第一个选择,使用现有的编程语言:

  • 可以充分利用现有代码库和程序员资源,入门门槛较低;
  • 借助现有语言的市场,可以更容易推广开来;
  • 可能不能完美的实现当下的需求;

第二个选择,重新开发新语言:

  • 能够完美实现当前的使用需求,
  • 需要重新设计语言规范,吸引开发者使用,这需要时间和成本;

到底采用哪一个选择,网景公司内部争执不下,管理层一时也难以下定决心。就在这时,Java 异军突起,这种可以 "一次编写,到处运行" (Write Once, Run Anywhere) 的语言一经发布就大火,广受开发者和企业的青睐。

Java 语言

网景公司管理层也动了心,决定与Sun公司合作,不仅允许Java程序以applet(小程序)的形式,直接在浏览器中运行;甚至还考虑直接将Java作为脚本语言嵌入网页,但由于Java语言过于庞大,并不适合嵌入浏览器中,才不得不放弃。

Java Applet

1995年5月,网景公司做出决策,未来的网页客户端脚本语言必须"看上去与Java足够相似",使得Java程序员能够快速上手,功能不需要太强,语法简单,容易学习,即使是非专业的网页作者也能快速学会;这个决策一出,其实就已经将第一个选择排除了,选择了开发一门新语言。

Brendan Eich 出场

1995年,网景公司找到了公司程序员 Brendan Eich ,任命其为这门新的客户端脚本语言的设计者;但Brendan Eich 的研究方向是函数式编程,他自身也有很强的函数式编程背景,所以对JavaOOP并不感冒;

Brendan Eich - JavaScript 之父

当初网景公司招聘他的目的也是研究Scheme语言作为网页客户端脚本语言的可能性Brendan Eich本人原本以为进入新公司后,将会是研究Scheme语言,可却现在接到这样的任务,自然是不情愿的。

Scheme语言是函数式语言鼻祖 Lisp语言的一种方言,另外一种比较流行的Lisp方言是Common Lisp

1995年5月Brendan Eich 只用了10天,就设计完成了这种语言的第一版;它是一个大杂烩,语法有多个来源,当时的设计思路是:

  • 基本语法:借鉴 C 语言和 Java 语言;
  • 数据结构:借鉴 Java 语言,包括将值分成原始值和对象两大类;
  • 函数的用法:借鉴 Scheme 语言和 Awk 语言,引入闭包,把函数作为语言的核心;
  • 原型继承模型:借鉴 Self 语言(Smalltalk 的一种变种);
  • 正则表达式:借鉴 Perl 语言;
  • 字符串和数组处理:借鉴 Python 语言;

网景公司的这种浏览器脚本语言,最初名字叫做 Mocha,1995年9月改为 LiveScript;

但由于网景公司的整个管理层,都是认准了Java语言的,更想借一下Java的东风,所以同年12月,网景公司与 Sun 公司达成协议,Sun 公司授权网景公司将这门新的语言命名为 JavaScript,改名后的JavaScript更是被网景公司和Sun两家公司联手推出,官方的宣传 :JavaScript 是 Java 的补充,属于轻量级的 Java;所以JavaScript = Java + Script这样的宣传更不是空穴来风。

借此机会,网景公司便将JavaScript申请成为了商标。 这样一来,网景公司可以借助 Java 语言的声势推广JavaScript,而 Sun 公司则将自己的影响力扩展到了浏览器。

仅用10天就设计出的语言,其表现可想而知。在其推出后的很长一段时间内,程序运行都有着各式各样的问题。就连JavaScript的设计者本人Brendan Eich都不喜欢他自己设计的这门语言:

"与其说我爱Javascript,不如说我恨它。它是C语言和Self语言yiyeqing的产物。十八世纪英国文学家约翰逊博士说得好:'它的优秀之 处并非原创,它的原创之处并不优秀。' (the part that is good is not original, and the part that is original is not good.)"

—— Brendan Eich对JavaScript的评价

JavaScript 正式诞生

1995年12月4日,网景公司与 Sun 公司联合发布了 JavaScript 语言,对外宣传 JavaScriptJava 的补充,属于轻量级的 Java,专门用来操作网页,实现动态效果。

JavaScript 正式诞生

JavaScript 和 Java

尽管名字里都有Java,但JavaJavaScript是两种不同的语言,这两种语言有一定的相似性,因为JavaScript的基本语法在设计过程中是借鉴了Java的。

  • Java 是强类型的静态语言,是一门纯面向对象的语言,以类和对象为核心,在Java中没有函数一说,有的只是方法。
  • JavaScript是弱类型的动态语言,在JavaScript 中,语言的函数是一种独立的数据类型,且JavaScript是以函数为核心的,采用基于原型对象(prototype)的继承链。
JavaScript 和 Java

另外,Java 程序要经过编译才能运行,而 JavaScript 语言的运行时解释器已经集成到浏览器中,所以JavaScript 可在浏览器直接运行。

1996年3月Navigator 2.0 浏览器正式内置了 JavaScript 脚本语言。

同年,Netscape Navigator 3.0发布,此版本有分为“Standard Edition”和“Gold Edition”两个版本,两个版本区别在于,后者具备邮件软件和所见即所得的网页编辑程式。

浏览器大战

Netscape 春风得意

1995年开始,万维网慢慢开始被大众认知,受到越来越多的关注。 能够显示图形的Mosaic 浏览器俘获了不少用户的芳心;Netscape Navigator 更是一经发布就占据了超过90%的浏览器市场,一度变成最受欢迎的网络浏览器。这时的Netscape 可谓是春风得意,但是好景不长

IE 浏览器加入

由于微软对互联网发展的误判,轻视了浏览器的发展,使得Netscape Navigator 有机会发展壮大,但后知后觉的微软也看到了浏览器市场发展的前景,开始重视起来,并从Spyglass公司处获得了Mosaic的授权,开发出了自家的浏览器:IE 浏览器1.0,几个月后,IE 浏览器2.0发布,并免费向用户提供;而此时的Netscape Navigator 是收费的。

IE 浏览器

大战一触即发

1995年Netscape Navigator 2.0 发布后,浏览器市场都以网景的JavaScript为标准;微软公司虽然有IE 浏览器,但却没有JavaScript,所以IE浏览器Netscape Navigator 2.0面前不堪一击。

于是,微软便找上了网景,想要收购网景,但春风得意的网景公司自然是不会同意的;微软自然也不会放弃,更不会放任网景做大,紧接着便是全力投入到了IE浏览器新版本的开发中。

1996年8月,微软的IE 3.0发布,同时,微软也开发出了自己的客户端脚本语言:JScript(这个名字怎么看怎么像JavaScript的缩写),在对自家的IE浏览器的宣传上,微软也更是不遗余力;

1997年 IE4.0发布,IE4.0有着更好的W3C标准的实现,更是被捆绑在了Windows中,随Windows系统一同发布;正是这一举措,IE浏览器的市场份额开始暴增;

到了1999年,微软的IE浏览器已经占据了绝大部分浏览器市场,而此时网景公司已被美国在线收购,留下Netscape Navigator在苟延残喘。

至此,第一次浏览器大战以IE大获全胜而告终。

火狐浏览器涅槃重生

1998年,网景深知浏览器大战中的Netscape Navigator败局已定,面对着无法挽回的市场份额,网景公司做了一个重大决定: Netscape Navigator 5.0开源

同年,网景公司成立非营利性组织: Mozilla 基金会,主要负责Netscape Navigator的开源和维护;Mozilla 基金会独立于网景公司运行,所以就算后来网景公司虽被美国在线收购,Mozilla 基金会却能一直独立运作至今。

Mozilla 基金会的手中,Netscape Navigator开放了源代码,分两个分支:

  • 一个是Netscape Navigator,相继推出了Netscape Navigator6、7、8
  • 另一个便是Firefox,一直维护至今;

无论是开源后的Netscape Navigator,还是Firefox,都是基于Gecko渲染引擎来构建的。关于这段故事,还有一部纪录片,叫《奔腾的代码》,主要讲述的就是Netscape Navigator的开源和Firefox(火狐浏览器)的诞生的故事,想要详细了解的同好可以去搜来看看。

开源后的Firefox(火狐浏览器)重新开发了渲染引擎Gecko并且积极拥抱JavaScript标准,无论是在性能,还是用户体验上,都有了极大的提升;不仅是在Windows系统,在Linux系统、Mac系统,也都有着不俗的表现,甚至在Linux系统中,比Chrome浏览器的表现都要好。

优异的性能,再加上在Mozilla 基金会的良好运作下,火狐浏览器逐渐了获得用户认可,原本被IE 浏览器占据的市场逐渐被火狐浏览器夺回。

火狐浏览器

反观IE浏览器,并没有积极适配EcmaScript,始终沉浸在自己的世界中,玩着只有自己的游戏,跟标准越走越远,渐渐被用户抛弃,原本的用户市场也被逐渐被涅槃后的火狐浏览器所取代。

纵观浏览器发展历史,不得不说,历史总是惊人的相似。

WebKit

得益于 KDEKHTMLKJS,苹果公司也开发了自家的JavaScript 引擎:Webkit渲染引擎,苹果公司不仅将Webkit渲染引擎开源免费 ,而且还基于Webkit渲染引擎开发了 Safari 浏览器

Safari 浏览器

V8

谷歌于2008年12月发布了 Chrome 浏览器, 与Safari 浏览器使用相同的 WebKit 渲染引擎和一个名为 V8 引擎。V8使用C++开发,相比其它的JavaScript引擎转换成字节码或解释执行,V8引擎会将JavaScript程序其编译成原生机器码,所以JavaScript程序在V8引擎下的运行速度足以媲美二进制程序。

Chrome 浏览器

不久之后,谷歌便以 Chromium项目开放了Chrome浏览器的源码;新功能会率先在Chromium上实现,稳定后才会应用在Chrome上。

JavaScript 标准化

三个巨头三足鼎立

在微软进入浏览器市场,发布了JScript之后,有 3 种不同的 JavaScript 实现同时存在,分别是:

  1. Netscape Navigator 3中的 JavaScript
  2. IE 中的 JScript
  3. CEnvi 中的 ScriptEase

三个巨头三足鼎立,形成了三分天下之势,网景公司也面临丧失浏览器脚本语言的主导权的局面;而由此导致的版本不兼容问题日益加剧,当时的一个网页程序往往要对三个平台提供不同的实现,开发和维护的成本都越来越高;

ECMA出手拯救JavaScript

1996年11月,网景公司面对着逐渐被微软蚕食的浏览器市场,于是决定将 JavaScript 提交给国际标准化组织 ECMA(European Computer Manufacturers Association),希望 JavaScript 能够成为国际标准,以此抵抗微软。

ECMA接受了这个请求,并决定由39号技术委员会Technical Committee 39)负责制定和审核这个标准,委员会成员由业内各大公司派出的工程师组成,该委员会定期开会,所有的邮件讨论和会议记录,都是公开的。

1997年7月ECMA 组织发布262号标准文件(即:ECMA-262)的第一版,规定了浏览器脚本语言JavaScript的标准,并该语言标准取名为 ECMAScript

之所以不叫 JavaScript,一方面是由于商标的关系,因为JavaSun公司的商标,根据一份授权协议,只有 网景公司可以合法地使用 JavaScript 这个名字,且 JavaScript 已经被 网景公司注册为商标;另一方面是ECMA也想体现ECMAScript并不同于曾经的JavaScriptECMA组织也不同于网景,这样就有利于保证这门语言的开放性和中立性。

完整的JavaScript实现

至此,完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型(DOM),浏览器对象模型(BOM)。 符合ECMA-262 3rd Edition标准的实现有:

  • Microsoft公司的JScript
  • Mozilla的JavaScript-C,后改名为SpiderMonkey
  • Mozilla的Rhino
  • Digital Mars公司的DMDScript
  • Google公司的V8
  • WebKit

需要注意的是,ECMAScript 只用来标准化 JavaScript 语言的基本语法,与部署环境相关的标准都由其他标准规定,比如 DOM 的标准就是由 W3C组织制定的。

ECMA-262 标准后来也获得国际标准化组织 ISO的批准,并以标准号 ISO-16262命名。

ECMAScript 步入正轨

1997年7月ECMAScript 1.0发布,这个版本做了些小改动:支持Unicode标准,对象与平台无关等,其他的特性与网景发布的JavaScript1.1并无二致;

1998年6月ECMAScript 2.0发布,这个版本主要做的是细节优化,没有新功能发布;

1999年12月ECMAScript 3.0版发布,这个版本对JavaScript标准做了大量的修改。修复了包括字符串处理、错误定义和数值输出等一系列问题。新增了对正则表达式、新控制语句、try-catch异常处理的支持。此时的ECMAScript才能算是一门真正的编程语言。

2007年10月ECMAScript 4.0版草案发布,草案的标准跟第3版比起来,几乎是定义了一门新语言;因为草案不仅包含了强类型变量、新的数据结构和继承,还添加了JSON对象、继承的方法和高级属性定义,以及严格模式。由于改动过大,所以4.0草案发布后,遭到了Yahoo、Microsoft、Google等公司的反对。

2008年7月,由于各方争执不下,ECMAScript 4.0 的开发被终止,ECMAScript 4.0中改动较少的一部分被拿出来,作为 ECMAScript 3.1开发,项目代号为Harmony,而其他的改动较大的功能将会逐步推出,会后不久,ECMAScript 3.1 改名为 ECMAScript 5

2009年12月ECMAScript 5.0版 正式发布;Harmony 项目则一分为二,一些可行性较高的功能优先开发,后来成了 ECMAScript 6;而另一些不太成熟的设想,则会考虑放在ECMAScript 7中;

2011年6月ECMAScript 5.1版发布,并且成为 ISO 国际标准(ISO/IEC 16262:2011);

2012年底,所有的主流浏览器全面支持 ECMAScript 5.1

2015年6月ECMAScript 6 正式发布,并且更名为“ECMAScript 2015”。同时, TC39 委员会也计划以后每年发布一个 ECMAScript 的版本;2016年发布的版本,称为“ECMAScript 2016”,2017年发布“ECMAScript 2017”,以后的版本以此类推。

AJAX

Ajax这个词首先出现在《Ajax: A New Approach to Web Applications》一文中,该文的作者是Jesse James Garrett,在该文中,将Ajax定义为了:Asynchronous JavaScrpt + XML的组合,代表并不是单一的技术,而是多种技术的组合。

Ajax应用和普通应用的对比

该文的迅速流传使得Ajax被更多开发者认知、认可,并在1998年得到了广泛应用。Ajax允许客户端脚本发送HTTP请求动态加载局部的网页内容,实现网页的异步加载,也就意味着不必因为局部网页内容的修改而加载整个网页,从而能够带来更加友好的网页体验。

Ajax的第一个组件由Outlook Web Access小组写成,被用于微软Exchange Server,因此Outlook Web Access成了第一个应用了Ajax技术的商业应用程序。

Ajax

2005年Google在它的很多应用中都使用了Ajax,如Google讨论组、Google地图、Google搜索建议、Gmail等。

自此以后,Ajax迅速窜红,进而引发了一场互联网革命,使得基于Ajax的综合框架和JS库的急剧增加,越来越多的优秀框架出现,不仅Web应用的构建变得更加容易,也改进了 JavaScript 编程实践,对JavaScript的发展推进做出了巨大的贡献。

JQuery

jQuery是一个快速、简洁的JavaScript框架,于2006年8月发布第一个稳定版本,是继Prototype之后又一个优秀的JavaScript代码库。它封装JavaScript常用的功能代码,并提供了一种更加简便的操作模式,使得HTML文档操作、事件处理、动画设计和Ajax交互变得更加容易。

JQuery

此外,jQuery具有高效灵活的CSS选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等。

Node.js

就在Chromium 发布半年后,Ryan Dahl创建了一个基于 Chrome V8 引擎的 JavaScript 开发平台:Node.jsNode .js提供了一个可以JavaScript运行在服务端的运行环境,使得JavaScript程序可以运行在服务端;可以说,Node.js的出现让 JavaScript 提升了一个层次,让前端程序员不再局限于客户端开发,也让全栈开发成为了可能。

Node.js

Node.js发布的还有包管理工具:npm,通过npm可以:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用;
  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用;
  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用;

三大框架

由于Node.js的成功,在npm管理工具的带动下,一大批优秀的JavaScript开发框架开始涌现,其中有代表性的便是Vue.js、Angular.js、React.js,这些框架语法简单、性能优越、文档丰富,使用这些框架能够快速搭建前端应用,而且,由于活跃的开发社区,这些框架都有着丰富的系统组件,能够完成一切的业务需求。

三大框架

Vue.js是一套用于构建用户界面的渐进式JavaScript框架,自底向上增量开发的设计,专注于视图层,非常容易学习,也非常容易与其它库或已有项目整合,作者是尤雨溪;作者和框架无论在国内、国外都有着不小的知名度;

Vue.js

Angular.js是一套Google推出的JavaScript开发框架,诞生于2009年,该框架有着MVVM、模块化、自动化双向数据绑定、语义化标签、依赖注入等诸多核心特性;Angular的理念是 组建视图(UI)和写软件逻辑可同时进行,将DOM操作和应用逻辑解耦,将测试开发同等看待,将客户端和服务器端解耦,在整个开发流程里都引导着开发者:从设计UI,到编写业务逻辑,再到测试。

Angular.js

React.jsFacebook 推出的JavaScript框架,起源于 Facebook 的内部项目,由于 React 的设计思想极其独特,和Vue一样,React不是一个完整的MVC框架,很多人都认为是MVC中的V(View)。此外,React Native框架可用于开发跨平台的App应用,一套代码便能同时运行IOSAndroid

React.js

桌面软件开发

通过对Chromium 的移植,JavaScript还能用于开发桌面应用,典型应用便是NW.jsElectron.js;都是使用HTML + CSS + JavaScript便能开发出同时在LinuxMac OS XWindows上可运行的桌面软件。

Deno

今天,Deno 1.0 正式发布,什么是Deno呢?Deno是使用V8引擎并内置于RustJavaScriptTypeScript的新运行时,致力于在Web浏览器之外执行JavaScriptTypeScript程序。

Deno

它和Node.js的设计者是同一人:Ryan Dahl,是Ryan DahlNode.js之后的又一大作;Deno的设计特别注重安全,有着众多优点:

  1. Deno 是以安全为前提的,除非明确启用,否则不会访问文件、网络或者环境;
  2. 在设计之初便充分考虑到了TypeScript,所以对TypeScript有着开箱即用的支持;
  3. 只提供一个可执行文件;
  4. 内置了很实用的程序,如依赖检查器(deno info)和代码格式化器(deno fmt);
  5. 拥有一组经过审核的标准模块:deno.land/std,能和deno一起运行;

虽然都支持V8引擎,但Deno却并不是Node.js的分支,它甚至都不和Node(NPM)兼容;Deno是一个全新的JavaScriptTypeScript程序运行时,意在构建更加安全和高效的JavaScriptTypeScript程序,虽然目前和Node.js并不兼容,Deno却希望在将来能够使用Deno来运行更多的Node项目。

小结

纵观JavaScript的发展,可谓感慨良多!曾经的JavaScript是命运坎坷,还未出生就不受亲生父亲的待见,出生后更是常年被笼罩在Java 的阴影之下,甚至一度被认为是Java 的补充;被卷入浏览器大战,差点被遗弃。

但是好在它遇到了自己真正的归宿:ECMA组织,不仅获得了重生,更是广受开发者青睐,随着Node.js的出现,Vue.js、Angular.js、React.js蓬勃发展,JavaScript有了更大的应用;Deno的诞生,使得JavaScript已经不仅限于Web浏览器,又会掀起一场更大的互联网革命,让我们拭目以待。

完结,老夫虽不正经,但老夫一身的才华!关注我,获取更多编程科技知识。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343