效能不差的頁面卻出現指令碼執行緩慢的錯誤訊息

  • 5959
  • 0
  • 2013-04-30

效能不差的頁面卻出現指令碼執行緩慢的錯誤訊息

dotBlogs 的標籤:

客戶有個查詢結果的頁面,效能很差,300筆資料大概要20秒才會呈現在頁面上,經過效能調整後,300筆資料可以在從送出查詢到回到頁面,只需要3秒鐘,但是頁面呈現資料時,會出現「這個網頁的指令碼造成 Internet Explorer 執行速度緩慢」的錯誤訊息,客戶當然抱怨不已。

客戶端的環境是 XP+IE6、Win7+IE8(是,還有 IE6… Orz…)。

其實這已經不是我第一次遇到客戶抱怨這個問題了,不過之前都沒筆記下來,每次都要重查,所以乾脆記錄一下,關於 IE 指令碼執行緩慢這個錯誤訊息的相關資料。

首先,以下是官方提供的解決方案:

錯誤訊息:「這個網頁的指令碼造成 Internet Explorer 執行速度緩慢」

關鍵訊息摘要如下:

152221

但是明明都已經效能調整過了,為什麼還會說執行速度緩慢呢?請看接下來的說明:

152358

關鍵在於:程式碼陳述式總數 > 臨界值總量,就會觸發 IE 丟出這個錯誤訊息。

那,什麼是程式碼陳述式總數?預設的臨界值總量又是多少?

第二個問題文章中有說明:

152711

但第一個問題:什麼是程式碼陳述式,這就很難定義了,根據我自己的測試,只要是 JavaScript/jQuery 要和 DOM Element 互動(例如:註冊事件、偶數列變底色、Div Click to Show/Hide)等等,都算,但是要怎麼精算,我不知道,如果有任何高手可以提供資訊懇請指導,謝謝。所以只要是在要呈現大量資料的頁面中,jQuery Selector 下的太模糊,這個數量很容易的爆掉!

解決方式有三種,其中最簡單的方式就是去改登錄檔,不過我不建議手動改,用官方提供的修正程式【MicrosoftFixit50403.msi】就好(下面是截圖,要下載請到官網):

150409

這隻程式我在 XP 32bit 和 Win7 64bit (請用系統管理員身份執行)都測試過,可以順利修正登錄檔,變成無上限=不會觸發指令碼執行緩慢的錯誤訊息:

150709

第二種和第三種解決方案是:

※ 優化頁面的js程式,但因為目前沒辦法掌握觸發錯誤訊息的基準線,所以資料筆數太多還是有可能觸發此錯誤訊息。

※ 限制較嚴格的查詢條件,或進行分頁處理,但會變更使用者習慣。

請注意,js 優化還是可能會觸發這個錯誤訊訊息的原因,如同 Jeff 回覆所言,錯誤訊息會因為用戶端硬體設備產生不同的上限值。

另外,在我的情境中,因為客戶要求的資料量、欄位和頁面要透過 js 變化的地方太多了,除非我有辦法計算每段 js 換成為 IE 的指令碼陳述式之數量為何,不然我沒辦法提供較為精確的數據告訴客戶,怎樣的硬體設備,查詢多少資料筆數內,不會觸發此錯誤訊息。

--------
沒什麼特別的~
不過是一些筆記而已