這次帶給大家如何使用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) } }
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
以上是如何使用JS實現前後端同構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE

Python和JavaScript在性能和效率方面的差異主要體現在:1)Python作為解釋型語言,運行速度較慢,但開發效率高,適合快速原型開發;2)JavaScript在瀏覽器中受限於單線程,但在Node.js中可利用多線程和異步I/O提升性能,兩者在實際項目中各有優勢。

JavaScript起源於1995年,由布蘭登·艾克創造,實現語言為C語言。 1.C語言為JavaScript提供了高性能和系統級編程能力。 2.JavaScript的內存管理和性能優化依賴於C語言。 3.C語言的跨平台特性幫助JavaScript在不同操作系統上高效運行。

JavaScript在瀏覽器和Node.js環境中運行,依賴JavaScript引擎解析和執行代碼。 1)解析階段生成抽象語法樹(AST);2)編譯階段將AST轉換為字節碼或機器碼;3)執行階段執行編譯後的代碼。

Python和JavaScript的未來趨勢包括:1.Python將鞏固在科學計算和AI領域的地位,2.JavaScript將推動Web技術發展,3.跨平台開發將成為熱門,4.性能優化將是重點。兩者都將繼續在各自領域擴展應用場景,並在性能上有更多突破。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

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

WebStorm Mac版
好用的JavaScript開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境