狂淘

          www.kuangtao.net

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            6 隨筆 :: 185 文章 :: 68 評論 :: 0 Trackbacks
          您是不是還在為調用API超過限制而苦惱? 是不是還在為網站空白獲取不到數據而郁悶?
          下面我們就來說說如何減少API調用次以及避免網站頁面空白:

          一.減少API調用

              我們都知道現在的API對每天,每分種都有一定的上限.一但超過這個上限就調不出任何數據,必須等到第二天才可以,所以盡量降低API的調用次數與頻率才是關鍵. 為了解決這個種問題可以從以下幾個方面進行處理:

              A. 降低程序的復雜程序,以減少對API的調用.
                  
                  比如在商品上顯示店鋪的信用,好評率等就需要再調用戶相關的API進行獲取, 雖然商品信息上多了一些資訊.但是增加了API調用次數,同時也降低了網站的打開速度. 建議去掉一些意義不大的信息來降低API的調用次數

              B.緩存API調用過的數據,以降低API的調用頻率與次數
                  
                  緩存這種詞大家再熟悉不過了, 緩存的好處我就不多說了.今天就來說說如何緩存API數據以加快頁面顯示,減少API調用.原理就不多說了.直接修改您的代碼:

                  1).如果您的程序是用淘寶官方的PHP DEMO 或 file_get_contents()函數來獲取API數據.

                      將
                       $result = file_get_contents($url);
          修改成:
                      $cacheid=md5(preg_replace('/timestamp=([\d|-]+)([\d|:]+)/i','',$url));$dirpath = substr($cacheid,0,1); $file =substr($cacheid,0,1).'/'.$cacheid; $cachetime =24*3600;if(file_exists($file) && (time() - date('U',@filemtime($file))) < $cachetime){$result =@file_get_contents($file);}else{$result = @file_get_contents($url);@mkdir($dirpath);@file_put_contents($file,$result);}
          這樣您的同一個API,同樣的參數每24小時才會去訪問一次API,上面的變量我做一下說明:

                      緩存ID: $cacheid 為每次調用API的參數所組成的MD5 由于timestamp會變化,所以timestamp不在其內

                      保存的目錄: $dirpath  為每個MD5的第一個字母,這樣最多會生成36個目錄

                      保存的文件: $file 采用MD5直接做為緩存文件名

                      緩存時間: $cachetime   24小時 X 3600 秒,也就是一天的時間,如果需要更長只需要將24調的更大一些


                      凡是需要緩存的地方都用以上方法替換以后就可以緩存API結果了. 替換后您看看是不是頁面打開更快了? API的調用次數也降下來了?

                   2).如果您使用了taoapi.com上面的PHP SDK

                  只需要在您調用API時,設置一下緩存時間就行

                       $Taoapi->Cache->setCacheTime(24);
          設置數據緩存的時間,單位:小時;0表示不緩存,不設置默認為 0

                  具體的調用方式可以查看: http://www.taoapi.com/index.php/index/index/action/phpSdk


              C.靜態化更新頻率不高的頁面
                  
                  一些更新頻率不高的頁面可以采用靜態化頁面,這樣不僅對網站,API,服務器來說都是有好處的.具體的操作方式與緩存機制類同.這里我就不做重點了. 列一下相關的函數: ob_start();ob_get_contents();file_get_contents();file_put_contents();http_build_query();

                  原理:
                  
                  根據URL檢測靜態面頁文件是否存在

                 1)如果存在,并且沒有過期:

                      終止程序運行,直接輸出該頁面文件

                  2)如果存在,但已經過期:

                      程序繼續運行.程序結束時用HTML內容替換現有的靜態頁面文件

                  3)如果不存在:
                      
                      程序繼續運行.程序結束時用HTML內容建立一個新的靜態頁面文件

          二.避免網站頁面空白

              API加入了緩存以后調用次數下降了,但是當網絡忙或API接口繁忙時可能出現獲取不到數據而出現空白頁面.這時推薦大家采用一種最簡單的方式: 自動重試 和采用過期緩存

              1)自動重試:

                 當通過API第一次沒有獲取到數據時,再次重新獲取,雖然會增加一次調用次數.但這是可接受的.因為沒有什么比給用戶看到空白頁面更糟糕的了,這里建議最好不要超過3次. 由于自動重試需要寫的代碼比較多這里就不列出來了, 知道原理后可以自己寫一個或者使用taoapi.com 上面的PHPSDK 支持自動重試,默認為3次
             
              2)采用過期緩存:

                  如果做了緩存,在緩存更新時遇到沒有獲取數據(雖然這種情況非常少),就采用過期的緩存先給用戶.比起空白的頁面要好的多.在下一次用戶訪問時再重新更新緩存. 這樣只要用緩存存在,您的頁面永遠不會空白. 目前taoapi.com 上的PHP SDK暫時還不支持這種機制,但會在盡期內加入,敬請關注


          今天就先聊到這里,像內存緩存.數據庫緩存等這些以后有機會再和大家聊聊. 如果您在過程碰到疑問 歡迎前來找到討論, 我的旺旺:浪子arvin  QQ: 8769852,如果在API方面有其他問題推薦你先去taoapi.com測試一把,說不定問題就不是問題了,在此感謝您有耐心聽我說了這么久!
          www.kuangtao.net  淘寶網首頁
          posted on 2010-05-26 16:48 狂淘 閱讀(2236) 評論(0)  編輯  收藏 所屬分類: topApi

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 濮阳市| 宝山区| 融水| 张家界市| 吉隆县| 建湖县| 南宁市| 稻城县| 阳泉市| 祥云县| 馆陶县| 德化县| 沙洋县| 苍梧县| 安龙县| 榕江县| 株洲县| 迁西县| 民乐县| 土默特右旗| 东乡县| 松溪县| 怀柔区| 隆德县| 喀喇| 宁夏| 荃湾区| 大竹县| 淮阳县| 溆浦县| 阿合奇县| 绵阳市| 淮北市| 翁牛特旗| 连州市| 正定县| 遂昌县| 许昌县| 来凤县| 资阳市| 罗甸县|