Astro如何实现最小化JavaScript——笔记

1,406 阅读7分钟

Astro如何减少JavaScript捆绑的大小

Astro是一个现代静态网站建设者,它允许你用更少的JavaScript来提供应用程序。作为一个开发者,我发现这非常有趣,因为它在不影响应用功能的情况下减少了捆绑的大小。

然而,Astro发布才几天,我就想试一试。因此,在这篇文章中,我将探讨它的核心功能,并通过相关的例子解释它是如何减少包的大小的。

为什么我们需要Astro?

JavaScript框架和库有助于加快现代网络开发的速度。

然而,每当我们安装一个新的库时,我们项目的包的大小就会增加。最终,它会影响到应用程序的加载时间,造成性能问题。

HTTP Archive Org的下图向你展示了,一般来说,JavaScript捆绑大小在这些年里的增长情况。

HTTP Archive Org(来源)--页面所请求的所有外部脚本的传输大小千字节之和

作为一种解决方案,开发人员开始转向诸如 懒惰加载、服务器端渲染和混合渲染 等技术 但是,这些技术都有自己的挑战,有些还处于预览阶段(如React悬念+懒惰)。

这就是Astro出现的地方。它提供了一个可行的、直接的解决方案来减少JavaScript包的大小。

所以,让我们看看Astro是如何工作的。

Astro是如何最小化JavaScript的?

Astro使用一种叫做部分水合的技术来减少包的大小。

它将必要的JavaScript加载到所需的组件(包括依赖关系),同时保持页面的其余部分静态。

有几种类型的水合技术,你可以使用。

  • **load -**这种水合技术将在页面加载时对组件进行水合。
  • 闲置**--**一旦主线程空闲,就对组件进行水化。这使用了 requestIdleCallback() 浏览器的API,它在浏览器的空闲期排队调用一个函数。
  • **visible -**当元素进入视口时,立即对组件进行水合。
  • **media -**这个Hydration在浏览器与给定的媒体查询相匹配时发生。这使用了 matchMedia().这对那些只应在移动或桌面设备上显示的元素很有用。

所有这些功能都被Astro使用的独特架构所利用,称为岛屿架构

岛式架构

岛式架构在服务器上渲染HTML页面,并在高动态区域周围注入占位符。占位符包含服务器渲染的HTML输出,对应于小部件,这些区域可以在客户端被水化为小部件。

岛式架构

与单页应用程序相比,岛式架构带来了多种好处,比如。

  • 启用部分水合功能。
  • 启用SEO。
  • 提高可访问性和可发现性。

阿童木的主要特点

Astro有一些整洁的功能,同时增加了一些创新,以方便采用。其中一些是。

  • 自带框架(BYOF)--使用Astro开发时,你不需要学习新的语法或编码实践。Astro支持ReactSvelteVuePreactSolidWeb组件、普通HTML+JavaScript。
  • 功能齐全--Astro支持所有喜爱的开发者工具和功能,如TypeScript、NPM包、Scoped CSS、CSS Modules、Sass、Tailwind、Markdown、MDX。
  • 按需组件--Astro允许你通过水化组件按需加载JavaScript。因此,如果该特定组件不可见,它不会加载相关的JavaScript。
  • 100%静态HTML,没有JS- 当构建Astro时,它将删除所有的JavaScript,并将整个页面呈现为静态HTML页面。
  • **SEO -**使用Astro,我们可以启用自动网站地图、RSS订阅、分页和收藏。
  • 基于文件的路由- 就像Nextjs一样,Astro有一个基于文件的路由机制。 ,所有在/pages中的东西Astro都会将目录转化为路由。

现在,你了解了Astro的工作原理和它的特点。那么,让我们看看如何能用以下方法创建一个React应用程序

用Bit构建和分享React组件

比特是一个可扩展的工具,让你创建_真正的模块化_应用程序 ,有_独立_编写、版本和维护的组件。

