毫無疑問,用戶體驗(yàn)會(huì)受到感知加載時(shí)間的影響。隨著今天更重的前端發(fā)展,客戶端渲染感覺不是很快。針對(duì)這樣的情況,預(yù)渲染可能是一種非常好的策略,這些解決方案與完全由客戶端呈現(xiàn)的應(yīng)用程序之間有什么區(qū)別?想學(xué)習(xí)前端的同學(xué)可以參加Web前端培訓(xùn),有系統(tǒng)全面的課程,還有經(jīng)驗(yàn)豐富的專業(yè)講師指導(dǎo)教學(xué),可以快速掌握前端知識(shí)和技能,節(jié)省很多學(xué)習(xí)時(shí)間,少走彎路。
客戶端渲染的應(yīng)用程序
由于 Angular、Ember.js 和 Backbone
等框架的存在,前端開發(fā)人員傾向于在客戶端渲染所有內(nèi)容。
使用客戶端渲染解決方案,你將請求重定向到單個(gè) HTML
文件,服務(wù)器將在沒有任何內(nèi)容(或帶有加載屏幕)的情況下傳遞它,直到你獲取所有 Javascript
并讓瀏覽器在渲染內(nèi)容之前編譯所有內(nèi)容。在良好且可靠的互聯(lián)網(wǎng)連接下,它非常快且運(yùn)行良好。但它可以好得多,而且做到這一點(diǎn)并不難。這就是我們將在以下部分中看到的內(nèi)容。
服務(wù)器端渲染 (SSR)
SSR 解決方案是我們很多年前經(jīng)常做的事情,但往往會(huì)忘記支持客戶端渲染解決方案。
使用舊的服務(wù)器端渲染解決方案,你構(gòu)建了一個(gè)網(wǎng)頁(例如使用 PHP),服務(wù)器編譯所有內(nèi)容,包含數(shù)據(jù),并將完全填充的 HTML
頁面交付給客戶端。它快速而有效。但是……每次你導(dǎo)航到另一條路線時(shí),服務(wù)器都必須重新做一遍:獲取 PHP 文件,編譯它,然后交付 HTML,所有的 CSS 和
JS 將頁面加載延遲到幾百毫秒或甚至整秒。
如果你可以使用 SSR 解決方案進(jìn)行第一個(gè)頁面加載,然后使用框架通過 AJAX
進(jìn)行動(dòng)態(tài)路由,只獲取必要的數(shù)據(jù)會(huì)怎樣?如果想要盡快學(xué)到前端入門的的知識(shí),建議去Web前端培訓(xùn)學(xué)習(xí),有大神老師帶你,學(xué)起來又輕松又有效。
這就是 SSR 在社區(qū)中越來越受到關(guān)注的原因,因?yàn)?React
通過一個(gè)易于使用的解決方案普及了這個(gè)問題:RenderToString 方法。
這種新型 Web
應(yīng)用程序稱為通用應(yīng)用程序或同構(gòu)應(yīng)用程序。關(guān)于這些術(shù)語的確切含義以及它們之間的關(guān)系仍然存在一些爭議,但許多人可以互換使用它們。
無論如何,該解決方案的優(yōu)勢在于能夠使用相同的代碼開發(fā)應(yīng)用程序服務(wù)器端和客戶端,并使用自定義數(shù)據(jù)為用戶提供真正快速的體驗(yàn)。缺點(diǎn)是需要運(yùn)行服務(wù)器。
SSR 用于獲取數(shù)據(jù)并使用自定義內(nèi)容預(yù)填充頁面,利用服務(wù)器的可靠互聯(lián)網(wǎng)連接。也就是說,服務(wù)器自己的互聯(lián)網(wǎng)連接比使用
lie-fi 的用戶更好),因此它能夠在將數(shù)據(jù)交付給用戶之前預(yù)取和合并數(shù)據(jù)。
使用預(yù)先填充的數(shù)據(jù),使用 SSR 應(yīng)用程序還可以解決客戶端呈現(xiàn)的應(yīng)用程序在社交共享和 OpenGraph
系統(tǒng)中存在的問題。例如,如果你只有一個(gè) index.html
文件要交付給客戶端,那么他們將只有一種類型的元數(shù)據(jù)——很可能是你的主頁元數(shù)據(jù)。當(dāng)你想要分享不同的路線時(shí),這不會(huì)被上下文化,因此你的任何路線都不會(huì)顯示在其他網(wǎng)站上,并帶有用戶希望與全世界分享的正確用戶內(nèi)容(描述和預(yù)覽圖片)。在Web前端培訓(xùn)中,不僅有理論知識(shí)的課程,也會(huì)有實(shí)操項(xiàng)目的訓(xùn)練,讓你深入淺出地學(xué)習(xí)前端技術(shù),彌補(bǔ)項(xiàng)目經(jīng)驗(yàn)的空缺。
預(yù)渲染
通用應(yīng)用程序的強(qiáng)制性服務(wù)器對(duì)某些人來說可能是一種威懾,而對(duì)于小型應(yīng)用程序來說可能是過度的。這就是為什么預(yù)渲染可以是一個(gè)非常好的選擇。
我通過 Preact 和它自己的 CLI 發(fā)現(xiàn)了這個(gè)解決方案,它允許你編譯所有預(yù)先選擇的路由,以便你可以將完全填充的
HTML 文件存儲(chǔ)到靜態(tài)服務(wù)器。借助 Preact/React 補(bǔ)水功能,你可以為用戶提供超快速體驗(yàn),而無需使用 Node.js。
問題是,因?yàn)檫@不是
SSR,所以此時(shí)你沒有用戶特定的數(shù)據(jù)要顯示——它只是一個(gè)靜態(tài)(有點(diǎn)通用)文件,直接在第一個(gè)請求上發(fā)送,原樣。因此,如果你有特定于用戶的數(shù)據(jù),你可以在此處集成一個(gè)設(shè)計(jì)精美的骨架,向用戶展示他們的數(shù)據(jù)即將到來,以避免他們感到沮喪。
還有一個(gè)問題:為了使這項(xiàng)技術(shù)起作用,你仍然需要使用代理或其他東西來將用戶重定向到正確的文件。
客戶端呈現(xiàn)的應(yīng)用程序是我們現(xiàn)在應(yīng)該避免的,因?yàn)槲覀兛梢詾橛脩糇龅酶?。在這種情況下,做得更好就像預(yù)渲染解決方案一樣簡單。這絕對(duì)是對(duì)僅客戶端渲染的改進(jìn),并且比完全服務(wù)器端渲染的應(yīng)用程序更容易實(shí)現(xiàn)。想學(xué)習(xí)更多渲染技巧,不妨考慮參加Web前端培訓(xùn),可以在短時(shí)間獲得快速提升,有效提高前端開發(fā)工作效率。