Vue完整版和runtime版的區(qū)別詳解
創(chuàng)建Vue實例的三種方式
從HTML得到視圖
前提:使用完整版,CDN引入或者修改配置
const { defineConfig } = require('@vue/cli-service') module.exports = defineConfig({ // ... configureWebpack: { resolve: { alias: { vue$: 'vue/dist/vue.esm.js', // 用 webpack 1 時需用 'vue/dist/vue.common.js' }, }, }, })
index.html
<div id="app"> {{n}} </div>
main.js
import Vue from 'vue' // 或者在index.html使用CDN引入 new Vue({ // 掛載到app元素并以其DOM內(nèi)部的HTML作為模板 el: '#app', data: { n: 1, }, }) // 或者傳一個字符串給template new Vue({ template: '<div>{{ n }}</div>' })
用JS構(gòu)建視圖
需要用到render函數(shù),參數(shù)是Vue提供的h函數(shù),也即createElement
import Vue from 'vue' new Vue({ el: '#app', render(h) { // createElement return h('div', [this.n, h('button', { on: { click: this.add } }, '+1')]) }, data: { n: 0, }, methods: { add() { this.n += 1 }, }, })
使用vue-loader
可以把*.vue
文件翻譯成h構(gòu)建方法,但這樣做HTML就只有一個div#app,SEO不友好
新建一個單文件組件 Demo.vue
<template> <div class="red"> {{ n }} <button @click="add">+1</button> </div> </template> <script> export default { data() { return { n: 0, } }, methods: { add() { this.n += 1 }, }, } </script> <style> .red { color: red; } </style>
import Vue from 'vue' import Demo from './Demo.vue' console.log(Demo.render.toString()) new Vue({ el: '#app', render(h) { return h(Demo) }, })
將render()函數(shù)打印出來,可以看到該函數(shù)將<template>
內(nèi)部代碼翻譯成h構(gòu)建方法
完整版和運行時版的區(qū)別
完整版:運行時+編譯器(compiler將模板字符串編譯成JavaScript渲染函數(shù)的代碼)
運行時版:沒有編譯器,體積小
如果把視圖寫在HTML或template選項會報錯
兩者對比
特點 | 視圖 | CDN引入 | webpack或@vue/cli引入 | |
---|---|---|---|---|
Vue完整版 | 有編譯器,體積大 | 寫在HTML或template選項里 | vue.js | 需額外配置 |
Vue運行時版 | 無編譯器 | 寫在render函數(shù)里,用參數(shù)h創(chuàng)建標(biāo)簽 | vue.runtime.js | 默認(rèn)使用 |
最佳實踐
使用非完整版,配合 vue-loader 和 vue 文件
思路
- 保證用戶體驗,用戶下載的JS文件體積更小,但只支持h函數(shù)
- 保證開發(fā)體驗,開發(fā)者可以直接在vue文件里寫HTML標(biāo)簽,不寫h函數(shù)
- 臟活讓loader做,vue-loader把vue文件里的HTML轉(zhuǎn)為h函數(shù)
SEO友好
搜索引擎優(yōu)化
搜索引擎就是不停地curl,搜索引擎根據(jù)curl結(jié)果猜測頁面內(nèi)容
p.s. 用戶訪問網(wǎng)站看到的界面是JS渲染之后的,右鍵查看源代碼才是curl返回的結(jié)果
如果頁面都是JS創(chuàng)建div,curl無法獲取有效信息,因此最好在title
, description
, keyword
, h1
, a
寫入內(nèi)容(前面三個是meta標(biāo)簽)
總結(jié)一條原則:讓curl能得到頁面的主要內(nèi)容和相關(guān)內(nèi)容,SEO就能正常的工作
怎么提升SEO排名呢,訪問量or氪金
以上就是Vue完整版和runtime版的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue完整版runtime版區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue2.0和mintui-infiniteScroll結(jié)合如何實現(xiàn)無線滾動加載
這篇文章主要介紹了vue2.0和mintui-infiniteScroll結(jié)合如何實現(xiàn)無線滾動加載,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10在vue中使用vant TreeSelect分類選擇組件操作
這篇文章主要介紹了在vue中使用vant TreeSelect分類選擇組件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Vue通過echarts實現(xiàn)數(shù)據(jù)圖表化顯示
Echarts,它是一個與框架無關(guān)的 JS 圖表庫,但是它基于Js,這樣很多框架都能使用它,例如Vue,估計IONIC也能用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Vue3中當(dāng)v-if和v-for同時使用時產(chǎn)生的問題和解決辦法
封裝一個組件時,我使用到了v-for和v-if,它們在同一標(biāo)簽內(nèi),總是提示v-for循環(huán)出來的item在實例中沒有被定義,查詢資料后原因是因為v-for和v-if在同級使用時,v-if優(yōu)先級比v-for高,所以本文給大家介紹了Vue3中當(dāng)v-if和v-for同時使用時產(chǎn)生的問題和解決辦法2024-07-07基于Vue2.0+ElementUI實現(xiàn)表格翻頁功能
Element UI 是一套采用 Vue 2.0 作為基礎(chǔ)框架實現(xiàn)的組件庫,它面向企業(yè)級的后臺應(yīng)用,能夠幫助你快速地搭建網(wǎng)站,極大地減少研發(fā)的人力與時間成本。這篇文章主要介紹了Vue2.0+ElementUI實現(xiàn)表格翻頁功能,需要的朋友可以參考下2017-10-10vue2.0$nextTick監(jiān)聽數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法
今天小編就為大家分享一篇vue2.0$nextTick監(jiān)聽數(shù)據(jù)渲染完成之后的回調(diào)函數(shù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09vue-router重寫push方法,解決相同路徑跳轉(zhuǎn)報錯問題
這篇文章主要介紹了vue-router重寫push方法,解決相同路徑跳轉(zhuǎn)報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08