iT邦幫忙

0

php有辦法做到預估處理時間嗎?

一直以來都是以「處理中」來回應client端,但不知能否做到「已完成40%...預估時間剩25秒」的功能,預估時間的回傳值第一個想到的是ajax,固定五秒回傳一次,但php的處理時間要如何估算呢?

2 個回答

8
wiseguy
iT邦超人 1 級 ‧ 2015-06-02 14:00:43
最佳解答

這不干 php 的事。任何語言都一樣,也不干它們的事。
這是程式員要 take care 的事。程式是你寫的,只有你知道要處理什麼工作。
這一次 request 是要處理幾個檔案?或是幾 MB 的檔案?或是工作總共有幾個步驟?把這些資訊化為百分比就可以當作進度 (例如總共要處理 5 個檔案,已經處理一個就是 20%),把目前處理的時間除以目前百分比就是預計完成時間,如此而已。或許不是很準,但 windows 也都這麼做。

看更多先前的回應...收起先前的回應...
ghyzsing iT邦新手 5 級 ‧ 2015-06-03 13:19:08 檢舉

感謝大大回應,小弟補充在詳細點
上星期遇到一個問題,敝人寫了一份問卷調查功能,從第一天的100份到後來的1000份,從後台調閱統計數據的時間也從幾秒變幾十秒,目前是以「處理中」做為回應,但想進一步的改寫成「剩餘時間」,但實在不知道該如何計算及取得Mysql運算的時間…
希望大大在Mysql的運算時間這塊是否能給予指導

James iT邦大師 7 級 ‧ 2015-06-03 15:31:03 檢舉

分別測試100份200份500份1000份的所花時間,然後找一個接近的函數當公式估計不同份數所需時間。

wiseguy iT邦超人 1 級 ‧ 2015-06-08 00:17:04 檢舉

你把 web AP 當 windows AP 了。這是很常見的通病。
要是資料變 10000, 甚至 100000,那你也要 user 看你秀 1 小時的進度嗎?
在後台設定"當有新資料進來時,每小時產生統計結果"的靜態資料。如此,user 看時,是瞬間就出現統計結果。而不是一個 user 來看就操一次 DB,那幾十個人就會把你的資料庫癱瘓了。
當然你也可以再設計"智能"一點。在 100 份一下就即時產生,超過 100 份再用我上面說的定時產生。

wiseguy iT邦超人 1 級 ‧ 2015-06-08 00:21:18 檢舉

wiseguy提到:
你把 web AP 當 windows AP 了。

解釋一下這句話。web 有太多地方會 timeout:

  1. 瀏覽器連到 web server
  2. web server 連到 php-fpm 或是 CGI
  3. php 執行時間
    所以如果超過 30 秒還沒有結果,幾乎瀏覽器都會出現錯誤畫面,不會如你所希望的一直等下去。所以 Web AP 的設計,每個畫面都要控制在 30 秒內就要回應,除非有特別理由。
0
newkevin
iT邦高手 1 級 ‧ 2015-06-03 08:58:56

意思是這樣嗎 ?
當使用者按下去時,我的程式已經預設要處理5隻程式的時間(假設都是10秒)
當處理一隻程式完成就
N=N+1
5-N*10 送出
N=5 結束
那如果考慮網路狀況 ,
一隻程式監控網路速度計算傳輸的時間,加在第二行

ghyzsing iT邦新手 5 級 ‧ 2015-06-03 13:13:50 檢舉

是的,大致上是這樣沒錯,但要處理的程式及處理時間都是未知數,實在不知該如何回應client剩餘時間

我要發表回答

立即登入回答