如何利用 Next.js 实现 AMP(Accelerated Mobile Pages)?

随着移动设备成为主流,提高移动设备访问网页的速度越来越重要,而 AMP 技术就是为此而生。AMP 是 Google 在 2015 年推出的一项快速打开移动网页的技术,可在移动端提供更快的加载速度和更流畅的用户体验。但是,实现 AMP 并不容易。本文将介绍如何利用 Next.js 实现 AMP,让你的网页飞起来。

什么是 Next.js?

Next.js 是一个基于 React 的轻量级服务端渲染框架,提供了许多在开发过程中需要的功能,例如自动代码分割、服务端渲染、静态文件服务等。同时,它还支持 SSR(服务器端渲染)、静态导出、动态导出等多种导出方式,这使得 Next.js 在构建 Web 应用程序时非常灵活和方便。

安装 Next.js

使用以下命令安装 Next.js:

--- ------- ------ ---- ----- ---------

创建 AMP 页面

为了让 Next.js 页面支持 AMP,我们需要更改以下几个地方:

  1. 页面采用 .amp.html 后缀命名;
  2. 页面的头部需要有一些必须的元数据;
  3. 页面只能包含放置在 <head> 中的特定样式和脚本;
  4. 页面只能使用特定的 HTML、CSS 和 JavaScript 特性。

让我们来创建一个简单的 AMP 页面。在 pages 目录下新建一个名为 index.amp.html 的文件,然后将下面的代码复制到文件中:

--------- -----
----- ----
 ------
   ----- ----------------
   ----- --------------- ---------
   ----- --------------- -------------------------------------------------------------
   ------- ----- ------------------------------------------------
   ------------- ------------
 -------
 ------
   ---------- ---------
 -------
-------

AMP 页面的头部至少需要包含以下元素:

  • <!doctype html> 声明;
  • <html amp> 样式选择器;
  • <meta charset> 元数据标记;
  • <link rel="canonical"> 元数据,用于通知搜索引擎源网页的位置;
  • <meta name="viewport"> 元数据,规定应当使用多少缩放。

我们还在 head 中包含了 AMP 的 JavaScript 核心库,它使得其余的组件和脚本可以与 AMP 页面交互。

在 Next.js 中使用 AMP

我们需要用 Next.js 的动态页面导出功能来让服务端基于请求来区分是否需要使用 AMP。为了实现这个目标,我们需要修改 Next.js 配置文件 next.config.js 如下:

----- ----- - ----- -- -
  -- -------------------
  -- ----- ---------- ------ - ------ ----
  ------ ------------- -- ---
-

-------------- - -
  -------------- ----- -------- ---------------- -
    ------ -
      ---- - ----- --- --
      ------------------ - ----- --------- ------ - ---- --- - -
    -
  --
  -------- -------- -------- -
    --------------------------
      ----- ---------------
      ---- ------------
    --
    ------ ------
  --
  ------------ ---------- - ------------------------------- - --
-

这段代码实现了以下几个功能:

  1. exportPathMap:设置服务端基于请求动态导出页面;
  2. webpack:给 Next.js 告诉如何处理 .amp.html 结尾的页面;
  3. assetPrefix:在 isAmp 返回 true 时,将使用 AMP CDN 图片等静态文件。

接下来,让我们在 pages 目录下新建一个名为 index.js 的文件,然后将下面的代码复制到文件中:

------ ----- ---- -------

----- ----- - -- ----- -- -- -
  -----
    -------- --- ------ - --- --- ----- - --- ------ -----------
    ------ - 
      --------- -- --- ------------- - 
      --------- -- ------- -------------
    -
    -- --------------- - -- - ------------------ --------
  ------
-

--------------------- - -- ----- -- -- -- ------ --------- --- --- --

------ ------- -----

这段代码实现了以下功能:

  1. 动态展示页面类型(AMP 或非 AMP);
  2. 切换页面类型的链接。

你现在已经可以启动 Next.js 并访问 http://localhost:3000/index,然后在此 URL 后加上 ?amp=1 访问 AMP 页面。在进行访问后,你会看到一个类似于下图的页面:

结论

本文介绍了如何利用 Next.js 来创建 AMP 页面。我们了解了 AMP 页面的结构和内容,以及如何在 Next.js 中动态输出页面,以支持 AMP 和非 AMP 页面。希望你能够受益于本文,并能够在实际开发过程中运用到这些技术。

如果你还想了解更多关于 Next.js 的内容,可以参考 Next.js 文档 https://nextjs.org/docs/getting-started。

参考资料

  1. How to build AMP pages with Next.js;
  2. Next.js Documentation.

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6715c306ad1e889fe218cb70


