永远不会完的开场白

简介: 长久以来,js 在服务端中只是配角。虽然从96年开始,浏览器鼻祖 Netscape 已经开始有意识地在服务端应用到出自自己之手的 JavaScript?,作为与前端语言配合在一起构成同一种语言,从而完成“一条龙”开发的目的,但是,结果却是,随着 JavaScript? 早期不完善和 Netscape 自身没落等诸多原因,Server Side JavaScript? 不仅没有业界所重视,而且几乎到底被人完全“遗忘”的阶段…… “昨天的新闻就是今天的历史。

长久以来,js 在服务端中只是配角。虽然从96年开始,浏览器鼻祖 Netscape 已经开始有意识地在服务端应用到出自自己之手的 JavaScript?,作为与前端语言配合在一起构成同一种语言,从而完成“一条龙”开发的目的,但是,结果却是,随着 JavaScript? 早期不完善和 Netscape 自身没落等诸多原因,Server Side JavaScript? 不仅没有业界所重视,而且几乎到底被人完全“遗忘”的阶段……

“昨天的新闻就是今天的历史。”

今天的 js 之所以能够摇身一变,蔚然成为 web 开发主流语言,想必列为看官都有各自认为它合理的原因。不过,在下这里仍想分析一下服务端使用 js 的好处:

首先,当然是如前面所说,客户端与服务端使用同一种语言开发,也就是我们 edk 库所提倡的“前后合一”。因为有不少部分特别是越底层的部分,也可能共性出来,作为 common 模板共享前、后端运行时。这一点特性不仅很“现实”,而且很“可行”,因为大家都是知道,前端为 js 的运行条件这个已经具有不可代替性,我意思说“首屈一指”的,首先先是支持了 js 再其他的 flash/swing 的等等。客户端的部署,说缺 flash/jre 说得过去,装一个不就是了,可是说缺 js 那就有点不太像话了吧!?咱们从“木桶最短那块”的原理去理解就很好理解了。这样说,前端 js 不能变,等于后端统一语言的话,只能是 js 了。

