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支持React、Svelte、Vue、Preact、Solid、Web组件、普通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项目结构
然后,你必须为你的应用程序安装所有的依赖项。之后,你就可以启动该应用程序了。
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组件。
口袋妖怪应用程序
这将在浏览器中渲染应用程序。但由于输出的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。下面的文章将指导你完成相关的步骤。
你可以在我的GitHub仓库中找到这个例子的完整代码,以及部署后的应用程序的链接。
总结
Astro是以性能和应用速度为前提而构建的。部分水化和岛式架构帮助Astro通过构建单独的组件来实现其目标,同时最大限度地减少JavaScript。
BYOF使开发人员更容易转换到Astro,学习曲线最小。
我相信Astro将成为web开发中的一个游戏规则改变者,Astro引入的这些概念肯定会将其他框架推向极限。
所以,我邀请你在你的下一个项目中试用Astro,并在评论区分享你的想法。
谢谢您的阅读!!
了解更多
用Astro静态网站捆绑器减少JavaScript的运输最初发表在Medium上的Bits and Pieces,在那里人们通过强调和回应这个故事继续对话。