返回

服务端渲染SSR实战入门,基于Vite和Webpack构建React和Vue的SSR开发环境

前端

大家好,欢迎来到服务端渲染(SSR)入门之旅。SSR是一种将网站内容在服务器端生成,然后发送给客户端的技术。与传统的客户端渲染(CSR)相比,SSR可以显著提高网站的性能,尤其是首屏加载速度。此外,SSR还有利于网站的SEO优化。

那么,SSR是如何工作的呢?当用户向服务器请求一个页面时,服务器会执行页面渲染过程,并将渲染结果(即HTML代码)发送给客户端。客户端收到HTML代码后,直接将其显示在浏览器中,而不需要再进行任何渲染操作。这样一来,就可以避免客户端渲染所带来的性能瓶颈。

服务端渲染的优点

SSR有很多优点,包括:

  • 提高首屏加载速度: SSR可以显著提高网站的首屏加载速度。这是因为,SSR可以在服务器端预先将页面渲染成HTML代码,然后直接发送给客户端。这样一来,客户端就不需要再进行任何渲染操作,从而可以快速地显示出页面内容。
  • 利于SEO优化: SSR有利于网站的SEO优化。这是因为,SSR可以在服务器端生成静态HTML代码,然后发送给客户端。静态HTML代码可以被搜索引擎抓取和索引,从而有助于网站提高排名。
  • 增强用户体验: SSR可以增强用户体验。这是因为,SSR可以减少页面加载时间,让用户能够更快速地访问网站内容。此外,SSR还可以消除页面闪烁的问题,从而提供更加流畅的用户体验。

服务端渲染的缺点

虽然SSR有很多优点,但也有一些缺点,包括:

  • 增加服务器负载: SSR会增加服务器的负载。这是因为,SSR需要在服务器端进行页面渲染操作,这会消耗一定的服务器资源。因此,如果网站的访问量较大,那么SSR可能会对服务器造成较大的压力。
  • 开发难度较大: SSR的开发难度较大。这是因为,SSR需要在服务器端进行页面渲染操作,而这通常需要使用到后端技术。因此,对于前端开发人员来说,SSR的开发难度会更高。
  • 不支持动态内容: SSR不支持动态内容。这是因为,SSR需要在服务器端预先将页面渲染成HTML代码,而动态内容是无法在服务器端预先生成的。因此,如果网站包含动态内容,那么SSR就无法实现。

基于Vite和Webpack构建React和Vue的SSR开发环境

现在,我们来看看如何基于Vite和Webpack构建React和Vue的SSR开发环境。

使用Vite构建React SSR开发环境

  1. 安装Vite和React。
npm install vite react react-dom
  1. 创建一个Vite项目。
vite create my-react-ssr-app
  1. 在项目中安装必要的依赖项。
npm install @vitejs/plugin-react react-router-dom
  1. 在项目中创建一个server.js文件,并添加以下代码:
const express = require('express');
const fs = require('fs');
const { renderToString } = require('react-dom/server');
const App = require('./App').default;

const app = express();

app.get('*', (req, res) => {
  const html = renderToString(<App />);
  res.send(`
    <!DOCTYPE html>
    <html>
      <head>
        
      </head>
      <body>
        <div id="app">${html}</div>
        <script src="/main.js"></script>
      </body>
    </html>
  `);
});

app.listen(3000);
  1. 在项目中创建一个App.js文件,并添加以下代码:
import { BrowserRouter as Router, Route, Link } from 'react-router-dom';

function App() {
  return (
    <Router>
      <div>
        <nav>
          <Link to="/">Home</Link>
          <Link to="/about">About</Link>
        </nav>

        <Route path="/" exact>
          <h1>Home</h1>
        </Route>

        <Route path="/about">
          <h1>About</h1>
        </Route>
      </div>
    </Router>
  );
}

export default App;
  1. 运行Vite开发服务器。
npm run dev
  1. 打开浏览器,访问http://localhost:3000,即可看到SSR后的React应用。

使用Webpack构建Vue SSR开发环境

  1. 安装Webpack和Vue。
npm install webpack webpack-cli vue vue-loader vue-router
  1. 创建一个Webpack项目。
webpack init
  1. 在项目中安装必要的依赖项。
npm install vue-server-renderer vue-router
  1. 在项目中创建一个server.js文件,并添加以下代码:
const express = require('express');
const fs = require('fs');
const { createRenderer } = require('vue-server-renderer');
const App = require('./App').default;

const app = express();

const renderer = createRenderer();

app.get('*', (req, res) => {
  const context = { url: req.url };

  renderer.renderToString(App, context).then(html => {
    res.send(`
      <!DOCTYPE html>
      <html>
        <head>
          
        </head>
        <body>
          <div id="app">${html}</div>
          <script src="/main.js"></script>
        </body>
      </html>
    `);
  }).catch(err => {
    res.status(500).send('An error occurred');
  });
});

app.listen(3000);
  1. 在项目中创建一个App.vue文件,并添加以下代码:
<template>
  <div>
    <h1>{{ msg }}</h1>
    <router-view />
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: 'Welcome to Vue SSR!'
    }
  }
}
</script>
  1. 在项目中创建一个main.js文件,并添加以下代码:
import Vue from 'vue';
import App from './App.vue';
import VueRouter from 'vue-router';
import Home from './Home.vue';
import About from './About.vue';

Vue.use(VueRouter);

const routes = [
  { path: '/', component: Home },
  { path: '/about', component: About }
];

const router = new VueRouter({
  routes
});

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');
  1. 运行Webpack开发服务器。
npm run dev
  1. 打开浏览器,访问http://localhost:3000,即可看到SSR后的Vue应用。

结语

通过本文,我们了解了服务端渲染(SSR)的原理和优点。此外,我们还学习了如何基于Vite和Webpack构建React和Vue的SSR开发环境。希望本文能够对大家有所帮助。