大家好!在本文中,我們將考慮無需使用 Nuxt.js 作為主要框架即可解決的主要問題之一 - 將 SSR(伺服器端渲染)方法應用於 Vue.js 應用程式。
值得考慮的是,這種方法使用 SSR 而無需透過機器人進行索引,但保留了所有其他優點。
您可以連接一個名為HMPL-js的函式庫。這是對應模板語言的編譯器,它擴充了普通HTML的功能。透過將字串傳遞給compile
函數的參數,您可以獲得適合您應用程式介面的現成的 DOM 元素。讓我們看看它是什麼樣子的:
<template>
<div ref="hmplContainer">
<!-- clicker here -->
</div>
</template>
<script>
import { onMounted, ref } from "vue";
import hmpl from "hmpl-js";
export default {
setup() {
const hmplContainer = ref(null);
onMounted(() => {
const templateFn = hmpl.compile(
`<div>
<button data-action="increment" id="btn">Click!</button>
<div>Clicks: {{ src: "/api/clicks", after: "click:#btn" }}</div>
</div>`
);
const clicker = templateFn(({ request: { event } }) => ({
body: JSON.stringify({ action: event.target.getAttribute("data-action") })
})).response;
hmplContainer.value.appendChild(clicker);
});
return { hmplContainer };
}
};
</script>
在這裡,當安裝應用程式時,我們插入一個現成的元素,該元素將在每次單擊button
時更新。此外,點擊計數將在伺服器上進行,我們只會在那裡發送自訂請求。
{% cta https://github.com/hmpl-language/hmpl %} 💎 看 HMPL-js ★{% endcta %}
這是另一個簡單的例子,我們可以刪除after
屬性並將其簡單地用作掛載時的載入。它看起來是這樣的:
<template>
<div ref="hmplContainer">
<!-- header here -->
</div>
</template>
<script>
import { onMounted, ref } from "vue";
import hmpl from "hmpl-js";
export default {
setup() {
const hmplContainer = ref(null);
onMounted(() => {
const templateFn = hmpl.compile(
`<div>
{{ src: "/api/header" }}
</div>`
);
const header = templateFn().response;
hmplContainer.value.appendChild(header);
});
return { hmplContainer };
}
};
</script>
因此,使用常規元件我們可以立即從伺服器接收 DOM 元素,而無需加入額外的事件。從這些區塊中,您可以建立將使用 SSR 方法的整個頁面。
此外,此方法對於舊版本的 Vue 非常有效。也就是說,您不必更新到版本 3 或更高版本(取決於您閱讀本文的時間),但使用 Nuxt.js,尤其是較新的版本,您必須執行此操作。你如何在舊版本中做到這一點:
<template>
<div ref="hmplContainer">
<!-- header here -->
</div>
</template>
<script>
import Vue from "vue";
import hmpl from "hmpl-js";
export default Vue.extend({
data() {
return {
hmplContainer: null
};
},
mounted() {
this.hmplContainer = this.$refs.hmplContainer;
...
}
});
</script>
這裡,我們將使用物件中的常規mounted
來取代onMounted
鉤子,並且稍微更改ref
。總的來說,不會有什麼重大的變化,但這種功能將非常重要。
無論您的 Vue 應用程式的版本為何,此方法都允許您使用 SSR。此外,它不會強迫您遵守嚴格的框架邊界,您可以將此方法與其他程式庫結合,而不會失去互動性和程式碼可讀性,並且通常無需真正重做任何事情。
我希望這種方法能夠幫助您縮小您的網站體積,從而加快客戶端的載入速度。
您可以在 Twitter 上關注作者!
{% 嵌入 https://x.com/aanthonymax/status/1902809833033859568 %}
非常感謝大家閱讀這篇文章❤️!
原文出處:https://dev.to/anthonymax/how-to-apply-ssr-in-vuejs-project-without-nuxt-587c