服务端渲染(SSR) 通用技术解决方案

项目背景

服务端渲染(SSR) 通用技术解决方案的诞生来源于对 360搜索百科移动端项目的一次重构实践。而当时决定重构该项目的主要原因有以下几点:

1.  技术栈陈旧,熟悉、开发以及维护成本都较高

项目重构前的开发技术栈是 smarty + php + jQuery 的模式。在前端技术发展迅速的今天,vue 与 react 裹挟下的组件化开发模式愈发盛行,模块化语法开发模式也是层出不穷,这使得 smarty 开发模式对新人来说理解起来比较生涩难懂。

2. 项目结构管理混乱

项目重构之前存在2个代码库并存的状况。之前的同学为了项目开发的模式更加与时俱进,对项目的图册页进行了单独的抽离,采用了当时最新的 esNext 语法 和 webpack 的模块化开发模式进行了一次重构。但项目的开发流程很复杂:

    - 首先两个分离的项目需要并存在同一个开发环境下。

    - 其次需要对图册页的 webpack 进行自定义的配置,才能使得图册页项目的开发代码被构建到另一个整体代码项目中,这需要对 webpack 有一定的了解。

    - 最后编译到整体代码中的 css 文件中还需要手动删除多余的 js 文件避免内部编译的报错。

3. 重构的目标

除去上述两种原因外,由于该项目的周期已经非常久远,随着开发维护的不断变更,很多项目模块、代码文件也已经变的非常臃肿。所以本次的重构,除了要统一所有的页面技术栈,通过 eslint、commitlint、stylelint 等工具来统一开发规范外,重新梳理组织项目文件和目录结构以及相关业务模块也是重中之重。

重构技术选型

 对于该项目的重构,最初我们构想了三种方案:

  1. 保持当前的技术栈 smarty + php + jQuery 模式,对现有的模块及目录结构进行重新梳理和调整。

  2. 采用 React + Next + Webpack 的技术栈做 SSR 渲染。

  3. 采用 Vue + Nuxt + Webpack 的技术栈做 SSR 渲染

首先,无论从技术发展的角度,或是从后期项目的维护与开发效率来看,方案一都失去了重构本来的初衷。毕竟,拥抱前沿技术,提高开发效率的重构才更有意义。

其次,我们对 React + Next 和 Vue + Nuxt 的技术栈做了调研对比:

  1. 在相同吞吐量的情况下,两者的平均响应时间几乎是相同的,都比 smarty 模式要慢但在可接受范围内。

  2. 从学习成本来说 vue 的技术栈更为大家熟悉和容易接受,这在一定程度上可以减少学习和开发时间。

  3. 鉴于同期开展的 solib/m-vue 项目,可以在本次采用 vue 技术栈重构的同时,将可公用的模块进行组件化抽离到 solib/m-vue 中,形成一个既支持 SSR 又支持 CSR 模式的组件库,为后续其他移动端项目的重构提升开发效率。

  4. 团队的星座项目就采用了 vue + nuxt + webpack 的技术栈,有可以借鉴的案例。

鉴于上述的对比和考虑,我们决定采用 Vue + Nuxt + Webpack 的技术栈进行 SSR 渲染模式的方案。

什么是 SSR 渲染?

在技术选型上,无论是采用 React 或是 Vue 我们都提到了一个关键字 —— SSR渲染。

什么是 SSR 渲染模式,以及为什么要使用 SSR 渲染呢?我们以 Vue 的 SSR 渲染模式为例。

CSR 模式

先从 CSR 模式说起,CSR 又称 "客户端渲染"(Client Side Render),它还有另一个常见的称呼 ——"单页应用" (SPA)。

SPA的请求流程大概如下:

e299900b43448c59dab39658bf45a58c.png

SPA 模式的请求执行顺序至少包含两个来回(空的 html 页面和数据的获取渲染),它有两个痛点:

  1. 首屏内容到达时间较长,也就是常说的白屏时间较长。毕竟先渲染的是一个空白的 html 结构,然后再发送请求获取相关的页面数据信息进行渲染。

  2. SEO不够友好,搜索引擎爬虫抓取工具需要直接查看完全渲染的页面。

    爬虫可以很好的对同步 JavaScript 应用程序进行索引,同步是关键。如果应用程序初始展示 loading 状态,然后通过 Ajax 获取内容,抓取工具并不会等待这个异步的过程。所以,如果 SEO 对站点至关重要,而页面又是异步获取内容,CSR显然不能满足需求。

于是,便有了 SSR 渲染模式。

SSR 模式

SSR 被称为"服务端渲染"(Server Side Render)。

