「浏览器」服务端渲染

前言

服务端渲染(Server-Side Rendering,SSR)是一种常见于网页应用的技术,它指的是在服务器上将网页的内容生成,然后发送完整的HTML页面到客户端的浏览器的过程。这与传统的客户端渲染(Client-Side Rendering,CSR)相对,客户端渲染是在用户的浏览器上动态生成页面内容。

在这里插入图片描述

示例

EJS(Embedded JavaScript templating)是一个流行的模板引擎,它可以嵌入JavaScript代码到HTML页面中。它通过特定的模板标签让你能够将服务器端的数据插入到HTML页面中。这个过程通常用于服务端渲染(SSR)中,以动态地创建HTML页面,这些页面包含了来自服务器端的数据和逻辑。

下面是一个基于Node.js和EJS实现的简单服务端渲染的代码示例:

首先,你需要安装 ejsexpress

npm install express ejs

然后,你可以创建一个基础的Express服务器并使用EJS作为模板引擎:

const express = require('express');
const app = express();// 设置EJS为模板引擎
app.set('view engine', 'ejs');// 定义一个路由来渲染EJS模板
app.get('/', (req, res) => {// 模拟一些要传递到模板的数据const data = {title: 'Hello World',content: 'This is a server-side rendered page using EJS.',items: ['Apple', 'Banana', 'Orange']};// 渲染`views/index.ejs`模板,并传入数据res.render('index', data);
});// 启动服务器
const PORT = 3000;
app.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});

在你的views目录中,你需要有一个index.ejs文件,它可以是像这样的:

<!DOCTYPE html>
<html>
<head><title><%= title %></title>
</head>
<body><h1><%= content %></h1><ul><% items.forEach(function(item) { %><li><%= item %></li><% }); %></ul>
</body>
</html>

在这个EJS模板中,<%= %>标签用来输出变量的值,而<% %>标签用来执行任意的JavaScript代码,比如循环或者条件判断。此模板会获得从服务器传递过来的data对象,然后它用这个数据来动态插入标题、内容和列表项到页面中。

当用户访问根URL(/)时,这个页面将会被服务端渲染并响应给用户的浏览器,显示动态生成的带有数据的HTML内容。这就是在Node.js中使用EJS进行服务端渲染的一个基础示例。

优点

服务端渲染的优点包括:

  1. 更快的首屏加载:用户能够更快地看到完整渲染的页面,因为服务器已经处理了大部分的内容生成。
  2. 搜索引擎优化(SEO):由于内容已经在服务端完成渲染,搜索引擎可以更容易地抓取和索引网页内容,这对SEO是有利的。
  3. 更好的性能:对于那些处理能力较弱的客户端设备来说,服务器端渲染可能会提供更好的性能体验。
  4. 减轻客户端的负担:因为页面是在服务器上生成,客户端需要做的工作更少,可以减少设备的能耗和计算需求。

缺点

服务端渲染的缺点包括:

  1. 服务器加载:所有的渲染负担都在服务器上,可能会导致服务器性能压力增大。
  2. 响应时间:在服务器负载较高的情况下,页面的生产和传输可能会需要更多的时间,这会影响到用户体验。
  3. 缓存策略:对于高度动态的内容,实现有效的缓存策略可能比较困难,因为每个用户请求可能都需要生成新的页面。

总结

现代的网页开发通常会结合服务端渲染和客户端渲染的优点,使用如Next.js、Nuxt.js等框架支持的通用(同构)渲染,以提供最佳的用户体验和性能。这种方式可以让应用的首屏直接由服务端渲染并提供给客户端,而后续的页面交互则由客户端接管,从而结合两种渲染方式的优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bean作用域和生产周期已经Bean的线程安全问题

bean 的作用域 单例(Singletion) : Spring 容器中只有一个 bean &#xff0c;这个 bean 在整个应用程序内共享。 原话(Prototype) : 每次 getBean()&#xff0c; 都是不同的bean&#xff0c;都会创建一个实例。 请求(Request)&#xff1a;每个HTTP请求都会创建一个新的 Bean …

旧衣回收小程序带来的收益优势,小程序有哪些功能?

随着互联网的快速发展&#xff0c;大众对旧衣回收市场也越来越了解&#xff0c;对于闲置的旧衣物也有了适合的处理方式。旧衣回收也符合了当下资源回收利用&#xff0c;因此&#xff0c;旧衣回收市场获得了爆发式增长&#xff0c;市场规模不断扩大。同时市场中还吸引了越来越多…

【调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站】

调试笔记-系列文章目录 调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站 文章目录 调试笔记-系列文章目录调试笔记-20240530-Linux-在 OpenWRT-23.05 上为 nginx 配置 HTTPS 网站 前言一、调试环境操作系统&#xff1a;OpenWrt 23.05.3调试环境调试目标…

安全风险 - 组件导出风险

在安全审查中关于组件导出风险是一种常见问题&#xff0c;不同组件都有可能遇到这种问题&#xff0c;而且从一定角度来看的话&#xff0c;如果涉及到三方业务&#xff0c;基本处于无法解决的场景&#xff0c;所以我们需要说明为何无法避免这种风险 组件导出风险能不能规避&…

【智能AI相机】基于AI的新型成像和照明技术

缩短检测时间 降低废品率和成本 更快捕捉更多缺陷 ” Trevista CI Dome将康耐视专利的计算成像算法与结构化漫射圆顶照明相结合&#xff0c;提供无与伦比的地形图像质量&#xff0c;为光泽和哑光表面检测提供创新解决方案。有助于&#xff1a;缩短检测时间、降低废品率和成本…

北京仁爱堂李艳波主任如何预约挂号?

