這次帶給大家JS進行前後端同構步驟詳解,JS進行前後端同構的注意事項有哪些,下面就是實戰案例,一起來看一下。
什麼是前後端同構
#明確三個概念:「後端渲染」指傳統的ASP、Java 或PHP 的渲染機制;「前端渲染」指使用JS 來渲染頁面大部分內容,代表是現在流行的SPA 單頁應用;「同構渲染」指前後端共用JS,首次渲染時使用Node.js 來直出HTML。一般來說同構渲染是介於前後端中的共有部分。
感覺前端的確是折騰,之前還在流行前後端分離,現在怎麼又要做前後端同構了?
原因是現在流行的SPA前端單頁應用比較沉重,首次存取需要載入檔案較多,第一次載入過慢,使用者需要等待前端進行渲染頁面。而且不利於SEO及緩存,而且有一定的開發門檻。
前後端同構透過重複使用模板和JS文件,讓一份程式碼可以同時跑在伺服器和瀏覽器,首次渲染使用nodejs渲染頁面,之後使用SPA路由跳轉。可以有效減少使用者首次造訪的等待時間,並且對SEO比較友好,也便於快取。
專案簡介
本前後端同構專案主要分為兩個部分,一個是基於koa2的渲染伺服器,另一個是基於原生JS和zepto的前端SPA。
專案的特點是不使用vue和react等框架,門檻低,開發速度快,便於上手,比較輕巧,核心的router部分只有一百行左右的程式碼。適用於頁面互動較少,變化不頻繁的場景下,可以有效的提升效能和載入速度。
前端部分
前端部分的核心是路由部分,具體實作可以基於history API或是hash,網路上有很多實現,這次主要講下架構
前端部分採用MVC分層結構。
router層做的主要是建立路由範例,呼叫路由的get方法,綁定來自control層的函數給特定頁面。
形式如:
import control from '../control' //路由的构造函数支持传入渲染函数,路由的全局名称,路由跳转前调用的钩子 router = new Router(render,'ROUTER',beforeFn) router.get('/page/a', control.pageA')
control層主要做的是載入跟後端共有的渲染模板和渲染數據,渲染出頁面後運行頁面函數
形式如:
let control = { pageA(req,res) { //webpack的动态加载,代码分割功能 import(/* webpackChunkName: "pageA" */'script/pageA').then(module=> { // 检测该页面是否已有服务器渲染好,是的话直接运行module.default //否则加载模板和数据进行渲染,最后再调用页面函数 if(this.needRender(module.default)) { //加载数据时访问的地址就是当前准备渲染的页面地址,只是加上了json=1的参数 loadData('pageA').then(data => res.render(xtpl,data,module.default)) } } } // 捕捉webpack热更新,让他只进行相当于页面跳转的操作而不是刷新页面 if(module.hot) { module.hot.accept(['script/pageA'], () => { control[ROUTER.req.currentControl].call(ROUTER,null,ROUTER.res) }) }
view圖層即模板,這裡使用的是xtpl模板,在伺服器環境和前端環境下都支援渲染頁面
頁面函數的形式
頁面函數要求使用es6的模組寫法,配合webpack的按需載入功能
export default () => { window.addEventListener('scroll', fn) //页面函数支持返回一个卸载函数,在页面离开的时候会被调用 //主要用于内存的释放,定时器的清除,事件监听的移除等等 return function () { window.removeEventListener('scroll', fn) } }
後端部分
使用koa2搭建的一個渲染伺服器,在收到前端傳來的頁面請求時,會向API伺服器請求數據,並識別頁面請求是否帶有json=1的參數,如果帶有,則為前端路由跳轉時的請求,直接返回數據即可,如果沒有帶json參數,載入跟前端共用的模板,配合資料進行渲染,傳送到瀏覽器。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
######################################################## ##以上是JS進行前後端同構步驟詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具