stone2083

          頁面端數據cache的一種實現思路

          今天在做項目的時候,遇到這樣一個需求,這個需求也比較常見:
          在顯示的一組list版面,當用戶鼠標移動到標題的時候,出現tips提示,里面顯示當前欄一些詳細信息。

          難點如下:
          1)由于list有多個標題(比如20個),不可能在一個request中,把所有的詳細信息取出來put到頁面上。所以只能通過ajax異步請求的方式取的數據。
          2)取詳細信息比較耗性能,需要走一次搜索引擎,走一次數據庫多表查詢進行結果統計。雖然取的過程比較耗服務器性能,但是取的結果集對象是很小的。
          3)單條詳細信息load次數只跟個別會員有關,比如,只有a會員的list頁面需要load 標題A的詳細信息,而且當a用戶多次將鼠標移到該標題上,會多次load數據。反觀站點整體訪問中,其他會員幾乎不用load 標題A的信息。所以,把這些詳細信息放到全局cache中,比如memcached中,命中率也會很低。不值得。(放session就更別提了,session不是用來放這些數據的:比如某個集群環境中,是使用session復制的機制;比如session過期,短時間內--甚至比較長的時間內,session依舊存在內存中,等等。。。)

          那么如何來解決這個問題呢?
          正當想說服需求方放棄這個需求時,出現了一個靈感,可以把數據cache在html頁面上。思路如下:

          1、在html頁面上放n個input元素:<input id="list1" type="hidden" value="" />。視為cache對象;
          2、首次取詳細信息,通過ajax異步訪問服務端,將得到的數據存放到相應的input元素中,并且在指定的div上顯示詳細信息;
          3、之后,取同內容的詳細信息,只要從相應的input元素中取得即可,并顯示在指定的div上。

          通過這樣處理,可以避免用戶多次向服務端取相同的信息。當然這樣處理,不能防止惡意用戶的訪問,但是能滿足80%用戶的正常流程,還是值得這么做的。

          總結一下,符合這種cache的應用場景:
          1)全局cache命中率低
          2)取數據過程耗性能,取得的結果集本身非常小。
          3)在某種場景下,需要多次重復取數據

          如果不滿足其中一條,那么這種cache思路,將毫無價值。

          文中所描述的,僅僅是一種cache的實現思路,并不是一種技術。








          posted on 2008-03-04 21:30 stone2083 閱讀(416) 評論(0)  編輯  收藏 所屬分類: misc

          主站蜘蛛池模板: 崇明县| 连南| 文安县| 麻城市| 珲春市| 泉州市| 乌拉特前旗| 陕西省| 维西| 镶黄旗| 鹰潭市| 淄博市| 梓潼县| 黄大仙区| 垣曲县| 新营市| 错那县| 安仁县| 五河县| 井冈山市| 宁城县| 刚察县| 赤壁市| 临汾市| 永德县| 翼城县| 辰溪县| 定西市| 龙泉市| 雅安市| 巴林左旗| 武隆县| 阿勒泰市| 安庆市| 固始县| 乐业县| 青川县| 宜城市| 博爱县| 繁昌县| 阜平县|