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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 【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 技术,提升应用的用户体验。

相关文章
|
7天前
|
监控 安全 Linux
RHEL 环境下 Subversion 服务器部署与配置
【10月更文挑战第18天】在RHEL环境下部署Subversion服务器需依次完成安装Subversion、创建版本库、配置服务器、启动服务、客户端连接及备份维护等步骤。确保遵循安全最佳实践,保障数据安全。
|
11天前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
45 5
|
11天前
|
Prometheus Kubernetes 监控
k8s部署针对外部服务器的prometheus服务
通过上述步骤,您不仅成功地在Kubernetes集群内部署了Prometheus,还实现了对集群外服务器的有效监控。理解并实施网络配置是关键,确保监控数据的准确无误传输。随着监控需求的增长,您还可以进一步探索Prometheus生态中的其他组件,如Alertmanager、Grafana等,以构建完整的监控与报警体系。
104 60
|
2天前
|
机器学习/深度学习 JavaScript 前端开发
深入探索WebAssembly:提升Web应用的性能
【10月更文挑战第15天】深入探索WebAssembly:提升Web应用的性能
11 3
|
4天前
|
存储 固态存储 安全
阿里云服务器X86计算架构解析与X86计算架构云服务器收费价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中X86计算是用户选择最多的一种架构,本文将深入探讨阿里云X86计算架构的云服务器,包括其技术特性、适用场景、性能优势以及最新价格情况。
|
4天前
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
10 1
|
5天前
|
域名解析 网络协议 CDN
阿里云服务器购买后如何解析域名,三步操作即可解析绑定
阿里云服务器购买后如何解析域名,三步操作即可解析绑定
|
5天前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
8天前
|
安全 Linux 数据安全/隐私保护
RHEL 环境下 Subversion 服务器部署与配置
【10月更文挑战第17天】在RHEL环境下部署Subversion服务器包括安装Subversion、创建和配置版本库、启动服务器、客户端连接以及备份与恢复等步骤。通过这些步骤,可确保服务器的安全性和稳定性,满足版本控制需求。
|
9天前
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
27 3

推荐镜像

更多