91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

原生JS如何進行前后端同構

發布時間:2021-09-01 14:37:07 來源:億速云 閱讀:153 作者:小新 欄目:web開發

小編給大家分享一下原生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參數,加載跟前端共用的模板,配合數據進行渲染,發送到瀏覽器。

以上是“原生JS如何進行前后端同構”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

沂南县| 林甸县| 平陆县| 巢湖市| 峡江县| 永福县| 施秉县| 宁强县| 海淀区| 象山县| 天津市| 和田市| 德江县| 通山县| 苏尼特右旗| 玉环县| 大城县| 双牌县| 白山市| 洪雅县| 镶黄旗| 若羌县| 马山县| 通海县| 龙江县| 江口县| 大连市| 阜城县| 高安市| 泗水县| 怀化市| 天全县| 庆城县| 大余县| 祁门县| 永德县| 长武县| 忻城县| 凌云县| 张家港市| 横峰县|