从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果

简介: 【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。

服务器端渲染(Server-Side Rendering,简称SSR)是现代Web开发中的一项重要技术,它允许在服务器上生成HTML页面,然后将这些页面发送给浏览器进行展示。这对于SEO优化、提高首屏加载速度以及改善用户体验都有着显著的好处。Angular Universal 是 Angular 官方提供的 SSR 解决方案,它允许 Angular 应用在服务器端运行并生成静态 HTML 文件。本文将通过具体示例,详细介绍如何使用 Angular Universal 实现 Angular 应用的服务器端渲染,并分享最佳实践。

首先,确保你的开发环境中已经安装了 Node.js 和 npm。接下来,我们将使用 Angular CLI 创建一个新的 Angular 项目:

ng new angular-universal-example
cd angular-universal-example

然后,我们需要安装 Angular Universal 相关的依赖包:

npm install --save @nguniversal/express-engine @nguniversal/module-map-ngfactory-loader
npm install --save-dev @nguniversal/builders

@nguniversal/express-engine 用于在 Express 服务器中渲染 Angular 应用,@nguniversal/module-map-ngfactory-loader 用于加载 Angular 组件工厂,而 @nguniversal/builders 提供了 Angular CLI 插件来支持 SSR 构建。

接下来,配置 Angular CLI 使用 Angular Universal 进行 SSR 构建。编辑 angular.json 文件,添加 serverprerender 任务:

"architect": {
   
  "build": {
   },
  "serve": {
   },
  "server": {
   
    "builder": "@nguniversal/builders:webpack",
    "options": {
   
      "project": "angular-universal-example-server"
    },
    "configurations": {
   
      "production": {
   
        "optimization": true,
        "outputHashing": "all",
        "fileReplacements": [
          {
   
            "replace": "src/environments/environment.ts",
            "with": "src/environments/environment.prod.ts"
          }
        ]
      }
    }
  },
  "prerender": {
   
    "builder": "@nguniversal/nextjs-craftsman:prerender",
    "options": {
   
      "routes": ["/", "/about"]
    },
    "dependencies": ["server"]
  }
}

这里我们定义了两个新的目标:server 用于构建服务器端应用,prerender 用于预渲染静态页面。

接下来,创建服务器端应用。在项目根目录下运行以下命令:

ng generate @nguniversal:server --project=angular-universal-example

这将生成一个名为 angular-universal-example-server 的项目,并在 projects 文件夹下创建服务器端代码。

现在,我们需要设置一个 Express 服务器来托管和渲染 Angular 应用。在项目根目录下创建一个名为 server.ts 的文件,并添加以下内容:

import 'reflect-metadata';
import * as express from 'express';
import {
    join } from 'path';
import {
    AppServerModuleNgFactory, LAZY_MODULE_MAP } from './dist/server/main';
import {
    renderModuleFactory } from '@angular/platform-express';
import {
    provideModuleMap } from '@nguniversal/module-map-ngfactory-loader';

async function bootstrap() {
   
  const app = express();

  // Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
  app.engine('html', (_, options, callback) => {
   
    renderModuleFactory(AppServerModuleNgFactory, {
   
      document: options.req.rawHeaders[1],
      url: options.req.url,
      // The bootstrap mechanism for Angular apps
      extraProviders: [provideModuleMap(LAZY_MODULE_MAP)]
    }).then(html => {
   
      callback(null, html);
    });
  });

  app.set('view engine', 'html');
  app.set('views', join(process.cwd(), 'dist/browser'));

  // Example Express Rest API endpoints
  // app.get('/api/**', (req, res) => { /* ... */ });

  // Serve static files from /browser
  app.get('*.*', express.static(join(process.cwd(), 'dist/browser')));

  // All regular routes use the Universal engine
  app.get('*', (req, res) => {
   
    res.render('index', {
    req });
  });

  // Start up the Node server
  app.listen(process.env.PORT || 4000);

  console.log(`Node Express server listening on http://localhost:${
     process.env.PORT || 4000}`);
}

bootstrap();

这段代码设置了一个 Express 服务器,并使用 renderModuleFactory 来渲染 Angular 应用。我们还设置了静态文件服务,以便客户端 JavaScript 文件和其他资源可以从浏览器目录中提供。

最后,构建并启动服务器:

ng run angular-universal-example:server --prod

这将构建服务器端应用,并生成 dist/server 目录下的文件。然后,你可以通过运行 node dist/server/main.js 来启动服务器。

通过上述步骤,我们成功地将 Angular 应用转换为了支持服务器端渲染的形式。这种方法不仅提高了应用的性能,还增强了搜索引擎的友好性。希望本文提供的代码示例和实践指南能够帮助你在实际项目中更好地应用 Angular Universal 技术,提升应用的用户体验。

