Nodejs 第十一章(CSR SSR SEO)

简介: Nodejs 第十一章(CSR SSR SEO)

概述

在上一章的时候我们说过在node环境中无法操作DOM 和 BOM,但是如果非要操作DOM 和 BOM 也是可以的我们需要使用第三方库帮助我们jsdom

npm i jsdom

jsdom 是一个模拟浏览器环境的库,可以在 Node.js 中使用 DOM API

简单案例

const fs = require('node:fs')
const { JSDOM } = require('jsdom')
const dom = new JSDOM(`<!DOCTYPE html><div id='app'></div>`)
const document = dom.window.document
const window = dom.window
fetch('https://api.thecatapi.com/v1/images/search?limit=10&page=1').then(res => res.json()).then(data => {
    const app = document.getElementById('app')
    data.forEach(item=>{
       const img =  document.createElement('img')
       img.src = item.url
       img.style.width = '200px'
       img.style.height = '200px'
       app.appendChild(img)
    })
    fs.writeFileSync('./index.html', dom.serialize())
})

运行完该脚本会在执行目录下生成html文件里面内容都是渲染好的

CSR SSR

我们上面的操作属于SSR (Server-Side Rendering)服务端渲染请求数据和拼装都在服务端完成,而我们的Vue,react 等框架这里不谈(nuxtjs,nextjs),是在客户端完成渲染拼接的属于CSR(Client-Side Rendering)客户端渲染

CSR 和 SSR 区别

  1. 页面加载方式:
  • CSR:在 CSR 中,服务器返回一个初始的 HTML 页面,然后浏览器下载并执行 JavaScript 文件,JavaScript 负责动态生成并更新页面内容。这意味着初始页面加载时,内容较少,页面结构和样式可能存在一定的延迟。
  • SSR:在 SSR 中,服务器在返回给浏览器之前,会预先在服务器端生成完整的 HTML 页面,包含了初始的页面内容。浏览器接收到的是已经渲染好的 HTML 页面,因此初始加载的速度较快。
  1. 内容生成和渲染:
  • CSR:在 CSR 中,页面的内容生成和渲染是由客户端的 JavaScript 脚本负责的。当数据变化时,JavaScript 会重新生成并更新 DOM,从而实现内容的动态变化。这种方式使得前端开发更加灵活,可以创建复杂的交互和动画效果。
  • SSR:在 SSR 中,服务器在渲染页面时会执行应用程序的代码,并生成最终的 HTML 页面。这意味着页面的初始内容是由服务器生成的,对于一些静态或少变的内容,可以提供更好的首次加载性能。
  1. 用户交互和体验:
  • CSR:在 CSR 中,一旦初始页面加载完成,后续的用户交互通常是通过 AJAX 或 WebSocket 与服务器进行数据交互,然后通过 JavaScript 更新页面内容。这种方式可以提供更快的页面切换和响应速度,但对于搜索引擎爬虫和 SEO(搜索引擎优化)来说,可能需要一些额外的处理。
  • SSR:在 SSR 中,由于页面的初始内容是由服务器生成的,因此用户交互可以直接在服务器上执行,然后服务器返回更新后的页面。这样可以提供更好的首次加载性能和对搜索引擎友好的内容。

SEO

SEO (Search Engine Optimization,搜索引擎优化)

CSR应用对SEO并不是很友好

因为在首次加载的时候获取HTML 信息较少 搜索引擎爬虫可能无法获取完整的页面内容

而SSR就不一样了 由于 SSR 在服务器端预先生成完整的 HTML 页面,搜索引擎爬虫可以直接获取到完整的页面内容。这有助于搜索引擎正确理解和评估页面的内容

说了这么多哪些网站适合做CSR 哪些适合做SSR

CSR 应用例如 ToB 后台管理系统 大屏可视化 都可以采用CSR渲染不需要很高的SEO支持

SSR 应用例如 内容密集型应用大部分是ToC 新闻网站 ,博客网站,电子商务,门户网站需要更高的SEO支持

