首頁 web前端 uni-app Uniapp怎麼做ssr

Uniapp怎麼做ssr

Apr 14, 2023 pm 01:53 PM

UniApp是一個基於Vue.js框架的跨平台應用程式開發框架,讓開發者同時建立iOS、Android、H5和小程式應用程式。所以,在效能需求較高的場景中可能需要使用SSR(Server-Side Rendering,也就是伺服器端渲染)解決渲染效能問題,本篇文章將討論在UniApp中如何實作SSR。

SSR是什麼?
SSR是在伺服器端完成頁面的首次渲染,將靜態的HTML內容傳回瀏覽器,讓瀏覽器看到已經有了可用的HTML,進而渲染出頁面。 SSR的好處是可以讓首次載入的速度更快,提高使用者體驗。

UniApp的SSR實作方法?
UniApp的SSR實作方法是基於Vue.js的SSR實作方法,這需要使用一些Vue.js生態中的SSR插件。
在下面引入兩個Vue.js的外掛程式:

  1. Vue-router:用於路由管理,將請求與對應的元件關聯起來。
  2. Vue-server-renderer:用於在Node.js環境中渲染應用程式的HTML字串,產生HTML檔案來表示應用程式的目前狀態。

具體實作方法如下:

  1. 安裝Vue-router和Vue-server-renderer:

    npm install vue-router vue-server-renderer --save
    登入後複製
  2. 建立SSR入口文件:
    在src下建立entry-ssr.js文件,內容如下:

    import createApp from './main'
    
    export default context => {
      return new Promise((resolve, reject) => {
     const { app, router, store } = createApp()
     const { url } = context
     const fullPath = router.resolve(url).route.fullPath
    
     if (fullPath !== url) {
       return reject({ url: fullPath })
     }
    
     // 设置 server router 的位置
     router.push(url)
    
     // 等待 router 将组件渲染完
     router.onReady(() => {
       const matchedComponents = router.getMatchedComponents()
       if (!matchedComponents.length) {
         return reject({ code: 404 })
       }
    
       Promise.all(
         matchedComponents.map(Component => {
           if (Component.asyncData) {
             return Component.asyncData({
               store,
               route: router.currentRoute
             })
           }
         })
       )
         .then(() => {
           context.state = store.state
           resolve(app)
         })
         .catch(reject)
     }, reject)
      })
    }
    登入後複製
  3. 建立SSR伺服器:
    在根目錄下建立server.js文件,內容如下:

    const Koa = require('koa')
    const path = require('path')
    const fs = require('fs')
    const koaStatic = require('koa-static')
    const { createBundleRenderer } = require('vue-server-renderer')
    const serverBundle = require('./dist/vue-ssr-server-bundle.json')
    const clientManifest = require('./dist/vue-ssr-client-manifest.json')
    const template = fs.readFileSync(path.join(__dirname, './index.ssr.html'), 'utf-8')
    
    const app = new Koa()
    const renderer = createBundleRenderer(serverBundle, {
      runInNewContext: false,
      template,
      clientManifest
    })
    
    // 静态资源
    app.use(koaStatic(path.join(__dirname, './dist')))
    
    app.use(async (ctx, next) => {
      const context = { url: ctx.url }
    
      const html = await renderer.renderToString(context)
     .catch(err => {
       if (err.code === 404) {
         ctx.status = 404
         ctx.body = '404 Page Not Found'
       } else {
         ctx.status = 500
         ctx.body = '500 Internal Server Error'
         console.error(`${ctx.url}\n${err.stack}`)
       }
     })
    
      ctx.body = html
    })
    
    const port = process.env.PORT || 9090
    
    app.listen(port, () => {
      console.log(`server started at localhost:${port}`)
    })
    登入後複製
  4. 修改建置配置:
    在vue.config.js檔案中,新增以下程式碼:

    module.exports = {
      productionSourceMap: false,
      css: {
     extract: {
       ignoreOrder: true
     }
      },
      configureWebpack: config => {
     if (process.env.UNI_SSR) {
       config.output.libraryTarget = 'commonjs2'
       config.externals = [
         /^uni-app/,
         /^@dcloudio/,
         {
           vue: {
             root: 'Vue',
             commonjs: 'vue',
             commonjs2: 'vue'
           }
         }
       ]
       config.plugins.push(new VueSSRServerPlugin())
     }
      }
    }
    登入後複製
  5. 修改根目錄下的package.json檔案:
    在"scripts"下新增如下程式碼:

    "ssr-build": "cross-env UNI_SSR=1 vue-cli-service build --mode production --target server --dest dist && vue-cli-service build --mode production --target client --dest dist",
    "ssr-start": "cross-env NODE_ENV=production node server.js"
    登入後複製

    執行npm run ssr-build建置SSR應用程序,然後執行npm run ssr-start啟動應用程式.

至此,UniApp SS是執行成功的。

總結
因為UniApp的結構與Vue.js非常相似,在實現SSR的時候,根據Vue.js的SSR實作方法就能完成UniApp的SSR,透過一系列步驟就能讓UniApp中的應用程式支援伺服器端渲染,從而達到更快的頁面載入速度,提高使用者體驗。

以上是Uniapp怎麼做ssr的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)