相关文章
|
29天前
|
弹性计算 开发框架 Ubuntu
阿里云服务器ECS镜像知识解析:功能特性、场景及上手实操教程参考
对于部分初次选择阿里云服务器的新手用户来说,可能并不是很清楚阿里云服务器镜像是什么?ECS镜像堪称搭建ECS实例的基础模板,其中涵盖了启动及运行实例所必需的操作系统以及预先配置好的数据。本文将围绕阿里云服务器镜像的相关知识展开介绍,助力大家全方位了解并熟练运用这一强大功能。
|
24天前
|
存储 NoSQL 固态存储
阿里云服务器ESSD云盘解析:性能、计费与适用场景介绍
阿里云服务器ESSD(Enterprise SSD)云盘深度融合了25 GE(千兆以太网)网络与RDMA(Remote Direct Memory Access,远程直接内存访问)技术。凭借这一先进的技术组合,它能够为单个云盘赋予高达100万的随机读写性能,同时实现单路情况下的低时延特性。本文将围绕阿里云服务器ESSD云盘展开全面且深入的介绍,涵盖其规格参数、计费模式、适用应用场景、对NVMe协议的支持情况、容量范围与性能级别之间的关联,以及不同实例规格下的存储I/O性能表现等多个方面,旨在助力读者全方位、深入地了解这一卓越的云盘产品。
|
27天前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry和ESSD等云盘解析:区别、应用场景与选择参考
阿里云服务器提供了包括ESSD Entry、ESSD、SSD云盘、高效云盘等丰富多样的云盘类型,以满足不同用户在不同业务场景下的需求。每种云盘都有其独特的性能特点和适用场景,为了帮助用户更好地理解和选择云盘,本文将详细解析阿里云服务器各个云盘的定义、区别、选择参考以及常见问题。让大家对阿里云服务器不同云盘的性能和适用场景有更全面的了解,尤其是ESSD Entry云盘和ESSD云盘,并能够根据自己的需求做出最适合自己的选择。
|
1月前
|
缓存 弹性计算 数据挖掘
阿里云服务器经济型e与通用算力型u1实例怎么选?二则性能及适用场景区别参考
在当今数字化时代,云服务器已成为众多个人开发者、学生、小微企业以及中小企业开展业务、搭建网站、运行应用程序等不可或缺的基础设施。阿里云推出了多种类型的云服务器实例,以满足不同用户的需求。其中,经济型e实例和通用算力型u1实例备受关注。经济型e实例ECS云服务器2核2G3M带宽新购和续费同价99元1年,通用算力型u1实例2核4G5M带宽新购和续费同价199元1年(限企业用户)、4核8G云服务器955元1年。本文将为大家介绍阿里云服务器中的经济型e实例和通用算力型u1实例的特点、区别以及新手选择参考。
|
1月前
|
存储 缓存 安全
阿里云九代云服务器c9i/g9i/r9i实例性能、适用场景解析及活动价格参考
阿里云九代云服务器c9i、g9i、r9i实例是其最新推出的高性能企业级云服务器,凭借其卓越的性能和丰富的功能,广泛应用于机器学习推理、数据分析、高网络包收发等众多场景。接下来,我们将深入探讨这三款实例的性能、适用场景以及价格等方面的详细信息。
149 15
|
1月前
|
存储 机器学习/深度学习 安全
阿里云服务器通用型实例解析:g7/g8a/g8y/g8i性能对比与场景化选型参考
在阿里云服务器的通用型实例规格中,通用型g7、通用型g8a、通用型g8y和通用型g8i,凭借其强大的性能和灵活的配置,成为了众多企业和开发者的首选。这几个实例规格相比经济型e和通用算力型u1等实例规格,性能更为强劲,尽管它们的处理器与内存配比通常为1:4,但在处理器架构、存储能力、网络性能及安全特性等方面各有千秋,因此适用场景也各有侧重。以下是对通用型g7、g8a、g8y、g8i实例的详细性能对比、适用场景分析及选择建议。
|
1月前
|
弹性计算 数据挖掘 测试技术
阿里云服务器2核8G、4核16G、8核32G配置热门实例性能、适用场景对于与选择参考
2025年,阿里云针对2核8G、4核16G、8核32G这三种主流配置,推出了一系列极具吸引力的活动,为用户提供了多样化的选择。目前,2核8G配置的云服务器活动价格为522.79元/年起,4核16G配置的云服务器活动价格为2149.92元/年起,而8核32G配置的云服务器活动价格则为4249.44元/年起。这些价格涵盖了经济型e、通用算力型u1、通用型g8i、通用型g7和通用型g8y等不同实例规格,为用户提供了多样化的选择。本文将对这些配置热门实例规格的实例性能、适用场景和活动价格做个对比,以供选择和参考。
|
1月前
|
存储 缓存 数据挖掘
阿里云服务器实例选购指南:经济型、通用算力型、计算型、通用型、内存型性能与适用场景解析
当我们在通过阿里云的活动页面挑选云服务器时,相同配置的云服务器通常会有多种不同的实例供我们选择,并且它们之间的价格差异较为明显。这是因为不同实例规格所采用的处理器存在差异,其底层架构也各不相同,比如常见的X86计算架构和Arm计算架构。正因如此,不同实例的云服务器在性能表现以及适用场景方面都各有特点。为了帮助大家在众多实例中做出更合适的选择,本文将针对阿里云服务器的经济型、通用算力型、计算型、通用型和内存型实例,介绍它们的性能特性以及对应的使用场景,以供大家参考和选择。
|
4月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
408 29

热门文章

最新文章

推荐镜像

更多
  • DNS