Vue完整版和runtime版的區(qū)別詳解
創(chuàng)建Vue實(shí)例的三種方式
從HTML得到視圖
前提:使用完整版,CDN引入或者修改配置
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
// ...
configureWebpack: {
resolve: {
alias: {
vue$: 'vue/dist/vue.esm.js', // 用 webpack 1 時(shí)需用 '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,
},
})
// 或者傳一個(gè)字符串給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就只有一個(gè)div#app,SEO不友好
新建一個(gè)單文件組件 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ù)打印出來(lái),可以看到該函數(shù)將<template>內(nèi)部代碼翻譯成h構(gòu)建方法

完整版和運(yùn)行時(shí)版的區(qū)別
完整版:運(yùn)行時(shí)+編譯器(compiler將模板字符串編譯成JavaScript渲染函數(shù)的代碼)
運(yùn)行時(shí)版:沒(méi)有編譯器,體積小
如果把視圖寫(xiě)在HTML或template選項(xiàng)會(huì)報(bào)錯(cuò)

兩者對(duì)比
| 特點(diǎn) | 視圖 | CDN引入 | webpack或@vue/cli引入 | |
|---|---|---|---|---|
| Vue完整版 | 有編譯器,體積大 | 寫(xiě)在HTML或template選項(xiàng)里 | vue.js | 需額外配置 |
| Vue運(yùn)行時(shí)版 | 無(wú)編譯器 | 寫(xiě)在render函數(shù)里,用參數(shù)h創(chuàng)建標(biāo)簽 | vue.runtime.js | 默認(rèn)使用 |
最佳實(shí)踐
使用非完整版,配合 vue-loader 和 vue 文件
思路
- 保證用戶(hù)體驗(yàn),用戶(hù)下載的JS文件體積更小,但只支持h函數(shù)
- 保證開(kāi)發(fā)體驗(yàn),開(kāi)發(fā)者可以直接在vue文件里寫(xiě)HTML標(biāo)簽,不寫(xiě)h函數(shù)
- 臟活讓loader做,vue-loader把vue文件里的HTML轉(zhuǎn)為h函數(shù)
SEO友好
搜索引擎優(yōu)化
搜索引擎就是不停地curl,搜索引擎根據(jù)curl結(jié)果猜測(cè)頁(yè)面內(nèi)容
p.s. 用戶(hù)訪(fǎng)問(wèn)網(wǎng)站看到的界面是JS渲染之后的,右鍵查看源代碼才是curl返回的結(jié)果
如果頁(yè)面都是JS創(chuàng)建div,curl無(wú)法獲取有效信息,因此最好在title, description, keyword, h1, a寫(xiě)入內(nèi)容(前面三個(gè)是meta標(biāo)簽)
總結(jié)一條原則:讓curl能得到頁(yè)面的主要內(nèi)容和相關(guān)內(nèi)容,SEO就能正常的工作
怎么提升SEO排名呢,訪(fǎng)問(wèn)量or氪金
以上就是Vue完整版和runtime版的區(qū)別詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue完整版runtime版區(qū)別的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- vue3模塊創(chuàng)建runtime-dom源碼解析
- vue開(kāi)發(fā)runtime core中的虛擬節(jié)點(diǎn)示例詳解
- Vue.js和Vue.runtime.js區(qū)別淺析
- vue-next/runtime-core 源碼閱讀指南詳解
- Vue中使用localStorage存儲(chǔ)token并設(shè)置時(shí)效
- vue中destroyed方法及使用示例講解
- vue中?render?函數(shù)功能與原理分析
- Vue中Number方法將字符串轉(zhuǎn)換為數(shù)字的過(guò)程
- Vue中 Runtime + Compiler 和 Runtime-only 兩種模式含義和區(qū)別詳解
相關(guān)文章
vue?axios?form-data格式傳輸數(shù)據(jù)和文件方式
這篇文章主要介紹了vue?axios?form-data格式傳輸數(shù)據(jù)和文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
使用axios發(fā)送post請(qǐng)求,將JSON數(shù)據(jù)改為form類(lèi)型的示例
今天小編就為大家分享一篇使用axios發(fā)送post請(qǐng)求,將JSON數(shù)據(jù)改為form類(lèi)型的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
vue實(shí)現(xiàn)滑動(dòng)到底部加載更多效果
這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)滑動(dòng)到底部加載更多效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08
vue3基礎(chǔ)組件開(kāi)發(fā)detePicker日期選擇組件示例
這篇文章主要為大家介紹了vue3基礎(chǔ)組件開(kāi)發(fā)-detePicker(日期選擇組件)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
vue+elementUI實(shí)現(xiàn)動(dòng)態(tài)合并數(shù)據(jù)相同的單元格(可指定合并列)
這篇文章主要介紹了vue+elementUI如何實(shí)現(xiàn)動(dòng)態(tài)合并數(shù)據(jù)相同的單元格,文中有詳細(xì)的代碼實(shí)例供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07
使用Electron打包vue文件變成exe應(yīng)用程序的全過(guò)程
這篇文章主要給大家介紹了使用Electron打包vue文件變成exe應(yīng)用程序的全過(guò)程,文中通過(guò)代碼示例和圖文結(jié)合的方式給大家講解的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-01-01

