前端面試的經(jīng)典題第二彈

http緩存的meta標簽

HTTP協(xié)議中關于緩存的信息頭關鍵字包括Cache-Control(HTTP1.1),Pragma(HTTP1.0),last-Modified,Expires等。

  • Cache-Control
    • no-cache 瀏覽器和緩存服務器不緩存頁面信息
    • private 指示對于單個用戶的整個或部分響應消息,不能被共享緩存處理
    • must-revalidate 對于客戶機的每次請求,服務器驗證緩存是否過時
    • public 瀏覽器和緩存服務器可以緩存頁面信息
    • no-store http信息不被存儲在對方的磁盤系統(tǒng)
  • Pragma
    • Pragma
    • no-cache
  • last-modified 只頁面的最后生成時間,GMT格式
  • Expire 指的是過期的時間,過了某個時間點后從真正的服務器眾獲取新的頁面信息

1) 打開新窗口 值為private、no-cache、must-revalidate,那么打開新窗口訪問時都會重新訪問服務器。 而如果指定了max-age值,那么在此值內(nèi)的時間里就不會重新訪問服務器,例如: Cache-control: max-age=5(表示當訪問此網(wǎng)頁后的5秒內(nèi)再次訪問不會去服務器)
2) 在地址欄回車 值為private或must-revalidate則只有第一次訪問時會訪問服務器,以后就不再訪問。 值為no-cache,那么每次都會訪問。 值為max-age,則在過期之前不會重復訪問。
3) 按后退按扭 值為private、must-revalidate、max-age,則不會重訪問, 值為no-cache,則每次都重復訪問
4) 按刷新按扭 無論為何值,都會重復訪問。Cache-control值為“no-cache”時,訪問此頁面不會在Internet臨時文件夾留下頁面?zhèn)浞荨?br> 來自《html頭文件設置常用之<meta>設置緩存》

跨域CORS的步驟

簡單請求

主要是指GET,POST,HEAD三種請求方式。

HTTP頭文件不超出下面的方式:

Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限于三個值application/x-www-form-urlencoded、multipart/form-data、text/plain
  1. 瀏覽器端:使用GET或者POST發(fā)送的請求,根據(jù)你請求的地址,給它附加一個額外的Origin頭部,其中包含請求頁面的源信息(協(xié)議、域名和端口)。這個動作大部分瀏覽器是自動的,除了IE8,它引用的是XDR。
  2. 服務端:如果認為這個請求接受,就在Access-Control-Allow-Origin頭部中回發(fā)相同的源信息。

例如:Access-Control-Allow-Origin:http://www.test.com

非簡單請求(Preflighted Requests)

它支持GET,POST,HEAD以外事件的方法。

瀏覽器端會根據(jù)你的請求方法添加的頭信息自動添加除了Origin外還有下面兩個屬性。

  • Access-Control-Request-Method 該字段是必須的,用來列出瀏覽器的CORS請求會用到哪些HTTP方法,上例是PUT
  • Access-Control-Request-Headers 該字段是一個逗號分隔的字符串,指定瀏覽器CORS請求會額外發(fā)送的頭信息字段

服務端確認允許跨源請求,需要添加以下字段。

  • Access-Control-Allow-Origin 與簡單請求一樣,指請求頁面源信息,*表示所有站點
  • Access-Control-Allow-Methods 該字段必需,它的值是逗號分隔的一個字符串,表明服務器支持的所有跨域請求的方法
  • Access-Control-Allow-Headers 如果瀏覽器請求包括Access-Control-Request-Headers字段,則Access-Control-Allow-Headers字段是必需的
  • Access-Control-Allow-Credentials 是否發(fā)送憑證
  • Access-Control-Max-Age 緩存多長時間(秒為單位)
response.setContentType("text/html; charset=utf-8");
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "*");
response.addHeader("Access-Control-Max-Age", "100");
response.addHeader("Access-Control-Allow-Headers", "X-Custom-Header,accept, content-type");
response.addHeader("Access-Control-Allow-Credentials", "false");

什么時候觸發(fā)重繪重排

  • 增加或刪除DOM節(jié)點
  • 移動頁面中的元素
  • 增加或者修改樣式
  • 設置display: none;(重排并重繪)或者visibility: hidden(只有重排)
  • 用戶改變窗口大小,滾動頁面等

怎么減少重繪重排

  • 不要一個一個地單獨修改屬性,最好通過一個classname來定義這些修改
  • clone節(jié)點后大幅度修改它,最后插入節(jié)點。或者用DocumentFragment進行修改
  • 不要頻繁獲取計算后的樣式,最好暫存起來而不是直接從DOM上讀取
  • 絕對定位的動畫不會影響其他dom

參考

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容