Vue.js 是构建客户端应⽤程序的框架。默认情况下&#x

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 服务渲染(Server Side Rendering,简称 SSR)是一种将应用程序的 HTML 和 CSS 部分渲染服务,再将渲染结果发送给客户技术。这样做的目的是为了提高首屏加载速度,并且在某些情况下改善 SEO。 传统的客户渲染(Client Side Rendering,简称 CSR)技术中,客户接收到的是一段空白的 HTML 文档,再通过 JavaScript 来动态渲染页面。这种方式对于用户体验来说不够优秀,因为首屏加载需要等待 JavaScript 执行完成。 服务渲染技术能够解决这个问题,因为客户接收到的是一个完整的 HTML 文档,能够立即呈现。用户在操作页面时,再通过 JavaScript 来完成剩余的渲染和交互。 服务渲染并不适用于所有场景,在选择是否使用 SSR 时需要考虑到应用程序的特定要求和需求。但对于需要提高首屏加载速度和改善 SEO 的应用程序来说,服务渲染是一个不错的选择。 ### 回答2: 服务渲染(Server-Side Rendering,简称SSR)是指在服务动态生成页面内容,然后将渲染好的页面传输给浏览器进行展示的一种网页渲染技术。 传统的客户渲染,即前渲染,是指将数据请求发送给服务,然后由浏览器的JavaScript代码异步获取数据,再将数据和模板进行渲染生成页面。这种渲染方式可以实现灵活的交互效果,但也存在一些问题,如首屏加载较慢、对搜索引擎的SEO不友好等。 而SSR则是在服务生成完整的HTML页面,然后将渲染好的页面返回给浏览器展示。它的主要优点有: 1. 更快的首屏加载速度:由于服务渲染页面时已经生成完整的HTML,用户在打开网页时能够立即看到内容,提高了页面的加载速度和用户体验。 2. 更好的SEO:由于搜索引擎爬虫主要是获取HTML内容进行分析,使用SSR能够保证搜索引擎能够正确的读取页面的内容,提高网站的搜索引擎排名。 3. 更好的可访问性:由于服务渲染生成的页面已经包含了完整的内容和结构,相对于客户渲染,能够更好地支持辅助功能和设备兼容性。 尽管SSR在首屏加载和SEO方面具有很大的优势,但也存在一些限制和挑战。比如对于复杂的交互和动态内容的处理较为复杂,需要更多的服务器负载和带宽资源。此外,SSR还需要考虑页面的缓存策略和更新机制,以保证渲染的页面始终能够与最新的数据保持同步。 总之,服务渲染(SSR)是一种能够提高网页加载速度、改善SEO和可访问性的网页渲染技术。尽管它也有一些限制和挑战,但在某些场景下,特别是对于需要快速首屏加载和SEO友好的网站来说,SSR是一种值得采用的渲染方式。 ### 回答3: 服务渲染(Server-Side Rendering,简称SSR)是指在服务进行网页内容的渲染,生成完整的HTML页面后再发送给客户的一种网页渲染方式。相对于传统的客户渲染(Client-Side Rendering,简称CSR),SSR具有以下特点: 1. SEO友好:由于搜索引擎爬虫只能解析HTML页面,传统的CSR渲染会导致搜索引擎无法获取到完整的页面内容。而使用SSR时,服务渲染出的HTML页面包含了完整的内容,有利于SEO优化和搜索引擎收录。 2. 更快的首次加载速度:在CSR中,页面初始化的过程需要先下载基础的HTML结构和JavaScript代码,然后再通过JavaScript请求并渲染数据,这个过程会产生较长的白屏时间。而SSR服务就生成了完整的HTML页面,用户首次访问时可以直接加载这个HTML,减少首次加载时间。 3. 更好的用户体验:因为SSR服务渲染了完整的HTML页面,用户可以更快地看到网页的基本内容,提升了用户体验。而在CSR中,由于需要等待JavaScript的下载和执行,用户可能会出现闪动的页面或者突然出现的内容,造成用户体验不佳。 4. 兼容性好:由于SSR服务渲染,不依赖于浏览器的特定功能或版本,对于不支持JavaScript或禁用JavaScript的浏览器仍然可以渲染出完整的页面。 5. 服务器压力较大:相对于CSR,SSR需要在服务进行页面渲染,因此对服务器的压力较大,特别是当网站的流量较大时。服务器需要消耗更多的计算资源和内存来渲染页面并返回给客户。 总结来说,服务渲染SSR)通过在服务生成完整的HTML页面,提供了更好的SEO友好性、首次加载速度和用户体验,但增加了服务器的压力。它适用于对SEO要求较高、首次加载速度重要的网站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值