北京仁爱堂擅长治疗神经系统疾病&#xff0c;例如&#xff1a;痉挛性斜颈&#xff0c;特发性震颤&#xff0c;眼球震颤&#xff0c;帕金森&#xff0c;眼球震颤等。 北京仁爱堂国医馆是一所集治疗、 预防、保健、养生于一体的传统中医诊所&#xff0c;具有精湛技术和丰富经验的…

C#的web项目ASP.NET

添加实体类和控制器类 using System; using System.Collections.Generic; using System.Linq; using System.Web;namespace WebApplication1.Models {public class Company{public string companyCode { get; set; }public string companyName { get; set; }public string com…

Vue进阶之Vue无代码可视化项目(一)

Vue无代码可视化项目 项目搭建初始步骤拓展:工程项目从0-1项目规范化package.jsoncpell.jsoncustom-words.txtts-eslint规则.eslintrc.cjsgit钩子检查有没有问题type-checkspellchecklint:stylehusky操作安装pre-commitpnpm的commit规范package.json:commitlint.config.cjs安装…

跨站点脚本 (XSS) 攻击是什么

跨站点脚本 (XSS) 攻击是什么 跨站点脚本&#xff08;Cross-Site Scripting&#xff0c;简称 XSS&#xff09;攻击是一种注入攻击&#xff0c;其中恶意脚本被注入到受信任的网站中。攻击者使用 Web 应用程序向不同的最终用户发送恶意代码&#xff0c;通常以浏览器端脚本的形式…

论文笔记:Image Anaimation经典论文-运动关键点模型(Monkey-Net)

Monkey-Net&#xff08;MOviNg KEYpoints&#xff09; paper: https://arxiv.org/pdf/1812.08861, CVPR 2019 code: https://github.com/AliaksandrSiarohin/monkey-net/tree/master 相关工作 视频生成演变过程&#xff1a; spatio-temporal network: 如基于GAN网络的生成模…

异常处理1--5.31

try--catch--finally格式&#xff1a; try{ }catch(错误类型){ }finally{ } 执行情况&#xff1a; package javatest5;public class test {public static void main(String[] args) {int num115;int num20;try{System.out.println("商等于&#xff1a;"num1/num…

太速科技-基于3U VPX 4核8线程I7 X86主板

基于3U VPX 4核8线程I7 X86主板 一、产品概述 该产品是一款基于第六代Intel i7四核八线程处理器的高性能3U VPX刀片式计算机。产品提供了4个x4 PCIe 3.0总线接口&#xff0c;其中2个x4 PCIe 3.0接口可配置为1个x8 PCIe3.0接口&#xff0c;另外2个x4 PCIe 3.0接口可灵活配置…

Unity版本使用情况统计(更新至2024年4月)

UWA发布&#xff5c;本期UWA发布的内容是第十四期Unity版本使用统计&#xff0c;统计周期为2023年11月至2024年4月&#xff0c;数据来源于UWA网站&#xff08;www.uwa4d.com&#xff09;性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势作为参考。 2023年11月 - 2024年…

达梦数据库(六) -------- 数据迁移MYSQL->达梦数据库

前言&#xff1a;确保安装好达梦数据库&#xff0c;达梦数据库(三) -------- 安装和初始化达梦数据库_达梦数据库安装-CSDN博客&#xff0c;需要安装达梦的数据库软件包&#xff0c;直接安装达梦8是包含这个功能的。安装包下载地址如下需要注册&#xff1a; https://www.damen…

【网络安全】Web安全学习-前言及先导

一、网络安全概述 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或者恶意的原因遭到破坏、更改、泄露&#xff0c;系统能连续可靠的正常运行&#xff0c;网络服务不中断。简单来说。就是要保障我们的网络环境安全稳定&#xff0c;不被人破…

vmware workstation 17.0.0 ubuntu删除快照导致无法启动的问题打不开磁盘xxxxxxx或它所依赖的某个快照磁盘

在使用vmware workstation的时候 在我删除多余的快照的时候&#xff0c;发现删除快照后打不开虚拟机了&#xff0c; 提示&#xff1a; 打不开此虚拟磁盘的父磁盘打不开磁盘“D:\Virtual Machines\Ubuntu 64 位\Ubuntu 64 位-000003.vmdk”或它所依赖的某个快照磁盘。模块“Dis…

docker 启动关闭,设置仓库地址

1. 配置/etc/docker/daemon.json cat /etc/docker/daemon.json# 内容 {"registry-mirrors": ["https://0nth4654.mirror.aliyuncs.com"],"insecure-registries": ["harbor.domain.io"] }2. 配置systemd启动文件 和方法1配置会有冲突&a…

C语言 | Leetcode C语言题解之第124题二叉树中的最大路径和

题目&#xff1a; 题解&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ int max; int dfs(struct TreeNode* root){if(!root) return 0;int left dfs(root->left…

基于Raspi的Opencv-Python开发笔记

本文所有未强调 “windows终端” 的 “终端”字眼&#xff0c;都是默认树莓派的终端 系统版本 系统版本有必要强调一下&#xff0c;因为不同版本很多操作需要修改 在终端输入uname -a Release就是版本号&#xff0c;Codename是版本名 以下操作仅在此版本验证可行 使能摄像…

WalleWeb简化你的DevOps部署流程

walle-web&#xff1a;简化部署流程&#xff0c;提升开发效率&#xff0c;Walle Web让DevOps触手可及 - 精选真开源&#xff0c;释放新价值。 概览 Walle Web是一个功能强大且免费开源的DevOps平台&#xff0c;旨在简化和自动化代码部署流程。它支持多种编程语言&#xff0c;包…