您是不是還在為調用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 淘寶網首頁