其次,JavaScript? 作为一门既陌生又老到的语言,本身就是一个“大宝矿”,学习 JavaScript? 可以学到许多新的东西。为什么说 js 是“大宝矿”?如果用一个简洁的等式去表达 js,那么可以说“js = c + lisp + Prototype OO”最贴切不过了。lisp 那是一门古老的语言,以独特的语法和函数式学问独领翘楚,早在上世纪六十年代已经有成熟的研究成果,但碍于许多硬伤的问题比如首当其冲的性能问题而没有被广泛使用,可以说,较多的时候只是“养在深闺无人识”,停留在实验室,或者研究者的论文中。甚幸的是,在业界充分学习、投入、实践 OO 等之后,仿佛把目光转向另一边厢的函数式编程,纷纷“如获至宝”。于是,这个乖张的 js 又再一次暴露了其充分其貌不扬的 fp 特性!闭包、高阶函数、list 处理……但凡属于 fp 特性的,大多都可以在 js 上不那么别扭(相比命令式的别扭)的语法实现,而且关键的是,那一切,都披上了 C Style 语法的外衣!必须提到的是,语言亲和力,也就是第一时间接触到的地方,如果已经是我们所熟悉、所习惯的语言,那么不言而喻,将是十分友好的讯息。而即使是 Scale 等的混合 oo 与 fp 的新语言,也是后来的事情。我们无声无息地写出 js 代码,但也可能处处充满着 fp 的气息。可以这么说,只要能把 fp 的思想领会在心,那么换到别的语言,也是可以透过某些途径来实现的。可是在 js 中,那的确是轻易以举办到的事情。我学习 fp 的程度不深,只知道 fp 很好很强大。既然 js 天然是 c + lisp,因此也希望在自己写的库中,多实践或运用 fp。对 fp 有兴趣的朋友可以从我这篇博文开始了解一下 js 的 fp 编程(http://blog.csdn.net/zhangxin09/article/details/5716697 )。

最后说说 js 引擎的性能。旧有的 js 引擎固然很慢,包括当前 asp 的 Jscript.dll,但是对于学习和实验来说,已经足够。以 v8 为代表的新型的js引擎解释速度就很快,这一点足以让我们应用层面的开发者可以省心的了,起码把动态语言“慢”的包袱卸下不少。不仅如此,还要必须要指出的是,之所以基于 v8 的 node.js 如此之快,究其原因,与 js 剑走偏锋的设计是十分吻合的,其锋芒之处的亮点在于以浑然一体“单线程、事件驱动、非阻塞异步模型”之特性直接 PK 多线程编程模型,特别在应对长链接、高并发的场景中,效率相当抢眼给力。关于 nodejs 和 js 之间的相得益彰,不妨留意一下我早期写的一文《漫谈 nodejs( http://blog.csdn.net/zhangxin09/article/details/5874632 )》。

罗列以上的方方面面的好处,无非围绕开发效率、语言魅力、机器效率等的范畴去讨论,以此强调 edk.js 的开发初衷为何。——想必至此,大家已经有清晰的概念了。


目录
相关文章
|
4天前
|
弹性计算 安全 API
访问控制(RAM)|云上安全使用AccessKey的最佳实践
集中管控AK/SK的生命周期,可以极大降低AK/SK管理和使用成本,同时通过加密和轮转的方式,保证AK/SK的安全使用,本次分享为您介绍产品原理,以及具体的使用步骤。
101786 0
|
4天前
|
SQL 关系型数据库 分布式数据库
Doodle Jump — 使用Flutter&Flame开发游戏真不错!
用Flutter&Flame开发游戏是一种什么体验?最近网上冲浪的时候,我偶然发现了一个国外的游戏网站,类似于国内的4399。在浏览时,我遇到了一款经典的小游戏:Doodle Jump...
|
12天前
|
弹性计算 运维 安全
访问控制(RAM)|云上程序使用临时凭证的最佳实践
STS临时访问凭证是阿里云提供的一种临时访问权限管理服务,通过STS获取可以自定义时效和访问权限的临时身份凭证,减少长期访问密钥(AccessKey)泄露的风险。本文将为您介绍产品原理,以及具体的使用步骤。
151035 4
|
10天前
|
数据采集 存储 运维
提升团队工程交付能力,从“看见”工程活动和研发模式开始
本文从统一工程交付的概念模型开始,介绍了如何将应用交付的模式显式地定义出来,并通过工具平台落地。
119990 57
|
11天前
|
监控 负载均衡 Java
深入探究Java微服务架构:Spring Cloud概论
**摘要:** 本文深入探讨了Java微服务架构中的Spring Cloud,解释了微服务架构如何解决传统单体架构的局限性,如松耦合、独立部署、可伸缩性和容错性。Spring Cloud作为一个基于Spring Boot的开源框架,提供了服务注册与发现、负载均衡、断路器、配置中心、API网关等组件,简化了微服务的开发、部署和管理。文章详细介绍了Spring Cloud的核心模块,如Eureka、Ribbon、Hystrix、Config、Zuul和Sleuth,并通过一个电商微服务系统的实战案例展示了如何使用Spring Cloud构建微服务应用。
103503 8
|
12天前
|
人工智能 Serverless 对象存储
让你的文档从静态展示到一键部署可操作验证
通过函数计算的能力让阿里云的文档从静态展示升级为动态可操作验证,用户在文档中单击一键部署可快速完成代码的部署及测试。这一改变已在函数计算的活动沙龙中得到用户的认可。
120846 218
|
11天前
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
11天前
|
存储 缓存 安全
深度解析JVM世界:JVM内存结构
深度解析JVM世界:JVM内存结构
|
18天前
|
人工智能 编解码 对象存储
一键生成视频!用 PAI-EAS 部署 AI 视频生成模型 SVD 工作流
本教程将带领大家免费领取阿里云PAI-EAS的免费试用资源,并且带领大家在 ComfyUI 环境下使用 SVD的模型,根据任何图片生成一个小短视频。