我的编程空间,编程开发者的网络收藏夹
学习永远不晚

vue3.0支不支持服务端渲染

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

vue3.0支不支持服务端渲染

这篇文章主要介绍“vue3.0支不支持服务端渲染”,在日常操作中,相信很多人在vue3.0支不支持服务端渲染问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3.0支不支持服务端渲染”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

vue3.0支持服务端渲染。Vue支持将组件在服务端直接渲染成HTML字符串,作为服务端响应返回给浏览器,最后在浏览器端将静态的HTML“激活”(hydrate) 为能够交互的客户端应用。一个由服务端渲染的Vue应用可以被认为是“同构的” 或“通用的,因为应用的大部分代码同时运行在服务端和客户端。vue用服务端渲染的优势:更快的首屏加载、统一的心智模型、更好的SEO。

vue支持服务端渲染(SSR)。

Vue.js 是一个用于构建客户端应用的框架。默认情况下,Vue 组件的职责是在浏览器中生成和操作 DOM。然而,Vue 也支持将组件在服务端直接渲染成 HTML 字符串,作为服务端响应返回给浏览器,最后在浏览器端将静态的 HTML“激活”(hydrate) 为能够交互的客户端应用。

一个由服务端渲染的 Vue.js 应用也可以被认为是“同构的”(Isomorphic) 或“通用的”(Universal),因为应用的大部分代码同时运行在服务端和客户端。

为什么要用服务端渲染 (SSR)?

与客户端的单页应用 (SPA) 相比,SSR 的优势主要在于:

  • 更快的首屏加载:这一点在慢网速或者运行缓慢的设备上尤为重要。服务端渲染的 HTML 无需等到所有的 JavaScript 都下载并执行完成之后才显示,所以你的用户将会更快地看到完整渲染的页面。除此之外,数据获取过程在首次访问时在服务端完成,相比于从客户端获取,可能有更快的数据库连接。这通常可以带来更高的核心 Web 指标评分、更好的用户体验,而对于那些“首屏加载速度与转化率直接相关”的应用来说,这点可能至关重要。

  • 统一的心智模型:你可以使用相同的语言以及相同的声明式、面向组件的心智模型来开发整个应用,而不需要在后端模板系统和前端框架之间来回切换。

  • 更好的 SEO:搜索引擎爬虫可以直接看到完全渲染的页面。

使用 SSR 时还有一些权衡之处需要考量:

  • 开发中的限制。浏览器端特定的代码只能在某些生命周期钩子中使用;一些外部库可能需要特殊处理才能在服务端渲染的应用中运行。

  • 更多的与构建配置和部署相关的要求。服务端渲染的应用需要一个能让 Node.js 服务器运行的环境,不像完全静态的 SPA 那样可以部署在任意的静态文件服务器上。

  • 更高的服务端负载。在 Node.js 中渲染一个完整的应用要比仅仅托管静态文件更加占用 CPU 资源,因此如果你预期有高流量,请为相应的服务器负载做好准备,并采用合理的缓存策略。

服务端渲染 (SSR) vs. 静态站点生成(SSG)

静态站点生成 (Static-Site Generation,缩写为 SSG),也被称为预渲染,是另一种流行的构建快速网站的技术。如果用服务端渲染一个页面所需的数据对每个用户来说都是相同的,那么我们可以只渲染一次,提前在构建过程中完成,而不是每次请求进来都重新渲染页面。预渲染的页面生成后作为静态 HTML 文件被服务器托管

SSG 保留了和 SSR 应用相同的性能表现:它带来了优秀的首屏加载性能。同时,它比 SSR 应用的花销更小,也更容易部署,因为它输出的是静态 HTML 和资源文件。这里的关键词是静态:SSG 仅可以用于消费静态数据的页面,即数据在构建期间就是已知的,并且在多次部署期间不会改变。每当数据变化时,都需要重新部署。

