2009-08-06 49 views
1

我提供了一個網頁,使得客戶端儘快完成大量Javascript工作。工作量與內容量成正比,差異很大。如何估算瀏覽器的Javascript功能?

在情況下,有一個龐大的內容量,工作時可採取這麼久,客戶將發行他們的用戶與那些「無響應腳本 - 你要取消呢?」消息。在幾乎沒有任何內容的情況下,工作一眨眼就結束了。

我已經包括一個特徵,其中,在所述含量大於某一值X大的情況下,我包括一個「這可能需要一段時間」消息發送到其的艱苦工作開始之前顯示的用戶。

麻煩的是選擇適合X一個很好的價值,因爲對於這個特定頁面,Chrome是這樣比Firefox非常快得多比IE要快。我希望在適當的時候提醒所有用戶,但是避免將消息放到100ms內,因爲這會讓人分心。換句話說,我希望X的價值也取決於瀏覽器的Javascript功能。

那麼有沒有人有一個很好的方法來搞清瀏覽器的功能?我目前正在考慮明確告訴瀏覽器是什麼,但這看起來很詭異,而且我猜想還有其他因素。

回答

4

如果數據是相對均勻的,一種方法可能是有一個輔助函數,用來檢查數據的特定子集經歷了多長時間,並對整個集合要花多長時間進行保守估計。

從那裏決定是否顯示消息。

+0

正是我在想什麼。 – 2009-08-06 13:40:54

2

這可能不是你想去的地方,但是你有一個好主意爲什麼這個javascript可以拿這麼久?它是通過電線下載一堆內容還是實際的瀏覽器格式化/攪動慢的部分?

你甚至可能能夠逐步做一些事情,使得在整個事情需要較長的時間,但用戶看到的內容「建設」,因此不必被警告。

0

爲什麼不讓用戶決定X是什麼? (例如,那些「每頁選擇器顯示10 | 20 | 50 | 100」)然後,您根本不必做任何測量/猜測;你可以讓他們做出最佳的延遲/信息內容折衷。

0

這有點誤導;通常當討論瀏覽器的JS功能時,它指的是瀏覽器的實際功能,例如它是否支持本機XMLHTTP?它支持ActiveX嗎?等

無論如何,沒有辦法可靠地推斷出瀏覽器的處理能力或速度。有人可能會認爲您可以進行一些簡單的壓力測試,計算結果並與過去的表現進行比較,以查看當前用戶的瀏覽器排名,並可能使用此信息來估計時間。這裏的問題在於,這些計算不僅受瀏覽器中的活動(或僅在OS上)的影響;例如,你運行你的分析腳本,用戶的AV掃描器啓動,因爲它的下午5點;通常可能需要2s,需要20s。

在事情要問自己,是:是否這個處理必須發生的權利嗎?正如n8wrl和Beska所指出的那樣,您可能需要編寫自己的方法,從而將工作分解爲塊,然後逐個對它們進行操作並使用setTimeout()之類的方法。這會讓引擎有時間「呼吸」 - 因此希望避免「無響應的腳本」警告。這些塊中的每一塊都可以用來更新進度條(或類似的),使用戶可以指出正在進行的工作。

或者你可以採取像GMail這樣的方法 - 它們在窗口的角落閃爍一個非常小的紅色「加載...」文本區域。有時在那裏呆幾秒鐘,有時不夠長時間閱讀。其他時候它會多次閃爍。但你知道什麼時候做什麼事。

最後,在增量式構建頁面的時候,您可以查看Chrome新標籤頁的來源。注意:您無法使用「查看源代碼」查看此內容;相反,選擇「javascript控制檯」選項(在新標籤頁上),然後查看HTML源代碼。應該有解釋他們的總體戰略,像這樣的評論:

<!-- This page is optimized for perceived performance. Our enemies are the time 
taken for the backend to generate our data, and the time taken to parse 
and render the starting HTML/CSS content of the page. This page is 
designed to let Chrome do both of those things in parallel. 

1. Defines temporary content callback functions 
2. Fires off requests for content (these can come back 20-150ms later) 
3. Defines basic functions (handlers) 
4. Renders a fast-parse hard-coded version of itself (this can take 20-50ms) 
5. Defines the full content-rendering functions 

If the requests for content come back before the content-rendering functions 
are defined, the data is held until those functions are defined. --> 

不知道有沒有什麼幫助,但我認爲它確實給深入瞭解一些大牌球員處理像這樣的挑戰。

相關問題