stone2083

          頁面端數(shù)據(jù)cache的一種實現(xiàn)思路

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

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

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

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

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

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

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

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








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

          主站蜘蛛池模板: 石渠县| 扎兰屯市| 宝兴县| 酒泉市| 洛宁县| 图木舒克市| 肇庆市| 贺州市| 阆中市| 秭归县| 内黄县| 彩票| 揭东县| 隆化县| 林甸县| 汾西县| 宜君县| 樟树市| 沽源县| 广水市| 江孜县| 通化县| 始兴县| 财经| 巧家县| 昌江| 郯城县| 沾益县| 芷江| 乌兰察布市| 双鸭山市| 咸丰县| 华容县| 萨嘎县| 湘潭市| 江山市| 永和县| 敦煌市| 泗阳县| 宝山区| 荃湾区|