SSR 即服务器端渲染(Server-Side Rendering),主要解决了以下几个方面的问题:
-
首屏加载速度慢:传统的前端渲染需要先加载 HTML 骨架,再加载 JavaScript 文件,然后通过 JavaScript 渲染页面内容,这导致首屏加载时间较长。SSR 可以在服务器端直接生成完整的 HTML 页面,发送给客户端,减少了客户端渲染的时间,提高了首屏加载速度,提升用户体验。
-
SEO 优化:搜索引擎爬虫在抓取网页内容时,对于 JavaScript 动态渲染的页面可能无法很好地解析和获取内容,导致页面在搜索引擎中的排名较低。SSR 生成的是包含完整内容的 HTML 页面,便于搜索引擎爬虫抓取和索引,有利于提高网站的 SEO 性能。
-
交互体验问题:在一些网络环境较差的情况下,前端渲染可能会出现长时间的白屏等待,用户无法进行任何交互。SSR 可以让用户更快地看到页面的基本内容,即使在 JavaScript 尚未完全加载和执行的情况下,也能有较好的视觉反馈,提升了交互体验。
以下是一个使用 Vue.js 和 Express 实现 SSR 的简单示例:
-
创建项目和安装依赖
- 首先创建一个新的项目目录,初始化
package.json
文件。 - 安装
express
、vue
、vue-server-renderer
等依赖。
- 首先创建一个新的项目目录,初始化
-
创建 Express 服务器
javascript
const express = require('express');
const app = express();
const port = 3000;
// 处理静态资源
app.use(express.static('public'));
// 渲染页面的路由
app.get('*', (req, res) => {
// 这里后续将添加SSR的渲染逻辑
res.send('Hello World');
});
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
-
创建 Vue 应用
- 在项目中创建
src
目录,在其中创建main.js
文件,用于创建 Vue 实例。
- 在项目中创建
javascript
import Vue from 'vue';
import App from './App.vue';
// 创建Vue实例
export function createApp() {
return new Vue({
render: h => h(App)
});
}
- 创建服务器端渲染逻辑
javascript
const { createRenderer } = require('vue-server-renderer');
const { createApp } = require('./src/main.js');
// 创建渲染器
const renderer = createRenderer();
app.get('*', async (req, res) => {
try {
// 创建Vue应用实例
const app = createApp();
// 将Vue应用渲染为HTML
const html = await renderer.renderToString(app);
// 返回渲染后的HTML
res.send(`
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SSR Example</title>
</head>
<body>
<div id="app">${html}</div>
</body>
</html>
`);
} catch (error) {
res.status(500).send('Internal Server Error');
}
});
-
在客户端激活 Vue 应用
- 在
public
目录下创建client.js
文件,用于在客户端激活 Vue 应用,使其能够处理交互等功能。
- 在
javascript
import Vue from 'vue';
import App from './src/App.vue';
new Vue({
render: h => h(App)
}).$mount('#app');
-
最后
-
在
index.html
中引入client.js
,确保在客户端能够正确激活 Vue 应用。
-
以上只是一个简单的 SSR 示例,实际项目中可能会涉及到更多的配置和优化,如路由处理、数据预取、样式处理等。