JavaScript:一个屌丝的逆袭

是的, 我就是鼎鼎大名的JavaScript, 典型的高富帅,前端编程之王,数以百万计的程序员使用我来编程。 如果你没有用过我就太out了。
不过当我是一个屌丝时, 真的没有想到能发展到如今的地位…
第一章:出世
我出生在上古时代的浏览器Netscape中, 那个时候的网页真是乏善可陈, 你可能都想象不到, 主要是些丑陋的静态文本和简单的图片, 和现在美轮美奂的页面相比,差的实在太远了, 不信你请看著名的Yahoo 网站:在这里插入图片描述
那个时候人们还在用Modem(调制解调器)通过电话线拨号上网, 每次拨号都有种吱吱啦啦声音, 就像一个铁片努力的刮一个锅底,让无数人抓狂不已。

这还不算什么, 网速只有28.8kbit /s , 下载一个网页都得耐心的等待半天。

我的主人Brendan Eich 有一回用公司的Netscape上网购物的时候, 需要注册用户, 填了一个表单, 点击了提交按钮, 等待了38秒, 然后服务器告诉他:“对不起, 您忘了选择性别了”

他几乎要崩溃:“靠,怎么能够这样! 这么简单的问题浏览器怎么不告诉我, 还得让我把数据提交到几千公里外的服务器网站, 然后在那里检查才能发现问题吗!”

对浏览器进行改革势在必行!

Brendan Eich 于是去找老板: “我实在是受不了了, 我需要一种脚本语言运行在浏览器中, 帮助我完成这些本来就应该在浏览器中完成的任务“

老板: “我们Netscape公司也早有此意, 要不你来设计一个吧”

Brendan Eich: “好啊, 你听说过LISP(确切的说是Scheme)吗, 当今最牛的编程语言,我们公司何不把Scheme 运行在浏览器中呢? “

老板: "LISP有谁会用啊? ”

Brendan Eich: “…”

老板: "我们正在和Sun 公司合作, 你听说过他们刚发明的Java 吗, 那个运行在浏览器中的Applet简直是酷毙了,Java 肯定是未来的网络语言。 所以你要搞个新语言出来,要和java 足够相似, 但是要比java 简单的多的多, 这样那些网页开发人员就可以用了。 ”

我的主人Brendan Eich很郁闷, 但是也没有办法, 他对java 毫无兴趣, 为了应付公司的任务, 他只花了10天就把我设计了出来, 对了, 我本来叫LiveScript, 但是为了向“万恶”的Java示好, 我竟然被改成了 Javascript !

由于设计时间太短,我的一些细节考虑得不够严谨,导致后来很长一段时间,Javascript写出来的程序混乱不堪。如果主人预见到,未来这种语言会成为互联网第一大语言,全世界有成千上万的学习者,他会不会多花一点时间呢?

第二章:成长

Java 是当时的明星语言, 年轻,活力四射 , 他经常嘲笑我: 你小子到底是个计算机语言吗?

我说“是啊, 我的语法和你差不多呢”

Java: “你为什么只能在浏览器中运行啊? 你能写个程序单独运行吗, 哎对了你能读取一个文件吗 ?”

我当然读取不了文件,我生活在浏览器里, 用我写的程序只能嵌入在html网页中, 由浏览器中来执行。他们给这个执行模块起了一个很有动感的名字: javascript 引擎

我于是反击Java : “我有个引擎你知道吗?”
但是Java 轻松就把我打翻在地: “我还有个虚拟机呢”

年长的C也问我:你怎么不编译运行啊, 你看我编译以后,运行的多快。
我说: 省省吧, 要是每个页面打开后都先编译javascript ,那多慢啊。

不仅仅是Java 和C , 包括VB, Delphi等当时流行的语言都瞧不起我,背地里叫我屌丝。

也是, 我没法独立运行, 也不能像VB,Delphi他们画出漂亮的界面, 我能做的就是操作HTML 的DOM 和浏览器。
你可能不知道DOM是什么东西, 这么说吧, 浏览器从服务器取到HTML网页以后, 会展示成页面让你看, 但是他的内部其实会把HTML组织成一个树给我,
这个树可以称为DOM。 例如这个页面:

