在我工作的Django應用程序,我剛纔已經加入到歸檔大量文件(共50MB開始)到一個zip文件的能力。目前,我這樣做是這樣的:長網進度條要求
get files to zip
zip all files
send HTML response
顯然,這導致了大量的等待文件被壓縮的第二行。我能做些什麼來使這個過程對用戶來說更好?雖然有一個進度條會是最好的,即使它只是返回一個靜態頁面,說'請稍等'或其他。
任何想法和想法都會被喜歡。
在我工作的Django應用程序,我剛纔已經加入到歸檔大量文件(共50MB開始)到一個zip文件的能力。目前,我這樣做是這樣的:長網進度條要求
get files to zip
zip all files
send HTML response
顯然,這導致了大量的等待文件被壓縮的第二行。我能做些什麼來使這個過程對用戶來說更好?雖然有一個進度條會是最好的,即使它只是返回一個靜態頁面,說'請稍等'或其他。
任何想法和想法都會被喜歡。
你應該牢記顯示進度條可能不是一個好主意,因爲你可以得到超時或讓你的服務器從提交大量的併發請求的困擾。
把荏苒任務隊列中,並讓它回調以某種方式通知用戶 - 通過電子郵件,例如 - 這個過程已經完成。
你的代碼看起來很像:
from lineup import registry
from lineup import _debug
def create_archive(queue_id, queue):
queue.set_param("zip_link", _create_archive(resource = queue.context_object, user = queue.user))
return queue
def create_archive_callback(queue_id, queue):
_send_email_notification(subject = queue.get_param("zip_link"), user = queue.user)
return queue
registry.register_job('create_archive', create_archive, callback = create_archive_callback)
在你的意見,通過創建排隊的任務:
from lineup.factory import JobFactory
j = JobFactory()
j.create_job(self, 'create_archive', request.user, your_resource_object_containing_files_to_zip, { 'extra_param': 'value' })
然後運行隊列處理器(大概內置的屏幕會話):
./manage.py run_queue
哦,關於這個問題,你可能也對estimating zip file creation time感興趣。那裏有非常漂亮的答案。
比一個靜態頁面更好,顯示一個Javascript對話框(使用Shadowbox,JQuery UI或一些自定義方法)與跳動(你可以得到一些在hxxp://www.ajaxload.info/)。您也可以在頁面中顯示跳躍者,而不用對話框。大多數用戶只是想知道他們的行動被處理,並能生活在沒有可靠的進度信息(「請稍候,這可能需要一些時間......」)
jQuery UI的也有一個進度條API。您可以定期對您網站上的已啓用頁面進行AJAX查詢以獲取進度報告並相應地更改進度欄。根據存檔運行的頻率,有多少用戶可以觸發它,以及如何驗證用戶身份,這可能非常困難。
你可以使用「日誌文件」來跟蹤壓縮文件,以及有多少文件仍然存在。
該程序的方法應該是這樣的:
所以,如果你要壓縮3個文件,日誌文件將成長爲:
3.0 -> begin, no file still processed
3.1 -> 1 file on 3 processed, 33% task complete
3.2 -> 2 file on 3 processed, 66% task complete
3.3 -> 3 file on 3 processed, 100% task complete
然後用一個簡單的ajax函數(間隔)每秒檢查一次日誌文件。
在python中,打開,閱讀和成文件這樣的小文件應該很快,但如果你有很多用戶在同一時間做這些事情,可能會造成一些請求麻煩,但顯然你需要創建每個請求的日誌文件,可能帶有rand名稱,並在任務完成後將其刪除。
一個問題可能是,爲了讓ajax讀取日誌文件,您需要在每次更新python時打開並關閉文件處理程序。
最終,對於更精確的進度計,您甚至可以使用文件大小而不是文件數作爲參數。
有趣的事實:您可能能夠使用進度條來誘使用戶認爲事情發展速度比實際情況快。
http://www.chrisharrison.net/projects/progressbars/index.html
好吧...所以這就是我如何使進度條。但是我怎麼才能在開始壓縮文件之前把它吐出HTML呢? – 2009-05-28 09:31:02