1. 程式人生 > >Ajax 請求太頻繁

Ajax 請求太頻繁

伺服器做了兩個優化 CPU 使用率減低 40%

解決方案

核心思路是不論瀏覽器打開了多少視窗,瀏覽器內的所有視窗在單位時間內(15 秒),只能傳送一個請求。怎麼做到呢?利用現代瀏覽器內建的 localStorage 功能可以很容易實現:

  1. JS 端使用 localStorage 在請求成功後記錄 notification_requested_at 的值為Date.now()
  2. 在每一次請求傳送前,拿當前時間 Date.now() 減去 notification_requested_at 時間;
  3. 如果大於 15 秒,就傳送請求;
  4. 否則放棄請求,直接讀取 localStorage 裡的 notification_count
  5. 請求成功後將獲取到未讀訊息數存入 localStorage 鍵為 notification_count ;
  6. 每次重新整理頁面,JS 初始化時未讀訊息數存入 localStorage 鍵為 notification_count 。

有同學在問為啥不使用長連結,首先這裡要求的實時性不需要那麼高,其次,我有意保持程式架構的簡單,Keep it simple and stupid ,越簡單越方便維護,夠用就行。