在我们的介绍中,我们提出了一个大胆的主张:你拥有的最强大的工具就是浏览器本身。我们讨论了我们对每个小任务都倾向于使用NPM包的习惯,经常忘记我们代码下面就有强大的基础。
这篇文章全是关于"为什么"的。为什么你应该关心这些"Web API"?它们到底是什么?在本文结束时,你不仅会理解JavaScript语言和浏览器环境之间的关键区别,还会看到一个实用的、并排的示例,这可能会让你在下一次npm install之前三思而行。
让我们从最重要的概念开始。大多数开发者互换使用这些术语,但它们并不相同。
这是语言。当你写const name = "Alex"或[1, 2, 3].map(n => n * 2)时,你正在写JavaScript。这种语言由称为ECMAScript的规范标准化。它定义了语法、数据结构(对象、数组、映射)和核心功能(函数、Promise、async/await)。
把JavaScript想象成一个罐子里的聪明大脑。它可以思考、处理逻辑和管理数据,但它没有办法看到、听到或与外部世界互动。就其本身而言,核心JavaScript不知道"网页"是什么。它没有内置函数来改变按钮的颜色或获取用户的GPS坐标。
这是魔法发生的地方。Web API是浏览器给JavaScript大脑的连接器。它们是你的代码与浏览器功能和用户计算机之间的桥梁。
这些API不是JavaScript语言规范的一部分,但它们是Web平台的标准化部分。它们是浏览器的超能力,而JavaScript是我们用来命令它们的语言。
好的,所以它们是不同的东西。那又怎样?为什么直接学习使用这些API会让你成为一个更好的开发者?
每次你添加像axios或jQuery这样的库时,你都在添加用户必须下载、解析和执行的千字节代码。原生Web API已经在那里,内置在浏览器中。它的成本为零。使用fetch()而不是库意味着更小的包大小和更快的加载时间,这是保证的。
Web API由W3C和WHATWG等标准机构定义,并由所有主要浏览器供应商实现。它们非常稳定、经过充分测试且向后兼容。一个流行的开源库可能被其维护者放弃,但你可以确定fetch和DOM API不会消失。
你的node_modules中的包越少越好。这意味着:
许多Web API提供对硬件和操作系统功能的访问,这些功能完全超出了通用库的范围。想让你的Web应用离线工作?使用Service Worker API。想接收推送通知?使用Notifications API。想从用户的剪贴板读取?使用Clipboard API。你无法通过npm install来实现这种原生集成。
空谈是廉价的。让我们用最常见的任务来看看它的实际效果:从API获取数据。我们将从免费的JSONPlaceholder API获取用户列表。
这是干净的,而且工作完美。但我们为项目添加了一个15-25kB的依赖。
原生fetch代码同样可读,特别是使用async/await时。它实现了完全相同的结果,零依赖和零额外的千字节添加到我们的应用程序中。我们只是用知识换取了库。这是一个强大的交易。
理解这种区别是你的第一步。你现在知道浏览器自带一个内置工具包,你已经看到使用它如何立即精简你的代码。这并不意味着你应该永远不再使用框架或库!这意味着你现在有能力做出有意识的选择。你可以问:"这个问题是否复杂到足以证明依赖的合理性,还是浏览器可以为我处理它?"
现在我们知道Web API为什么如此重要,是时候学习如何使用最重要的一个了。
在第2部分中,我们将动手实践,学习通过掌握DOM API让任何网页变得生动起来。
理解Web API的重要性后,让我们看看一些实际的应用场景:
Web API是现代Web开发的基础。通过理解和使用它们,你将能够:
记住,这并不意味着你应该完全放弃框架和库。相反,你应该学会在适当的时候使用原生API,在需要的时候使用框架。这种平衡将让你成为一个更全面、更有能力的开发者。