目录
相关文章
|
8月前
|
机器学习/深度学习 数据采集 人工智能
给AI模型“加外挂”:LoRA技术详解,让小白也能定制自己的大模型
LoRA是一种高效轻量的大模型微调技术,如同为万能咖啡机加装“智能香料盒”——不改动原模型(冻结参数),仅训练少量低秩矩阵(参数量降千倍),显著降低成本、保留通用能力,并支持插件式灵活部署。现已成为AI定制化普惠落地的核心方案。(239字)
2126 8
|
机器学习/深度学习 人工智能 算法
展望2024: 中国AI算力能否引爆高性能计算和大模型训练的新革命?
2023年是人工智能发展的重要转折年,企业正在从业务数字化迈向业务智能化。大模型的突破和生成式人工智能的兴起为企业实现产品和流程的革新提供了先进工具,引领产业迈入智能创新的新阶段。在这个新时代,企业不再仅关注如何增强智能化能力,而更加注重如何利用人工智能实现产品和流程的革新。
3738 0
|
3月前
|
编解码 运维 算法
iOS云手机H.264与H.265编解码技术对比 2026远程低延迟传输选型科普
云手机流畅度关键在视频编码!H.264兼容广但耗流高、延迟大;H.265硬编码码率降50%、延迟≤30ms,苹果原生优化,省流又跟手。2026年中高端云手机已全面转向H.265,iOS用户务必认准硬件编码方案。(239字)
|
8月前
|
缓存 Rust JavaScript
更快、更安全、更现代:用 uvx 替代 npx 执行临时 CLI 工具
`uvx` 是超快、安全、跨语言的 CLI 工具运行器(来自 Rust 编写的 `uv`),支持 Python/Node.js/Rust/Go 等生态,无需预装环境,自动隔离缓存,速度比 `npx` 快 3–5 倍,真正实现“Just run it”。
1470 1
|
存储 关系型数据库 BI
如何开发ERP系统中的财务管理板块(附架构图+流程图+代码参考)
本文深入解析ERP系统中财务管理模块的设计与实现,涵盖核心功能、业务流程、开发技巧及代码示例,助力企业打造高效、智能的财务管理系统。
|
存储 资源调度 并行计算
# Qwen3-8B 与 Qwen3-14B 的 TTFT 性能对比与底层原理详解
通义千问Qwen3系列是通义实验室2025年推出的最新大模型,包含多种参数版本,其中Qwen3-8B与Qwen3-14B均支持32K token上下文。Qwen3-8B参数量较小,响应更快,适合低延迟交互;Qwen3-14B参数更多,推理更强,适用于复杂任务。两者在TTFT、架构优化、量化技术及部署方案上各有侧重,满足多样应用场景需求。
6154 10
|
JavaScript 前端开发 索引
JS遍历数组里数组下的对象,根据数组中对象的某些值,组合成新的数组对象
这篇文章介绍了如何在JavaScript中遍历数组里数组下的对象,并根据对象的某些属性值组合成一个新的数组对象。主要内容包括使用ES6的`for...of`循环来遍历数组对象,然后根据需要提取对象中的属性值,并将它们放入新的对象中,最终形成一个新的对象数组以供使用。
|
人工智能 Kubernetes Devops
VMware vSphere 9.0 下载 - 企业级工作负载平台
VMware vSphere 9.0 下载 - 企业级工作负载平台
1140 9
VMware vSphere 9.0 下载 - 企业级工作负载平台
|
JSON 资源调度 JavaScript
nodemon 启动问题:nodemon : 无法将“nodemon”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
【6月更文挑战第3天】在尝试运行`nodemon`时遇到错误,提示无法识别该命令。问题可能是缺少nodemon环境或系统不允许执行脚本。解决方法包括:首先尝试使用`npm install nodemon -g`全局安装nodemon,如果安装失败,可能需要以管理员权限打开PowerShell,执行`set-ExecutionPolicy RemoteSigned`,然后再次尝试安装。nodemon是一款用于Node.js开发的工具,能监控源码变化自动重启应用,常用于提高开发效率。安装后,通过`nodemon your-app.js`启动应用,可自定义配置如监听特定文件、扩展名或目录。
5531 1
|
存储 JavaScript 前端开发
❤Nodejs 第十四章(node中间件multer的认识安装使用)
【4月更文挑战第14天】Multer是Node.js用于处理multipart/form-data的中间件,专注于文件上传。。基本用法包括设置存储引擎,如磁盘存储(DiskStorage)或内存存储(MemoryStorage),并指定处理单个或多个文件的方法。例如,`multer.single(&#39;file&#39;)`处理单个文件上传。存储引擎DiskStorage适合永久保存,而MemoryStorage适合临时处理。可以通过`limits`选项限制文件大小,实现不同类型的文件有不同的大小限制。
1245 0

热门文章

最新文章