2010-10-29 76 views
1

我有一個通過AJAX調用運行的PHP腳本,有時可能需要很長時間(最多30秒)。爲了幫助保持訪問者的注意力,我展示了一個進程欄,介紹進程的程度,以及列出有關Web應用程序的隨機事件等等。開幕和閉幕會議是否會影響效果?

爲了更新進度條以顯示這個過程在一個%中究竟有多遠,腳本向會話寫入什麼是「過程」的狀態,「總量」是它需要做的量,「進度」是說完成了多少。在進行長時間的AJAX調用的同時,另一個單獨的AJAX調用會顯示一個列出這3個會話變量的頁面,以便它可以將其轉化爲JavaScript中的精確進度條,並且每0.5秒左右重複一次。

的問題是,爲了這第二個AJAX調用能夠檢索會話數據,會話必須關閉。所以在長度腳本中,它打開會話,寫入數據,然後關閉它。

有沒有造成這樣做任何顯著的性能損失?是否有更好的選擇來顯示漫長的AJAX呼叫有多遠?

編輯:我應該更仔細地選擇我的話。這個過程需要花費30多秒,而且有必要展示一個真正的進度條,而不是重複的gif。改變算法後,現在平均只需要1-5秒,但我猜測在極端情況下可能會達到10秒。它是異步的,頁面上還有其他內容,他們必須選擇啓動該進程。他們可以去其他頁面,甚至關閉窗口,稍後再回來查看完成。現在時間跨度明顯較低,我想知道如果我試圖展示一個「真正」的進度條,或者如果有另一種替代方法,我是否會傷害其快速性能。

回答

0
32分之

很長一段時間的人,等待在網絡上任何東西,這聽起來像這樣在你的界面阻止(我的意思是,用戶不能去其他工作,他們必須等待任務去完成)。你需要小心讓這個數字變得太大,有可能超時請求

如果你在服務器上做某些事,因爲某些原因不能快速完成,我會立即將用戶返回給正常的用戶界面流程,並有一些更新用戶完成的異步手段(「狀態」區域等)。例如,許多照片上傳網站將以這種方式行事 - 在您的照片正在處理過程中,他們將放置佔位符圖像,然後在編碼和調整大小完成後使用照片刷新用戶的用戶界面。

+0

它不會阻止用戶做任何事情。這是網頁應用程序的一部分,如果他們選擇運行,而網頁上仍有大量其他內容可用。它也被設置好,以便他們可以進入其他頁面,如果他們想要的話,回來看看是否完成。它也不再需要30秒,除非有一些極端的情況(絕對不應該),因爲我將它切換到更快的算法。儘管如此,我仍然希望讓他們更新進度,即使現在只有4-5秒。 – Nick 2010-10-29 20:14:16

0

聽起來很複雜,但我們沒有理由認爲有什麼特別昂貴關於關閉會話。在這種情況下,服務器只是簡單地指定你的連接的監聽器是免費的。當然,如果沒有必要,所謂過分的東西通常是一個壞主意。如果您認爲這種長時間等待的奇怪行爲可能是由於關閉會話而導致的,那麼您應該看看在沒有任何進度條反饋的情況下運行需要多長時間。時間可以肯定。如果大致相同,我不會過分擔心會話關閉,但我會調查是否真的是服務器花費那麼多時間。如果速度更快,請記住,這可能是一些因素,不一定會關閉會話。

0

也許你在前端預加載過多?人們不喜歡等待事情發生,特別是如果需要長達30秒。你可能想考慮用異步javacscript延遲加載一些東西。

我更瞭解這個更關注於會議時間。