对于开发者来说,这只是小小的一步;对于网络来说,却是巨大的一步。
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
照片由 Joey Csunyo 拍摄,来自 Unsplash
我想谈谈那些勇敢的 JS 开发者,他们彻底改变了 Web 开发。
JSON
JSON 的诞生源于 Web 平台的限制和一点创造力。虽然 XMLHttpRequest 可以无需完全重新加载页面即可向服务器发送请求,但 XML 数据在网络传输过程中占用资源较大,因此 Douglas Crockford 想出了一个巧妙的办法——我们可以使用 JavaScript 对象表示法eval(JSON) 轻松地在服务器和客户端之间传递数据。但是,执行任意代码并不安全,eval尤其当代码来自第三方时。因此,下一步是对其进行标准化,并为其实现一个专门的解析器。
后来它成为所有浏览器的标准,现在我们可以这样使用它JSON.parse。
历史注释:克罗克福德表示,JSON 早在 1996 年就在 Netscape 使用了,他只是在 2001 年重新发现了它并将其标准化。
Document.querySelectorAll()
当时也有类似 ` Document.getElementById()and` 和 `or`的方法Document.getElementsByClassName(),但使用起来很笨拙。John Resig 创建了一个方便的 DOM 操作库——jQuery。其中最方便的部分是通用查询选择器,后来被标准化为 ` Document.querySelectorAll().`
历史注释:jQuery 创建于 2006 年,其部分灵感来源于 Dean Edwards 的 cssQuery(出现得更早)。cssQuery 的XPath理念与之类似(最早出现于 1999 年)。
附注:jQuery之所以广泛应用,是因为它针对浏览器的各种怪癖和不一致性提供了很多变通方法,我想我们可以说,jQuery和AJAX一样,让跨浏览器开发变得更加容易。
CommonJS、AMD、Requirejs、模块
服务器端故事
Node.js 由 Ryan Dahl 于 2009 年创建。在此之前也存在一些服务器端 JavaScript 环境,例如 Netscape 的 LiveWire Pro Web,但它们并没有受到太多关注。
服务器端环境一出现,就迫切需要制定一个模块共享标准。2009年,Kevin Dangoor提出了CommonJS(最初名为ServerJS),作为定义浏览器外JavaScript生态系统的标准。
客户方的故事
jQuery 有插件,这些插件基于立即执行函数表达式 (IIFE) 模式和 script 标签。类似这样。
(function ( $ ) {
$.fn.plugin = function() {
//...
return this;
};
}( jQuery ));
插件是通过复制粘贴的方式分发的。
CommonJS 最初是为服务器端提出的,但很快就被移植到客户端(Requirejs)。
CommonJS 的主要问题在于它是同步的,这对于需要处理网络延迟的客户端来说非常不方便。下一步是异步模块定义 (AMD),它既是异步的,又允许指定依赖关系。CommonJS 和 AMD 都非常流行,因此人们开发出了 UMD,它与两者都兼容。
异步模块的一个问题是它们可能会造成级联下载,导致速度非常慢。为了解决这个问题,开发者们发明了 JavaScript 打包工具,例如 Browserify 和 Webpack。然而,这并非易事,如果模块导入过程是静态的,那就容易多了。正是基于这种理念,ES6 Harmony 模块应运而生,并于 2014 年 7 月被 TC39 正式采纳。
Webpack、Requirejs 和 Promises 促成了后续的动态导入提案。
承诺
2011年, Promise概念作为jQuery Deferred Objects被引入。
2012年,它被提议作为ES2015的规范。
其他
jQuery.ajax()以及其他受其启发的 AJAX 库fetch- 基于锚点(又称“hashbang”)的客户端路由,受 History API 启发
- 我还漏掉了什么?
我发现这里面有规律。
我并不想贬低那些参与浏览器开发和Web标准制定的人们的贡献。他们都付出了艰辛的努力,创建了将被数百万开发者使用的API。要从一开始就做到完美几乎是不可能的。从这个意义上讲,JS开发者有机会先在实际应用中测试API设计,待其被认可和接受后,再由Web平台采纳。
在提案被采纳之前先进行测试似乎是个不错的做法,就像他们对 TC39 提案和 Babel 插件所做的那样。但可以肯定的是,不可能用这种方式测试所有提案,有些提案需要进行彻底的修改,必须先由浏览器厂商推动。
接下来会发生什么?
我想知道下一个在 JavaScript 中开创的技术会被该平台采用。
它是不是像 React 那样,融合了时间切片、延迟渲染和水合等技术的虚拟 DOM?它看起来像是下一个 JSON——足够“黑客”(想想抛出 Promise),足够“创新”,又源于 Web 平台的局限性。
这是 CSS-in-JS 吗?它看起来像是下一个 jQuery——网络平台提供的方案笨拙难用,所以人们围绕它开发了一些好用的工具。
我也不知道,这只是我的一些想法🤔。你觉得接下来会发生什么呢?
文章来源:https://dev.to/stereobooster/thats-one-small-step-for-a-developer-one-giant-leap-for-the-web-4b28