如果你调研 SSR 只是为了优化为数不多的营销页面的 SEO (例如 /、/about 和 /contact 等),那么你可能需要 SSG 而不是 SSR。SSG 也非常适合构建基于内容的网站,比如文档站点或者博客。事实上,你现在正在阅读的这个网站就是使用 VitePress 静态生成的,它是一个由 Vue 驱动的静态站点生成器。

Hello World

准备在行动中体验服务端渲染吧。服务端渲染(即SSR)听起来很复杂,不过一个简单的Node脚本只需要3步就可以实现这个功能:

// 步骤 1:创建一个Vue实例var Vue = require('vue')var app = new Vue({  render: function (h) {    return h('p', 'hello world')  }})// 步骤 2: 创建一个渲染器var renderer = require('vue-server-renderer').createRenderer()// 步骤 3: 将 Vue实例 渲染成 HTMLrenderer.renderToString(app, function (error, html) {  if (error) throw error  console.log(html)  // => <p server-rendered="true">hello world</p>})

这并不困难。当然这个示例比大部分应用都简单,来探讨这些功能怎样运作

通过Express Web服务器实现简单的服务端渲染

如果没有一个Web服务器,很难说是服务端渲染,所以我们来补充它。我们将构建一个非常简单的服务端渲染应用,只用ES5,也不带其他构建步骤或Vue插件。

启动一个应用告诉用户他们在一个页面上花了多少时间。

new Vue({  template: '<div>你已经在这花了 {{ counter }} 秒。</div>',  data: {    counter: 0  },  created: function () {    var vm = this    setInterval(function () {      vm.counter += 1    }, 1000)  }})

为了适应服务端渲染,我们需要进行一些修改,让它可以在浏览器和Node中渲染:

  • 在浏览器中,将我们的应用实例添加到全局上下文( window)上,我们可以安装它。

  • 在Node中,导出一个工厂函数让我们可以为每个请求创建应用实例。

实现这个需要一点模板:

// assets/app.js(function () { 'use strict'  var createApp = function () {    // ---------------------    // 开始常用的应用代码    // ---------------------    // 主要的Vue实例必须返回,并且有一个根节点在id "app"上,这样客户端可以加载它。    return new Vue({      template: '<div id="app">你已经在这花了 {{ counter }} 秒。</div>',      data: {        counter: 0      },      created: function () {        var vm = this        setInterval(function () {          vm.counter += 1        }, 1000)      }    })    // -------------------    // 结束常用的应用代码    // -------------------  }  if (typeof module !== 'undefined' && module.exports) {    module.exports = createApp  } else {    this.app = createApp()  }}).call(this)

现在有了应用代码,接着加一个 html文件。

<!-- index.html --><!DOCTYPE html><html><head>  <title>My Vue App</title>  <script class="lazy" data-src="/assets/vue.js"></script></head><body>  <div id="app"></div>  <script class="lazy" data-src="/assets/app.js"></script>  <script>app.$mount('#app')</script></body></html>

主要引用assets文件夹中我们先前创建的app.js,以及vue.js文件,我们就有了一个可以运行的单页面应用

然后为了实现服务端渲染,在服务端需要加一个步骤。

// server.js'use strict'var fs = require('fs')var path = require('path')// 定义全局的Vue为了服务端的app.jsglobal.Vue = require('vue')// 获取HTML布局var layout = fs.readFileSync('./index.html', 'utf8')// 创建一个渲染器var renderer = require('vue-server-renderer').createRenderer()// 创建一个Express服务器var express = require('express')var server = express()// 部署静态文件夹为 "assets"文件夹server.use('/assets', express.static(  path.resolve(__dirname, 'assets')))// 处理所有的Get请求server.get('*', function (request, response) {  // 渲染我们的Vue应用为一个字符串  renderer.renderToString(    // 创建一个应用实例    require('./assets/app')(),    // 处理渲染结果    function (error, html) {      // 如果渲染时发生了错误      if (error) {        // 打印错误到控制台        console.error(error)        // 告诉客户端错误        return response          .status(500)          .send('Server Error')      }      // 发送布局和HTML文件      response.send(layout.replace('<div id="app"></div>', html))    }  )})// 监听5000端口server.listen(5000, function (error) {  if (error) throw error  console.log('Server is running at localhost:5000')})