用它来构建模块化的应用程序和设计系统,编写和交付微服务和微前端,或者简单地在应用程序之间共享组件/模块。

一个独立的源码控制和共享的 "卡 "组件(右边是它的依赖关系图,由Bit自动生成的

比特:模块化网络的平台

让我们用Remotion创建一个简单的应用程序。

现在,你明白了Astro是如何工作的以及它的功能。所以,让我们看看如何用Astro创建一个简单的应用程序。

步骤01 - 初始化项目

首先,让我们创建一个目录,并用Astro CLI初始化该项目。然后,你需要做的就是在你的项目根终端运行以下命令。

npm init astro

这个命令会提示一些选项供你选择。

Astro CLI init

Astro CLI init

Astro项目结构

然后,你必须为你的应用程序安装所有的依赖项。之后,你就可以启动该应用程序了。

npm install

Astro欢迎页

这将打开一个新的浏览器标签,上面有Astro的欢迎页面。Astro有自己的VScode语言支持扩展,它将启用语法高亮和其他语言选项。

**注意:**Astro支持14版及以上的节点,所以要确保你有14版或以上。

第02步 - 自带框架(BYOF

使用Astro,你可以使用你喜欢的前端框架或库来构建应用程序。你也可以使用Astro CLI,在初始化阶段选择你想要的框架。

对于这个例子,让我们使用React。所以,在初始化项目后,你需要在你的astro.config.mjs文件中添加一个小配置,让Astro知道你的组件需要哪种类型的渲染。

由于我们使用的是React,我们需要在渲染器下添加以下配置。

renderers: ['

现在让我们创建2个组件,分别称为Form和List insrc/components文件夹。

medium.com/media/cf46d…medium.com/media/cbe31…

然后你需要在pages目录下的index.astro文件中导入Form.jsx组件。

medium.com/media/db272…

口袋妖怪应用程序

这将在浏览器中渲染应用程序。但由于输出的HTML页面没有任何JavaScript,所以输入将无法工作。

第3步 - 启用水化技术

如果你用Chrome DevTools监控该应用程序,你可以看到Astro已经删除了所有的JavaScript。因此,没有任何React代码加载到浏览器中。

为了启用JavaScript,我们需要在index.astro文件内的组件中添加Hydration技术。

<body>

然后应用程序就可以正常工作了,因为一旦元素进入视口,JavaScript就会被加载(Hydrated)。

加载到浏览器的JavaScript

第04步 - 添加样式

我们可以通过添加标签对Astro组件进行内联样式设计。由于Astro页面默认是有范围的,这些样式将只适用于各自的页面。

我们还可以导入样式。例如,使用React/Preact的应用程序可以导入风格,如下所示。

import

此外,Astro也支持Sass开箱即用,并且可以很容易地配置为使用Tailwind

第05步 - 从API获取数据

Astro页面可以在其设置脚本中访问全局fetch()函数。它是一个原生的JavaScript API(MDN- fetch),可以让你进行HTTP请求。

const

第06步 - 使用Netlify进行部署

你可以把Astro的应用程序部署到Netlify。下面的文章将指导你完成相关的步骤。

为FullStack应用程序使用Netlify

你可以在我的GitHub仓库中找到这个例子的完整代码,以及部署后的应用程序的链接

总结

Astro是以性能和应用速度为前提而构建的。部分水化和岛式架构帮助Astro通过构建单独的组件来实现其目标,同时最大限度地减少JavaScript。

BYOF使开发人员更容易转换到Astro,学习曲线最小。

我相信Astro将成为web开发中的一个游戏规则改变者,Astro引入的这些概念肯定会将其他框架推向极限。

所以,我邀请你在你的下一个项目中试用Astro,并在评论区分享你的想法。

谢谢您的阅读!!

了解更多


用Astro静态网站捆绑器减少JavaScript的运输最初发表在Medium上的Bits and Pieces,在那里人们通过强调和回应这个故事继续对话。