2014-03-12 19 views
0

我試圖找出一種方法,使一些網頁更有效時,處理和格式化非常大的查詢的數據(只是從事物的編碼側)。目前php正在用於處理數據,我的理論是,將javascript和jquery結合起來將大大加快處理這些數據的速度,因爲它將會抵消從服務器端到客戶端的處理。這是真的?處理大型數據集與PHP的Javascript

這是在我的網頁是怎麼回事樣處理的樣品:

$query = "Select * from large_table"; 

// run the query 
$result = maxdb_query($link, $query); 

// very large number of rows... 
while($row = maxdb_fetch_assoc($result)) 
{ 
    echo "<tr>"; 

    $calculation1 = $row['col1'] + $row['col2']/$row['col3']; 
    $calculation2 = row['col1']/row['col2'] - row['col4']; 
    //... more calculations 

    echo "<td> " + $row['col1'] + "</td>"; 
    echo "<td> " + $calculation1 + "</td>"; 
    echo "<td> " + $calculation2 + "</td>"; 
    // ... etc. 

    echo "</tr>"; 
} 

感謝您的幫助。相比參與圍繞換檔大量數據的處理

+0

如果您確定要在客戶端啓用Javascript,那麼我肯定會將計算處理卸載到客戶端,但要明白,如果他們真的有可怕的舊CPU,那麼他們會責怪你網站爲「緩慢」 – MonkeyZeus

回答

2

參與基本數學處理是微不足道的。如果您只是發送數字(一個JSON字符串?),並將JavaScript呈現爲一個表格,您可能會看到帶寬使用方面的一些改進,但就處理過程而言,它幾乎沒有什麼區別。

考慮您的拼版數據,而不是與在MySQL LIMIT X,Y

+0

+1! OP,也考慮不要執行'SELECT *',因爲大多數時候你不需要所有的列,並且它不必要地從HDD中讀取更多的讀數 – MonkeyZeus

0

這兩種方式都將是訪問相同的數據量,需要同SQL數據庫一樣的互動。如果您遇到問題並希望更快地提供服務並減少SQL交互,我會考慮緩存。

0

假設您無論如何都需要傳輸所有數據(用於顯示),那麼在執行客戶端計算時可能會節省一小部分效率。

更重要的是,最小化生成的數據並通過php傳輸可以提供更大的節約。因此,將查詢輸出直接放入一個json字符串(或類似的)中,然後渲染完整的HTML,包括客戶端的計算。

但這樣做,我建議你不計算運行查詢,只是爲了看看瓶頸是在SQL查詢本身之前。

1

說實話,最大的改進將是在限制你回來在查詢中的行數。如果你可以過濾它,你顯然可以用WHERE子句做到這一點。但是,如果您擁有數十萬或數百萬行,這可能沒有多大幫助。

相反,我建議將每次調用的輸出限制爲100到500行。然後,如果您需要查看更多信息,只需以幾種不同的方式查看下一組結果即可。從SQL查詢角度來看,您可以使用LIMIT和OFFSET(或使用「LIMIT {offset},{row count}」)。

從前端你可以做任何事情。您可以在PHP中創建每頁結果的簡單分頁,並在底部列出各種頁碼的鏈接。

您可以通過JavaScript AJAX調用將數據拉入到返回每組數據的端點來模擬此數據,然後根據需要將其顯示在頁面上。

或者你可以用JavaScript做基本相同的事情,但以連續滾動的格式顯示,當用戶向下滾動時,列表會隨着越來越多的項目添加到結尾。

所有這些選項都會大大減少用戶顯示確定數據並大大提高體驗的時間。

要做到,你可以使用jQuery的AJAX功能(http://jqapi.com/#p=jQuery.ajax)或它的一個其它的發送選項AJAX /接收功能發送數據請求到服務器。然後在PHP中處理請求並返回一個jQuery對象以供jQuery處理和添加到DOM。

在附註中,您應該只是將數據填充到輸出數組中,然後在專用於將HTML輸出到最終用戶的代碼的一部分中輸出HTML,而不是將邏輯和演示文稿組合在一起地點。

+0

maxDB中沒有LIMIT子句,這是一個巨大的失望 – RobPio

+0

Theren' T'我認爲它被吹捧爲企業級RDBMS解決方案。 – pthurmond