这样就完成了。整个示例,克隆下来深度实验。一旦它在本地运行时,你可以通过在页面右击选择页面资源(或类似操作)确认服务选渲染真的运行了。可以在body中看到:

<div id="app" server-rendered="true">You have been here for 0 seconds&period;</div>

代替:

<div id="app"></div>

流式响应

Vue还支持流式渲染,优先选择适用于支持流的Web服务器。允许HTML一边生成一般写入相应流,而不是在最后一次全部写入。其结果是请求服务速度更快,没有缺点!

为了使上一节应用代码适用流式渲染,可以简单的替换 server.get('*',...)为下面的代码:

// 拆分布局成两段HTMLvar layoutSections = layout.split('<div id="app"></div>')var preAppHTML = layoutSections[0]var postAppHTML = layoutSections[1]// 处理所有的Get请求server.get('*', function (request, response) {  // 渲染我们的Vue实例作为流  var stream = renderer.renderToStream(require('./assets/app')())  // 将预先的HTML写入响应  response.write(preAppHTML)  // 每当新的块被渲染  stream.on('data', function (chunk) {    // 将块写入响应    response.write(chunk)  })  // 当所有的块被渲染完成  stream.on('end', function () {    // 将post-app HTML写入响应    response.end(postAppHTML)  })  // 当渲染时发生错误  stream.on('error', function (error) {    // 打印错误到控制台    console.error(error)    // 告诉客服端发生了错误    return response      .status(500)      .send('Server Error')  })})

这不比之前的版本复杂,甚至这对你来说都不是个新概念。我们做了:

  • 建立流

  • 在应用响应前写入HTML

  • 在可获得时将应用HTML写入响应

  • 在响应最后写入HTML

  • 处理任何错误

组件缓存

Vue的服务端渲染默认非常快,但是你可以通过缓存渲染好的组件进一步提高性能。这被认为是一种先进的功能,但是,如果缓存了错误的组件(或者正确的组件带有错误的内容)将导致应用渲染出错。特别注意:

不应该缓存组件包含子组件依赖全局状态(例如来自vuex的状态)。如果这么做,子组件(事实上是整个子树)也会被缓存。所以要特别注意带有slots片段或者子组件的情况。

设置

在警告情况之外的,我们可以用下面的方法缓存组件。

首先,你需要提供给渲染器一个 缓存对象。这有个简单的示例使用 lru-cache

var createRenderer = require('vue-server-renderer').createRenderervar lru = require('lru-cache')var renderer = createRenderer({  cache: lru(1000)})

这将缓存高达1000个独立的渲染。对于更进一步缓存到内容中的配置,看lru-cache设置

然后对于你想缓存的组件,你可以为他们提供:

  • 一个唯一的名字

  • 一个 serverCacheKey函数,返回一个唯一的组件作用域

例如:

Vue.component({  name: 'list-item',  template: '<li>{{ item.name }}</li>',  props: ['item'],  serverCacheKey: function (props) {    return props.item.type + '::' + props.item.id  }})

缓存的理想组件

任何纯组件可以被安全缓存 - 这是保证给任何组件传递一样的数据产生相同的HTML。这些场景的例子包括:

  • 静态的组件 (例如 总是尝试一样的HTML,所以 serverCacheKey 函数可以被返回 true)

  • 列表组件(当有大量列表,缓存他们可以改善性能)

  • 通用UI组件 (例如 buttons, alerts, 等等 - 至少他们通过props获取数据而不是 slots或者子组件)

说明:

现在,应该理解服务端渲染背后的基本概念了。但是,构建过程、路由、Vuex每一个都有自己的注意事项。

到此,关于“vue3.0支不支持服务端渲染”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

