基于Nuxtjs的同构渲染实践

基于Nuxtjs的同构渲染实践

同构渲染.drawio

什么是同构渲染

同构渲染属于是SSR的一种,特点在于可以使用同一套代码构建SSR资源和静态资源,使得应用可以同时具备SSR和SPA的优势。

同构渲染可以解决什么问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZuxsvl0-1656394850977)(/Users/guoming/Downloads/开发流程.drawio.png)]

首屏加载问题

SPA应用的首屏都要JS进行加载,所以会存在白屏的情况,SSR能很好的解决这个问题。

SEO

SPA应用的DOM都是通过JS进行加载,不利于SEO,而对于SSR来说,首屏即能返回完整的DOM结构。

提升开发/维护效率

开发层面使用Vue的语法进行开发,提升开发效率。

服务端渲染基于Nodejs,而不是php,减少了开发时候与后端同学的沟通成本。

技术选型

Nuxtjs

Nuxt.js 是一个基于 Vue.js 的通用应用框架,对SSR提供了开箱即用的全面支持,是Vue社区最受欢迎的SSR框架,同时也支持传统的SPA应用的构建。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmPhPJ5R-1656394850978)(/Users/guoming/Library/Application Support/typora-user-images/image-20220621110759888.png)]

GitHub Actions

GitHub Actions 是一个持续集成和持续交付 (CI/CD) 平台,可用于自动执行构建、测试和部署管道。 可以通过配置文件创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。

nginx

实现负载均衡,即在服务端渲染占用过多服务器资源时,使用户定向访问静态资源,使用客户端渲染,减少服务器压力。

实践

1、使用nuxtjs脚手架快速创建项目
$ npx create-nuxt-app <项目名>

或者用 yarn :

$ yarn create nuxt-app <项目名>
2、按照nuxtjs框架规范编写代码
3、使用命令打包代码
命令描述
nuxt启动一个热加载的 Web 服务器(开发模式) localhost:3000
nuxt build利用 webpack 编译应用,压缩 JS 和 CSS 资源(SSR模式)。
nuxt start以生产模式启动一个 Web 服务器 (需要先执行nuxt build)。
nuxt build --spa禁用服务器端渲染,使用 SPA 模式
{
  "scripts": {
    "dev": "nuxt",
    "build": "nuxt build",
    "build.spa": "nuxt build --spa",
    "start": "nuxt start"
  },
}
4、使用GitHub Action发布应用 部署到云服务器

部署到服务器后需要使用pm2这个库对Node进程进行管理

name: Continuous Integration #action名称
on: [push] #在推送的时候运行此action

jobs:
  build_job:
    runs-on: ubuntu-latest #运行环境
    name: build
    steps:
      # check out the repository
      - name: Checkout
        uses: actions/checkout@v3 #这里使用了github官方提供的action,checkout项目到虚拟机上

      - name: Install Dependencies
        run: yarn
      - name: SPA Build
        run: yarn build.spa

      - name: deploy spa to server # 部署spa
        uses: easingthemes/ssh-deploy@main
        env:
          SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
          ARGS: "-avzr --delete"
          SOURCE: "dist/" # 对应项目build的文件夹路径
          REMOTE_HOST: ${{ secrets.SERVER_IP }}
          REMOTE_USER: "root" #ssh user name
          TARGET: "/www/wwwroot/shrinkjs/shrinkjs_web_spa"

      - name: deploy ssr to server # 部署ssr
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_IP }}
          username: "root"
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /www/wwwroot/shrinkjs
            cp -r shrinkjs_web shrinkjs_web-new
            cd shrinkjs_web-new
            git fetch --all
            git reset --hard origin/master
            yarn install
            yarn build
            cd ..
            mv shrinkjs_web shrinkjs_web-old
            mv shrinkjs_web-new shrinkjs_web
            cd shrinkjs_web
            pm2 kill
            pm2 start "yarn start" --name App
            rm -rf ../shrinkjs_web-old

5、nginx配置

配置简单的负载均衡

upstream shrinkjs{ 
	server localhost:3000; 
	server localhost:8888;
}

server {
  listen 8888;
  server_name localhost;
  location / {
    alias /www/wwwroot/shrinkjs/shrinkjs_web_spa/;
  }
}

server {
  listen 80;
  server_name www.tracex.top;
  location / {
    proxy_pass http://shrinkjs;
  }
}
6、访问测试

第一次为服务端渲染

image-20220624142529810

第二次为客户端渲染

image-20220624142612409

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值