Please enable JavaScript.
Coggle requires JavaScript to display documents.
前端知識 - Coggle Diagram
前端知識
緩存
Cache-control (HTTP/1.1)
no-store 沒有緩存
no-cache 緩存但會問 server 是否過期
返回 304 即使用本地緩存
public 可被任何中間人緩存(CDN、中間代理)
private(default) 中間人不能緩存,只能用於單用戶(遊覽器私有緩存)
max-age=<sec> 可緩存時間
age=<sec> 已緩存時間(在Cache中)
Expires: <http-date> 過期時間
過期時間,如果跟 max-age 再一起則忽略此 header
Last-Modified 資源修改日期
如果 max-age 與 Expires 都沒有的話
過期日為 expirationTime = responseTime + freshnessLifetime - currentAge
弱校驗器
must-revalidate 必須重新驗證緩存
用戶刷新按鈕會觸發緩存驗證
普遍緩存的狀態碼
200 請求成功
301 永久重定向
404 錯誤響應
206 返回局部信息
匹配到已定義的 cache 鍵名
緩存分級
本地緩存(瀏覽器緩存)
Cache-Control 和 Expires
代理伺服器緩存
CDN 緩存
伺服器端緩存
Cache-Control
If-None-Match: <etag_value>
緩存過期時,客戶端在請求 header 附加 If-None-Match ,詢問此資源是否還是新鮮的,若是新鮮的,則從 Server 回應 304
若已過期則直接回傳資源實體
弱比較,內容一致則當成是同一份文件
常用場景
GET HEAD:用來更新某 ETag 的緩存
PUT:用來生成事先不知道是否存在的文件,確保不會重複上傳
Vary (HTTP/1.1)
Vary: * 所有的请求都被视为唯一并且非缓存的
Vary: <header-name> 逗号分隔的一系列 http 头部名称,用于确定缓存是否可用。
可將緩存分類(ex. gzip,br)
ETag: <etag_value>
資源的指紋,更新資源時必須更新 ETag
配合 If-Match 可偵測 "空中碰撞" 的編輯衝突
客戶端偵測緩存過期時,發送
If-None-Match
帶當前資源的 ETag 給服務器,服務器若檢查 ETag 沒異動,則返回 304 給客端
強校驗器
最佳策略
Immutable Content + Long max-age
html 觸發請求不同的版本化的文件, html 設定 max-age
Cache-Control: max-age=0 瀏覽器一接收到,就會標示為過期。這樣當使用者再次造訪頁面,就會去 Server 詢問有沒有新的資料,再搭配上 Etag 來使用,就可以保證只會下載到最新的 Response。(若無變更則收到 Http 304)
Cache-Control: no-cache。no-cache 並不是「完全不使用快取的意思」,而是跟我們上面的行為一樣。每次都會發送 Request 去確認是否有新的檔案。
文件版本化 test.a123.js, 然後設定超長緩存 Cache-Control: max-age=31536000
Mutable content + Always Server Revalidated
Cache-Control: no-cache + ETag
Service Worker?
Pragma(HTTP/1.0)
跟 no-cache 一樣
私有緩存(瀏覽器)
共享代理緩存(服務器)
關鍵:request method 與 資源 URI
一般只有 GET 成功才會緩存
http 狀態碼
1XX 臨時狀態
2XX 服務器成功處理請求
3XX 重定向
4XX 客戶端響應
(服務器不一定有收到)
5XX 服務端響應
(服務器有收到請求,但失敗)
javascript
prototype 是自身的
__proto__
是父原型,指向別人的 prototype
类型被定义在 .prototype 中
new 是加一層
__proto__
上去
doSomething.foo 在 constructor 上
instance 會往上遍歷 prototype 找值
试图访问不存在的属性时会遍历整个原型链
new 需有 constructor
沒有 constructor 就是 instance
function 內建具有 constructor,可以配合 prototype 產生 class 效果
設計
事件驅動
時間旅行 Time Travelling
用戶輸入
文本編輯、太鼓達人
重視用戶體驗
Redux 为了调试体验,牺牲了开发体验
要針對事件併發做排程&處理
數據驅動
後台表單
重視數據正確性
HMR
tfrp
Module
ESM
commonjs
AMD
UMD
跨域請求 CORS
JSONP
簡單請求
CORS headers
GET, POST, HEAD
Content-Type
x-www-from-urlencoded
multipart/form-data
text/plain
Web
SiteMap.xml
Ro
Debug
SourceMap
HttpHeader: X-SourceMap: /path/to/file.js.map
手動加SourceMap (Only Chrome)
add comment
//# sourceMappingURL=/path/to/file.js.map
動畫
SVGA
CSRF攻擊
https://blog.techbridge.cc/2017/02/25/csrf-introduction/
XSS 攻擊
Accessibility(a11y)
离线优先