vue3.0支不支持服务端渲染

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue3.0支不支持服务端渲染

这篇文章主要介绍“vue3.0支不支持服务端渲染”,在日常操作中,相信很多人在vue3.0支不支持服务端渲染问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3.0支不支持服务端渲染”的疑惑有所帮助!接下来
2023-07-04

vue3.0支持服务端渲染吗

vue3.0支持服务端渲染。Vue支持将组件在服务端直接渲染成HTML字符串,作为服务端响应返回给浏览器,最后在浏览器端将静态的HTML“激活”(hydrate) 为能够交互的客户端应用。一个由服务端渲染的Vue应用可以被认为是“同构的” 或“通用的,因为应用的大部分代码同时运行在服务端和客户端。vue用服务端渲染的优势:更快的首屏加载、统一的心智模型、更好的SEO。
2023-05-14

RAYDATA云渲染体验全新升级,腾讯云GPU云服务器提供支持

首届UnityforHumanitySummit将于10月21日(当地时间)在线上正式召开。 光启元受邀参与大会HealthcareandWell-being圆桌论坛,向具有全球影响力的活动家和研究者们,分享了RAYDATA如何利用Unit

清华「计图」大更新:支持可微渲染,多任务速度超PyTorch

清华自研的「计图」 (Jittor)深度学习框架,在更新的版本中加入了可微分渲染库。

云服务器不支持什么意思

云服务器不支持某些特定的功能或服务。如果您遇到了云服务器不支持的问题,可以尝试在不同的云提供商或服务上寻找支持,以获得更多信息和建议。例如,您可以尝试检查云提供商提供的数据备份服务是否已正确运行,或者检查您是否已经连接到云提供商的数据中心进行访问,以确保您的数据得到最佳保护。还可以检查是否存在与云服务器相关的限制或政策,以确保它们与您的业务需求相匹配。如果云服务器无法提供您所需的功能或服务,
2023-10-26

云服务器不支持怎么解决

如果您的云服务器无法处理请求,您可能需要考虑以下几个方面:网络连接问题:您的云服务器可能无法连接到互联网。尝试检查您的网速,确保能够连接到互联网。服务器故障:如果云服务器出现故障,可能会导致无法处理请求。尝试重启服务器和其他服务以确保它们能够稳定运行。安全漏洞:云服务器可能会受到安全漏洞的攻击。请确保您使用的云服务提供商正在进行安全审查,以确保他们提供的安全措施不会被轻易滥用。如果上
2023-10-26

Paint.NET 5.0 更新:不再支持微软 Windows 8.1/7 系统,增加压力敏感度、GPU 渲染等

Paint.NET 5.0 版可从官方网站下载,带来了许多新功能、改进和修复。它还放弃对微软 Windows 7 和 Windows 8.1 的支持,这两个操作系统于 2023 年 1 月 10 日被微软终止支持。

云服务器不支持是什么意思

云服务器不支持是指某些情况下云服务器无法提供所需的功能和性能。这可能包括以下情况:内存、CPU或磁盘性能问题:这会导致云服务器性能下降或出现故障。您需要检查云服务器的内存、CPU或磁盘等硬件参数,以确定问题的根本原因。并发问题:如果您的应用程序或数据库访问量过高,或者云服务器的性能无法满足应用程序或数据的需求,就可能会出现并发问题。这可能需要您采取一些措施来减少应用程序和数据库的访问量和负
2023-10-26

云服务器暂不支持什么意思

云服务器不支持的原因可能有很多种,具体原因可能包括以下几个方面:配置错误:当云服务器配置存在错误时,可能无法运行您的应用程序。这种情况下,您可能需要检查云服务器的配置并修复您的配置错误。服务不可用:当云服务器出现故障或服务不可用时,客户可能无法访问您的应用程序。这种情况下,您可能需要联系您的云服务器提供商并请求暂停服务。数据安全:如果您的应用程序存储了大量敏感数据,并且数据可能在互联网上被第三方看到或使用,那...
2023-10-27

