我的名字叫JavaScript,你也可以喊我Js。在说我的故事之前,我觉得有必要先介绍下我的大哥HTML,和大嫂CSS。没错,那个叫Java的家伙不是我的亲戚,我们隔着好几条街区呢。(来自知乎的神回复:Java和Javascirpt就好比“雷锋”和“雷峰塔”的关系)
我大哥算是整个家族的元老级人物,在上世纪90年代初,它被一帮科学家创造出来为了方便他们看文档、传论文。连这帮缔造者自己都没想到,我大哥的出现在之后改变了整个世界。
起初,我大哥的日子还是蛮逍遥的。它用自己强大的能力将文字和图片构建成一个个文档(Document),并放在服务器上供大家去访问浏览。科学家们吃着火锅唱着歌就把自己的论文发表在了网络上,大哥也觉得找到了一份钱多事少离家近的工作,一切看起来都很美好。
然而人怕出名猪怕壮,不久,大哥的名声就传出了学术界,越来越多的人通过HTML大哥向世界展示他们自个儿,还给大哥构建出的文档起了个时髦的名字:网页。
人类是很贪婪的,平淡无奇的网页很快就让他们厌倦了,“文档标题是不是可以变大一些?”,“是不是可以调整不同段落的字体颜色?”⋯⋯很显然,他们希望自己的网页看起来更加与众不同。于是,HTML大哥一次次的被赋予更加强大的能力,新的功能虽然在一定程度上满足了人类的需求,但这也给大哥留下了后遗症,它所构建的网页逐渐变的臃肿不堪。
就在大哥人生最低潮的时候,我的大嫂走进了它的生活(1996年)。如果要用一个字形容我的CSS大嫂,那就是——美。自从它来到我们家,大哥构建的网页要换字体、变颜色、加边框、添背景⋯⋯这些活统统被大嫂一手揽了过去。为这事,大哥乐了好些日子,之前的颓态也一扫而空了。自此,大哥又过上了只负责赚钱养家,由嫂子负责貌美如花的幸福生活。
直到有一天,大哥接到一项特殊的任务,一位年轻的爸爸想给自己患有抑郁症的孩子制作一个网站,希望网页里的天空每天都可以更换一种颜色。听起来很合理的诉求却难到了我大哥,它和大嫂展开了讨论:
“Dear,让我们帮帮他们,好吗?”,大嫂恳切的说道。
“我也很想这样做,但是,Sweetie,你是知道的,我和你的能力仅限于构建静态网站,只要访问相同的网址,返回的页面内容始终是不变的。”
“嗯⋯⋯要么,我们去问问隔壁镇上的老C头(大家都这样称呼资历较老的C语言)吧,它见多识广,指不定能有好主意”。大哥补充说道。
两天后,它们见到了正在和C++下棋的老C头,听完大哥的叙述,老C头沉思片刻:“这个好办,不要让用户直接访问你了,我和C++都有判断当前日期的能力,让用户请求先到达我们生成的程序,你只需要告诉我们网页长什么样子,我们在需要改变颜色的地方做点处理,再重新拼接成正确的页面返回就行了。”C++老爹在一旁连连点头。
按照老C头说的办法,有心的爸爸很快制作出了天空颜色会变的动态网页,他从孩子脸上看到了久违的笑容。
(猿知原味注:老C头阐述的方法是最早的动态网页实现方案——CGI技术。除了C/C++之外,CGI程序还可以用PERL、Java、Python、Shell等进行编写)
动态网页很快成为了一种潮流,众多站点加入了访问计数、表单提交等需要网站服务器端进行逻辑处理的功能。这一下老C头可不乐意了,和C++老爹抱怨起来:
“之前我就是想帮个忙,怎么帮着帮着还把我自己套进来了?作为一名绅士,你知道让我去输出那一大堆乱七八糟的HTML字符串是件多么粗鲁的事吗?”
“别提了,老C头,都怨你出的馊主意,每个请求过来我都得用一个新的进程来处理,这么些年来大家一直称赞我的性能高,这回怕是要晚节不保了。”
“你的性能高?那意思是我的性能不高喽?”
“这还用说嘛,看我们的名字不就很清楚了么?”
“@#&%$⋯⋯”
两个倔老头又陷入了日常的争论当中。好在没过多久,一个叫PHP的家伙诞生了,它的出现彻底消除了老C头的满腹牢骚,因为这家伙迅速接过老C头的活,成为了开发动态网站的主流。
我和PHP的关系还不错,一方面是因为我们年纪相当(1995年),另一方面PHP和我大哥是老铁,它经常来我家串门,来和大哥讨论某个动态页面应该如何构建,哪些部分属于应由大哥负责的静态内容,哪些部分属于需要它来标记的动态内容。
总之啊,PHP和我们这一家子相处的算是其乐融融。
(猿知原味注:PHP相较CGI,不仅更好地组织了Web页面的内容,提高了开发效率和可维护性,而且执行效率也比CGI更高。在这之后,ASP和JSP等网站动态脚本语言也相继诞生)
故事讲到这,终于轮到我出场了。在我出生之前,一个网站所有逻辑层面的任务都会由我大哥承包给老C头、PHP等它们那帮跑在服务器上的家伙。比如你要注册一个邮箱,账号输入时一不小心将@敲成了#,只有当注册账号被发送到服务器上经过那些家伙校验之后才能发现错误,它们再将错误信息返回到你面前又需要花费一些时间,在那个还在用28.8kbit/s的"猫"上网的年代,这段被浪费的时间很可能长达好几十秒。
我的出现大大改善了这种糟糕的上网体验。我完全运行在客户端(关于这一点,最近几年我似乎有些跑偏),那些没必要交给服务器的逻辑运算统统由我负责。有了我之后可把我大哥乐坏了,它再也不用因为一个简单的表单验证去麻烦它的PHP老弟,或者去面对老C头鄙夷的眼神了。自此,我算是在这个家里站稳了脚跟。
时间过的很快,一晃就跨过了千禧之年,在那前后,大哥带着我接了很多有趣的活,有在车库里创建的搜索引擎,有在大学宿舍里创建的社交网站⋯⋯同它们一样,我要讲的故事也刚刚开始。