1、AJAX: 前後端數據通訊非常重要的手段,基於AJAX從伺服器獲取數據,基於用戶端實現數據的渲染
2、Fetch: 新的前後端通訊方案
3、跨域處理
伺服器渲染(前後端沒有完全分離)
用戶端 | 伺服器端 |
---|---|
瀏覽器獲取程式碼後,進行解析 + DOM樹 +CSSOM樹 +RENDER樹 +Layout 分層 繪製 +… |
Web站點資源 index.jsp ndex.css |
伺服器渲染
弊端:
好處
SSR: 基於NODE業務邏輯的處理,頁面模版基於一些框架,jade/ejs/nuxt.js/next.js, 基於NODE環境完成伺服器渲染
用戶端渲染:前後端分離開發
前端開發:
後端開發:
優勢:
弊端: 不利於SEO優化,基於JS完成的數據系結,頁面原始碼中是不存在的,需要至少請求兩次(一次頁面資源請求,一次數據請求) , 如果網路慢,則白屏時間較長
當代專案架構模型
基於NODE.JS的伺服器渲染(大部分伺服器渲染) => 需要考慮SEO
用戶端渲染(純用戶端渲染): 伺服器用啥語言和我們沒關係,我們只需要基於ajax拿到數據即可
—> 前端基於loading或者骨架背景等在數據請求回來之前,做一個處理,來減少白屏時間
半用戶端渲染: 首屏資訊都是基於伺服器渲染(伺服器骨架屏),第一次載入完,後期再渲染,還是基於ajax用戶端渲染,其他屏都是用戶端渲染
用戶端 + 中間層(NODE.JS) + 數據分析層
核心:
在早起基於ajax獲取的數據格式基本都以xml格式爲主,只不過現在都以json格式爲主
ajax: async javascript and xml
XMLHttpRequest: 也就是基於http請求從伺服器拿到xml格式的數據
建立一個XHR物件(AJAX範例)
let xhr = new XMLHttpRequest;
開啓請求API地址(發送之前的一些設定資訊)
GET系列(get/head/delete/options)
POST系列(post/put)
GET系列請求傳遞給伺服器一般基於URL問號參數
POST系列請求傳遞給伺服器的資訊一般基於"請求主體"
所有請求方式都可以基於請求頭把資訊傳遞給伺服器
xhr.open( [method], [url] , [async 預設true] )
xhr.setRequestHeader(‘xxx’,‘zhufeng’)
監聽請求進度: 當ajax狀態改變
1. xhr.onreadystatechange = function(){
if(xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)){
// 獲取響應頭資訊
console.log(xhr.getResponseHeader('date'))
console.log(xhr.getallResponseHeaders());
// 獲取響應主體
xhr.responseText; (最常用 JSON.parsen())
xhr.responseXML;
xhr.response;
xhr.responseType;
}
}
2.
發送請求
xhr.send([請求主體資訊])
axios 是基於Promise封裝的ajax庫(核心還是ajax的四步操作), 這樣通過Promise非同步管控,避免序列介面呼叫形成回撥地獄
ajax請求一般採用的是非同步
傳統的
$.ajax({
url:'http://v1.hitokoto.cn',
success:result=>{
$.ajax({
url:'http://v1.hitokoto.cn',
success:result=>{
...
}
})
}
})
axios.get('http://v1.hitokoto.cn').then(res=>{
return axios.get('http://v1.hitokoto.cn');
}).then(response=>{})
基於Promise管理ajax的非同步操作
URLSearchParams瀏覽器新增的處理問號傳參的類
let obj = new URLSearchParams(‘name=liming&age=12’)
console.log(…obj.values())
axios的基礎使用
axios([config])
axios([url],[config])
axios.get/head/delete/options([url],[config])
axios.post/put([url],[data],[config])
axios的二次封裝
瀏覽器新增的API,預設就是基於Promise管理的(核心不是XMLHttpRequest)