猜你喜欢

  • GraphQL 中的一个常见设计错误及解决方法

    GraphQL 是一种用于构建 API 的查询语言和执行引擎。它具有灵活性和开放性,但也存在一些常见的设计错误。其中之一是在 GraphQL 查询中包含太多的嵌套字段,导致查询性能下降。

    2 天前
  • Mocha 测试中遇到的依赖性问题及解决方法

    前言 Mocha 是一种流行的 JavaScript 测试框架,它可以用于编写单元测试、集成测试和端到端测试。但当 Mocha 构建测试时,我们有时会遇到依赖性问题,这可能引起我们的测试失败。

    2 天前
  • 如何通过 GraphQL 优化 Serverless 的 API 操作

    随着 Serverless 架构在应用开发中的广泛使用,API 操作也变得越来越重要。在传统的 REST API 中,我们经常会遇到繁琐的请求响应、超链接以及版本管理等问题。

    2 天前
  • 如何为运动障碍人士打造一个无障碍网站?

    在计算机科学领域,我们通常会谈论如何设计优秀的用户界面,使其更易于使用并且方便用户浏览。无障碍设计是一个关键的方面,可能尤为重要的是让网站能够访问到所有用户,包括那些有运动障碍的用户。

    2 天前
  • RESTful API 常见错误及解决方法

    RESTful API 是一种使用 HTTP 协议进行数据通信的 Web 程序设计风格,该风格的API具备良好的可读性、灵活性和易扩展性,被广泛应用于前后端分离的 Web 开发中。

    2 天前
  • 开发者分享:Fastify Node 应用程序性能和安全细节最佳实践

    Fastify 是一个快速且低开销的 Web 框架。它是构建高效应用程序的理想选择。Fastify 还提供强大的安全性能,可以帮助开发人员更好地保护他们的 web 应用程序。

    2 天前
  • Redis 数据溢出的危害及解决办法

    1. 前言 Redis 是一个非常受欢迎的内存数据库,因为它的高性能和易用性而备受前端工程师的青睐。然而,Redis 的内存受限制,如果不注意使用,可能会导致数据溢出,造成不可挽回的损失。

    2 天前
  • MongoDB 聚合操作的实现方法

    在 MongoDB 中,聚合操作允许您处理数据并生成计算结果。聚合操作可以将多个文档合并为一个结果文档,让您在查询过程中同时进行多种操作,例如汇总数据,分组数据和筛选数据。

    2 天前
  • Cypress 自动化测试:如何实现 CI/CD 持续集成

    前言 在现代的软件开发中,自动化测试越来越受到广泛的关注。然而,自动化测试不仅关注测试用例的数量,还包括测试的责任、代码质量、代码覆盖率等多个方面。考虑到这些因素,许多公司已经开始采用 CI/CD(持...

    2 天前
  • Hapi 进阶:如何使用 Hapi-Request-Log 插件记录请求日志

    在前端开发中,日志是我们经常需要用到的工具之一。Hapi 作为一款常用的 Node.js Web 应用程序框架也同样需要方便地记录请求日志。Hapi-Request-Log 插件正是为了满足这一需求而...

    2 天前
  • Kubernetes 如何处理 Pod 启动错误的信息

    在 Kubernetes 中,Pod 是最小的可部署单元。当 Pod 启动失败时,Kubernetes 提供了多种处理方式来帮助开发人员快速定位和解决问题。 前提条件 本文将假设您已经熟悉 Kuber...

    2 天前
  • React.js 中 SPA 路由优化技巧

    Single-page application (SPA) 是一种现代的 Web 应用程序架构,其核心思想是使用 AJAX 技术在前端渲染页面。React.js 是构建SPA的一个流行框架,其路由机制...

    2 天前
  • chai.js 的 “期望” 方法如何进行常规表达式比较

    简介 chai.js 是一个非常流行的 JavaScript 测试框架,它提供了一种强大的语言来编写测试,其中一个重要的功能就是 expect 方法,它用于进行预期断言,即对执行结果的比较。

    2 天前
  • Promise 的错误处理及解决方案

    Promise 的错误处理及解决方案 Promise 是一个 JavaScript 标准库,用于处理异步操作的结果。它已经成为现代前端开发中不可或缺的一部分。然而,在处理 Promise 的过程中,错...

    2 天前
  • 如何在 Express.js 应用程序中处理跨域请求

    跨域是 Web 开发中常见的问题,通常在客户端(浏览器)禁止 JavaScript 从不同的源头获取数据时发生。为了解决跨域问题,我们需要设置前端和后端的 CORS(跨域资源共享)规则,以便浏览器允许...

    2 天前
  • Angular 应用中的数据加密方案解析

    在现代 Web 应用程序中,隐私和安全性越来越得到重视。随着前端技术的不断发展,数据加密变得越来越重要。本文将介绍在 Angular 应用中实现数据安全的基本概念和方案,并提供示例代码。

    2 天前
  • 如何使用 GraphQL 实现数据版本控制?

    数据版本控制是数据管理中的基本概念。在前端开发中,我们经常需要对数据进行版本控制以确保数据的一致性和可靠性。GraphQL 是一种用于 API 的查询语言和运行时,它提供了一种优雅的方式来实现数据版...

    2 天前
  • 使用 Mocha 和 MongoDB Memory Server 进行集成测试

    在开发前端应用程序时,集成测试是非常重要的一部分。它可以确保各个组件在一起协作时能够正常运行,并能减少后期 bug 修复的工作量。本文将介绍如何使用 Mocha 和 MongoDB Memory Se...

    2 天前
  • 如何实现硬件和软件无障碍性支持?

    无障碍性是指确保产品和服务对于所有用户,包括那些有身体、注意力、语言、认知、感知、学习能力、文化和技术能力等多种不同类型和程度残缺的用户,都能够使用。现代技术中,硬件和软件无障碍性支持变得日益重要。

    2 天前
  • RESTful API 中的状态码(Status Code)指南

    在构建和使用 RESTful API 时,状态码是非常重要的一部分。它们可以向客户端通知请求的结果,以及指示客户端下一步应该采取哪些行动。 本文将为您提供有关 RESTful API 中常见的状态码的...

    2 天前

相关推荐

    暂无文章