此站点的连接不安全,使用不受支持的协议。ERR_SSL_VERSION_OR_CIPHER_MISMATCH(不支持的协议 客户端和服务器不支持常用的 SSL 协议版本或密码套件。)

文章目录 前言一、解决方法一1.Microsoft Edge浏览器→点击右上角的三个点→选择设置2.选择外观→打开Internet Explorer 模式(IE 模式)按钮3.打开Microsoft Edge浏览器→输入自己要访问的
2023-08-18

阿里云服务器支持开传奇端游吗?

本文主要讨论阿里云服务器是否可以支持开传奇端游。阿里云服务器是阿里集团提供的高性能云服务器产品,它提供了丰富的操作系统和应用服务,包括但不限于Java、Node.js、PHP、Python、MySQL等。传奇端游是一款非常受欢迎的网络游戏,许多玩家都喜欢通过云服务器来运行传奇端游,享受更稳定的游戏体验。那么,阿里
阿里云服务器支持开传奇端游吗?
2023-11-02

Memsql引发错误MemSQL不支持服务器端准备好的语句

是的,MemSQL不支持服务器端准备好的语句(Server-side prepared statements)。服务器端准备好的语句是指在应用程序向数据库发送SQL语句之前,数据库会先将其编译和准备好,然后再执行相同的语句。这种技术通常用于
2023-08-19

ReactJS 代理服务器不支持服务器重定向

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天编程网给大家整理了《ReactJS 代理服务器不支持服务器重定向》,聊聊,我们一起来看看吧
ReactJS 代理服务器不支持服务器重定向
2024-04-04

服务器不支持mysql数据库怎么办

这篇文章主要讲解了“服务器不支持mysql数据库怎么办”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“服务器不支持mysql数据库怎么办”吧!1,查找 ;extension=php_mysql
2023-06-13

云服务器不支持怎么解决问题

如果您的云服务器无法连接到外部服务,可以尝试以下方法:检查网络连接:网络连接是否正常。确保您连接的是稳定的无线网络,确保您正在使用正确的Wi-Fi连接。重启服务器:如果您正在使用云服务器,并且尝试重启服务器,可能会发现云服务器出现连接问题。重启服务器需要在控制台菜单中手动完成。检查防火墙设置:您的云服务器可能需要使用防火墙来保护其隐私和安全。如果防火墙设置为"允许访问",则云服务器将无法
2023-10-26

云服务器不支持是什么意思呢

云服务器不支持某些操作系统、浏览器、应用程序或功能的原因可能有很多,具体原因可能包括:安全原因:某些云服务商不允许服务器与某些操作系统或浏览器进行通信,从而导致一些应用程序无法正常运行。兼容性问题:有些云服务器不支持某些浏览器和操作系统,例如某些应用程序无法在谷歌浏览器或苹果iOS操作系统上运行。性能问题:某些云服务商的服务器可能存在性能问题,导致某些应用程序无法正确加载。网络连接问题:某些云服务器需要连接...
2023-10-27

云服务器不支持是什么意思呀

云服务器不支持是指在使用云服务器的过程中遇到的一些问题,例如无法连接到云服务器、登录失败、应用程序无法加载等。这些问题可能是由于多种原因造成的,例如服务器配置错误、网络故障、硬件故障等。当遇到无法连接到云服务器的情况时,您可以尝试以下几个解决方法:检查连接是否正常:可以使用其他浏览器或设备尝试连接云服务器,或者联系云服务器提供商或服务提供商来解决。检查网络连接:如果网络连接正常,就可以尝试使用网页浏览器或...
2023-10-27

云服务器不支持伪静态如何解决

如果云服务器不支持伪静态,可以考虑以下解决方案:1. 使用URL重写:利用服务器的URL重写功能,将原本需要伪静态处理的URL重写为动态URL,然后通过服务器的动态处理程序进行处理。2. 使用前端路由:使用前端框架(如React、Vue等)
2023-09-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录