你寫代碼的時候注意 HTML格式 和CSS格式。不要把所有內(nèi)容都寫到同一個DIV中間,這樣?xùn)|西多的時候就會卡住。要分層次顯示,另外碰到數(shù)據(jù)庫查詢文字非常多的你還可以使用AJAX 返回數(shù)據(jù) 這樣HTML就可以很快的顯示 顯示完畢才去讀數(shù)據(jù)庫這樣速度會快很多。至于樓上說的 緩存 數(shù)據(jù)庫存儲過程 可以參考一下,不過一般企業(yè)站不需要考慮。碰到大站在線100人以上的才會做。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),廣饒企業(yè)網(wǎng)站建設(shè),廣饒品牌網(wǎng)站建設(shè),網(wǎng)站定制,廣饒網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,廣饒網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
這個需要配合js,打開一個html頁面,首先js用ajax請求頁面,返回第一個頁面信息確定處理完畢(ajax有強(qiáng)制同步功能),ajax再訪問第二個頁面。(或者根據(jù)服務(wù)器狀況,你可以同時提交幾個URL,跑幾個相同的頁面)
參數(shù)可以由js產(chǎn)生并傳遞url,php后臺頁面根據(jù)URL抓頁面。然后ajax通過php,在數(shù)據(jù)庫或者是哪里設(shè)一個標(biāo)量,標(biāo)明檢測到哪里。由于前臺的html頁面執(zhí)行多少時候都沒問題,這樣php的內(nèi)存限制和執(zhí)行時間限制就解決了。
因為不會浪費大量的資源用一個頁面來跑一個瞬間500次的for循環(huán)了。(你的500次for循環(huán)死了原因可能是獲取的數(shù)據(jù)太多,大過了php限制的內(nèi)存)
不過印象中curl好像也有強(qiáng)制同步的選項,就是等待一個抓取后再執(zhí)行下一步。但是這個500次都是用一個頁面線程處理,也就是說肯定會遠(yuǎn)遠(yuǎn)大于30秒的默認(rèn)執(zhí)行時間。
這個問題在PHP的官方網(wǎng)站上叫緩沖查詢和非緩沖查詢(Buffered and Unbuffered queries)。PHP的查詢?nèi)笔∧J绞蔷彌_模式。也就是說,查詢數(shù)據(jù)結(jié)果會一次全部提取到內(nèi)存里供PHP程序處理。這樣給了PHP程序額外的功能,比如說,計算行數(shù),將指針指向某一行等。更重要的是程序可以對數(shù)據(jù)集反復(fù)進(jìn)行二次查詢和過濾等操作。但這種緩沖查詢模式的缺陷就是消耗內(nèi)存,也就是用空間換速度。
相對的,另外一種PHP查詢模式是非緩沖查詢,數(shù)據(jù)庫服務(wù)器會一條一條的返回數(shù)據(jù),而不是一次全部返回,這樣的結(jié)果就是PHP程序消耗較少的內(nèi)存,但卻增加了數(shù)據(jù)庫服務(wù)器的壓力,因為數(shù)據(jù)庫會一直等待PHP來取數(shù)據(jù),一直到數(shù)據(jù)全部取完。
很顯然,緩沖查詢模式適用于小數(shù)據(jù)量查詢,而非緩沖查詢適應(yīng)于大數(shù)據(jù)量查詢。
你用網(wǎng)頁的方式,讓人點擊,服務(wù)器采集,簡直是弱爆了。每個人的點擊循環(huán)1000次,來個100人同時點,你要用的是普通的虛擬機(jī)就不行了。
最好是換種方式實現(xiàn),不要通過網(wǎng)頁進(jìn)行采集。
可以非常簡單的在數(shù)據(jù)庫的表,創(chuàng)建一個采集隊列,后臺執(zhí)行一個crontab的計劃任務(wù),去完成隊列里的采集任務(wù)。
拿下面這段單獨建個頁面,改一下你的數(shù)據(jù)庫名,表等信息試試。
table width="50%" border="0"
tr
tdID/td
tdID2/td
tdorder1/td
tdorder2/td
tdorder3/td
/tr
?php
//連接數(shù)據(jù)庫
$conn=@ mysql_connect("服務(wù)器地址","用戶名","密碼") or die("連接數(shù)據(jù)庫失敗!");
mysql_select_db("數(shù)據(jù)庫名",$conn) or die("連接數(shù)據(jù)庫失敗!");
mysql_query("set names 'GBK'");
//連接結(jié)束
//接收提交過來查詢的ID
$id=$_POST["id"];
//查詢數(shù)據(jù)庫相關(guān)數(shù)據(jù)
$sql="select * from 數(shù)據(jù)表名 where ID2='".$id."' order by id desc";
$query=mysql_query($sql);
//循環(huán)輸出
while($row=mysql_fetch_array($query)){
?
tr
td?php echo $row["ID"];?/td
td?php echo $row["ID2"];?/td
td?php echo $row["order1"];?/td
td?php echo $row["order2"];?/td
td?php echo $row["order3"];?/td
/tr
?php
}
?
/table
form name="form1" method="post" action=""
input type="text" name="id"
input type="submit" name="Submit" value="查詢"
/form
你說的寫文件是個思路。如果你只是要求某一個字段是唯一,可以把這個存在內(nèi)存中,每次進(jìn)行驗證。然后把驗證通過的數(shù)據(jù)寫入文件,最后在統(tǒng)一從文件中讀出來存入數(shù)據(jù)庫。
但是又會出現(xiàn)個問題。如果你是10萬條數(shù)據(jù)在文件里,你要是想用一個INSERT插入,那必須得先把這數(shù)據(jù)讀到內(nèi)存里,肯定也很慢,而且不穩(wěn)定。如果你逐條讀出插入,對數(shù)據(jù)庫也是個消耗。不過你可以把數(shù)據(jù)拆散,比如每1000條插一次。