[英]Wep App Performance Improvement
我有一個用於評估的Web應用程序。 我在服務器上使用PHP和MySQL,在客戶端上使用jQuery。 用戶界面是一個問題,后面跟着多個選項(無線電)。 用戶從無線電中選擇選項后,單擊按鈕(向前或向后)。 然后,應用程序通過ajax提交所選選項,同時向用戶顯示上一個或下一個問題。 不需要向用戶提供反饋。
雖然此應用程序主要用於本地Intranet,但有些客戶會在Internet上使用它。 由於我的代表有限,我無法上傳屏幕。
這是ajax
$.ajax({
type: 'POST',
url: 'ajax.php',
data: myData,
dataType:'json',
encode:true,
})
.done( function( response ){
//the response from server is OK
if( response == "OK" ){
// Do something
}
//the response from server is BAD
else if( response == 'BAD' ){
// Do something else
}
})
.fail( function( response ){
//for debugging
})
.always( function( response ) {
});
和PHP腳本。 省略了驗證和其他細節,簡要說明
if( isset( $_POST['submit_answer'] ) ){
$question_number = $_POST['number'];
$answer = $_POST['answer'];
$assessment = new Assessment();
if( $assessment->saveAnswer( array( 'number'=>$question_number, 'answer'=>$answer,) ){
$response = 'OK';
}
else{
$response = 'BAD';
}
}
以上腳本實例化的類:
class Assessment
{
public function saveAnswer( array $answer )
{
$sql ="INSERT INTO table SET question_number = :number, answer = :answer;
$stmt = $dbLink->prepare( $sql );
$stmt->bindValue( ':number', $answer['number'], PDO::PARAM_STR );
$stmt->bindValue( ':answer', $answer['answer'], PDO::PARAM_STR );
$stmt->execute();
if( $stmt->rowCount() == 1 )
return true;
else
return false;
}
}
現在我設想一個場景,用戶選擇他們的選項並以非常快速的順序提交,而前面的提交尚未由服務器處理。 我在開發機器上嘗試了這個,發現數據庫中缺少一些選擇。
可能是什么導致了這個? 是延遲嗎? 無論提交的頻率如何,我如何確保提交所有選擇。 我需要在服務器和客戶端腳本甚至數據庫查詢上添加哪些改進或調整。
我終於搞定了這個。 首先感謝@KIKISoftware。 我從他的回答中得到了一個想法。 而不是發布到下一頁,在我的javascript中,我實例化了一個全局數組變量:
var answers = [];
然后在下一個和后退按鈕單擊事件中,我實例化了一個本地對象變量:
var newAnswer = {
number: questionNumber,
answer: chosenAnswer
};
然后將此對象添加到answers數組中。 每隔一段時間,例如60秒,使用JSON.stringify(回答)后,數組將發布到服務器。
這就像一個魅力。 我很開心。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.