Sample Page

hello world!

第三章: 第一桶金

互联网的发展超出了所有人的预料, 我被应用在几乎每一个网站上, 但我一直很苦闷: 我作为一门语言,在浏览器中运行, 没法像java 那样访问网络, 也就没有办法调用服务器端的接口来获取数据。

用户只能通过GET或者POST向服务器发送请求,这时候服务器返回的数据是整个页面, 而不是页面中的一个片段, 也就是说整个页面都得刷新一遍, 哪怕是页面中只有一个文字的改变。
第四章: 发明JSON

后来有个好事之徒把上面的那种处理方式称为AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML), 其实异步挺好, 但是XML就很不爽了。

比如说服务器返回了下面这段xml :

978-7-229-03093-3 三体 刘慈欣 中国最牛的科幻书 38.00

真正的数据很少, 标签(像这样的)反而占了大头, 把数据都给淹没了。

我对XML说: “你是不是太臃肿了, 传输起来多费劲啊。”

XML说:“切,你这就不懂了,这样很优雅啊,格式化良好, 人可以读, 程序也可以读啊。”

“优雅个啥啊, 无用的数据这么多, 再说我还得用XML解析器来解析你, 费了劲了!”

“你真是屌丝啊,连个解析都搞不定, 你看人家Java, 用我用的多Happy , Spring, Struts, Hibernate, 几乎所有配置文件都是我。”
第五章:人生巅峰

HTML负责结构, CSS负责展示, 而我(加上AJAX, JSON) 负责逻辑。

于是前端编程三剑客形成了。

ExtJS, prototype, JQuery 这些框架把前端编程推向另外一个高峰。

甚至出现了AngularJS 这样的奇葩,实现了SPA(单一页面应用程序), 实在是难于想象。

我给Java 说: Java 兄, 现在我完全可以在浏览器端实现MVC了, 你只需要在服务器端通过接口给我提供数据就行了。

但是Java 还是给我泼冷水: 别得意忘形了, 服务器端才是核心, 要不你到服务器端试试?

我很诧异:“服务器端? 我还真没有想过, 住在64G内存, 32核的CPU 这种拥有几乎无限资源的机器上是什么感觉? ”

"感觉没你想象的好 " Java 没声好气的说 “多线程编程, 很多东西都要加锁, 一不留神就掉到坑里。 我这里基本一个请求就是一线程来处理, 遇到数据库操作, 虽然慢的要死,线程也得等待。 ”

"那不能改成异步操作吗?像我的AJAX一样, 数据来了再通知我 " 我问Java。

“不行, 一开始就是这样, 现在改不了”

把Javascript 放到服务器端执行怎么样? 这个想法够疯狂的。

首先得把浏览器端的运行环境, 就是javascript引擎移到服务器端, 这个引擎执行javasript 得足够快,要不Java 还不得笑死我。
原来的引擎一直不合格, 知道Chrome V8的出现, 才解决问题。

其次得绕开java 服务器的问题: 线程遇到IO/数据库/网络 这样的耗时操作, 不能等待, 得搞成异步处理。

但的确有人这么做了, 在我的创始人Brendan Eich 发明了我10几年以后 , 又一位大牛Ryan Dahl于2009年真的把我放到了服务器端。这就是node.js

(码农翻身:《Node.js 我只需要一个店小二》这篇文章介绍了Node.js的原理, 可以通过公共号的菜单查看)

这下Java无话可说了, 虽然他还是对我在服务器端执行持怀疑态度, 但越来越多使用node.js的网站证明, javascript的确可以在服务器端立足, 并且有一个巨大的优势:前端和后端都用同样的开发语言:那就是我 javascript

原来的前端开发现在竟然也可以毫无障碍的写后端的程序了, 是名副其实的“全栈工程师” !

这就是我,一个屌丝的逆袭, 我的创始人绝对想不到10几年后我能成为这么一个高富帅, 我估计他夜里经常会想: “唉,当年太仓促了, 我要是把javascript 设计的更好一点就好了。”
在学习Java或者想要学习Java的伙伴可以加入我们,我们的学习交流QQ群:715653481群内有相关学习资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值