您是不是還在為調(diào)用API超過限制而苦惱? 是不是還在為網(wǎng)站空白獲取不到數(shù)據(jù)而郁悶?
下面我們就來說說如何減少API調(diào)用次以及避免網(wǎng)站頁面空白:
一.減少API調(diào)用
我們都知道現(xiàn)在的API對每天,每分種都有一定的上限.一但超過這個上限就調(diào)不出任何數(shù)據(jù),必須等到第二天才可以,所以盡量降低API的調(diào)用次數(shù)與頻率才是關(guān)鍵. 為了解決這個種問題可以從以下幾個方面進(jìn)行處理:
A. 降低程序的復(fù)雜程序,以減少對API的調(diào)用.
比如在商品上顯示店鋪的信用,好評率等就需要再調(diào)用戶相關(guān)的API進(jìn)行獲取, 雖然商品信息上多了一些資訊.但是增加了API調(diào)用次數(shù),同時也降低了網(wǎng)站的打開速度. 建議去掉一些意義不大的信息來降低API的調(diào)用次數(shù)
B.緩存API調(diào)用過的數(shù)據(jù),以降低API的調(diào)用頻率與次數(shù)
緩存這種詞大家再熟悉不過了, 緩存的好處我就不多說了.今天就來說說如何緩存API數(shù)據(jù)以加快頁面顯示,減少API調(diào)用.原理就不多說了.直接修改您的代碼:
1).如果您的程序是用淘寶官方的PHP DEMO 或 file_get_contents()函數(shù)來獲取API數(shù)據(jù).
將
$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,同樣的參數(shù)每24小時才會去訪問一次API,上面的變量我做一下說明:
緩存ID: $cacheid 為每次調(diào)用API的參數(shù)所組成的MD5 由于timestamp會變化,所以timestamp不在其內(nèi)
保存的目錄: $dirpath 為每個MD5的第一個字母,這樣最多會生成36個目錄
保存的文件: $file 采用MD5直接做為緩存文件名
緩存時間: $cachetime 24小時 X 3600 秒,也就是一天的時間,如果需要更長只需要將24調(diào)的更大一些
凡是需要緩存的地方都用以上方法替換以后就可以緩存API結(jié)果了. 替換后您看看是不是頁面打開更快了? API的調(diào)用次數(shù)也降下來了?
2).如果您使用了taoapi.com上面的PHP SDK
只需要在您調(diào)用API時,設(shè)置一下緩存時間就行
$Taoapi->Cache->setCacheTime(24);
設(shè)置數(shù)據(jù)緩存的時間,單位:小時;0表示不緩存,不設(shè)置默認(rèn)為 0
具體的調(diào)用方式可以查看:
http://www.taoapi.com/index.php/index/index/action/phpSdk
C.靜態(tài)化更新頻率不高的頁面
一些更新頻率不高的頁面可以采用靜態(tài)化頁面,這樣不僅對網(wǎng)站,API,服務(wù)器來說都是有好處的.具體的操作方式與緩存機(jī)制類同.這里我就不做重點(diǎn)了. 列一下相關(guān)的函數(shù): ob_start();ob_get_contents();file_get_contents();file_put_contents();http_build_query();
原理:
根據(jù)URL檢測靜態(tài)面頁文件是否存在
1)如果存在,并且沒有過期:
終止程序運(yùn)行,直接輸出該頁面文件
2)如果存在,但已經(jīng)過期:
程序繼續(xù)運(yùn)行.程序結(jié)束時用HTML內(nèi)容替換現(xiàn)有的靜態(tài)頁面文件
3)如果不存在:
程序繼續(xù)運(yùn)行.程序結(jié)束時用HTML內(nèi)容建立一個新的靜態(tài)頁面文件
二.避免網(wǎng)站頁面空白
API加入了緩存以后調(diào)用次數(shù)下降了,但是當(dāng)網(wǎng)絡(luò)忙或API接口繁忙時可能出現(xiàn)獲取不到數(shù)據(jù)而出現(xiàn)空白頁面.這時推薦大家采用一種最簡單的方式: 自動重試 和采用過期緩存
1)自動重試:
當(dāng)通過API第一次沒有獲取到數(shù)據(jù)時,再次重新獲取,雖然會增加一次調(diào)用次數(shù).但這是可接受的.因為沒有什么比給用戶看到空白頁面更糟糕的了,這里建議最好不要超過3次. 由于自動重試需要寫的代碼比較多這里就不列出來了, 知道原理后可以自己寫一個或者使用taoapi.com 上面的PHPSDK 支持自動重試,默認(rèn)為3次
2)采用過期緩存:
如果做了緩存,在緩存更新時遇到?jīng)]有獲取數(shù)據(jù)(雖然這種情況非常少),就采用過期的緩存先給用戶.比起空白的頁面要好的多.在下一次用戶訪問時再重新更新緩存. 這樣只要用緩存存在,您的頁面永遠(yuǎn)不會空白. 目前taoapi.com 上的PHP SDK暫時還不支持這種機(jī)制,但會在盡期內(nèi)加入,敬請關(guān)注
今天就先聊到這里,像內(nèi)存緩存.數(shù)據(jù)庫緩存等這些以后有機(jī)會再和大家聊聊. 如果您在過程碰到疑問 歡迎前來找到討論, 我的旺旺:浪子arvin QQ: 8769852,如果在API方面有其他問題推薦你先去taoapi.com測試一把,說不定問題就不是問題了,在此感謝您有耐心聽我說了這么久!
www.kuangtao.net 淘寶網(wǎng)首頁