2009-04-03 3 views
5

Hiệu suất JavaScript trong Internet Explorer rất tệ. Không có tin tức ở đó. Tuy nhiên có một số mẹo và thủ thuật để tăng tốc nó. Ví dụ: có threepartseries này. Tuy nhiên tôi thấy mình không thể ép hiệu suất tốt ra khỏi nó. Có lẽ một số bạn có một ý tưởng khác để làm như vậy nó đã được nhanh hơn?Sự cố hiệu suất Javascript của Internet Explorer

Điều tôi muốn làm là tạo một bảng có kích thước trung bình từ đầu bằng Javascript. Giả sử, 300 hàng, 10 ô mỗi. Nó mất khoảng 5-6 giây trên máy tính của tôi để làm điều này. OK, được cấp, đó là một giàn khoan cũ 5 năm, nhưng vẫn còn quá nhiều. Đây là mã giả của tôi:

<html> 
    <body> 
    <script type="text/javascript"> 
     function MakeTable(parent) 
     { 
     var i, j; 
     var table = document.createElement('table'); 
     var insertRow = table.insertRow; 
     for (i = 0; i < 300; i++) 
     { 
      var row = insertRow(-1); 
      for (j = 0; j < 10; j++) 
      { 
      var cell = row.insertCell(-1); 
      cell.innerHTML = i + ' - ' + j; 
      } 
     } 
     parent.appendChild(table); 
     } 
    </script> 
    <div onclick="MakeTable(this);">Click Me!</div> 
    </body> 
</html> 

Added: Hmm, rõ ràng là chuỗi nối (với Array.join) là cách duy nhất để đi. Vâng, buồn, tất nhiên rồi. Được hy vọng sẽ làm điều đó theo cách DOM "thích hợp". :)

Trả lời

4

Dưới đây là một liên kết thú vị tôi tìm thấy khi tìm kiếm một câu trả lời về vấn đề này: Trang sử dụng lăm scripts/phương pháp khác nhau để tạo ra một bảng.
Theo thử nghiệm của họ, việc sử dụng chuỗi nhanh hơn nhiều so với việc sử dụng các phần tử DOM/Bảng. http://www.quirksmode.org/dom/innerhtml.htm l

-2

Bạn có thể thử 'Duff của thiết bị': Unwinding một vòng lặp bằng cách lặp lại mã một số lần:

for (var i = 0; i < count/4; i++) { 
    doSomething(); 
    doSomething(); 
    doSomething(); 
    doSomething(); 
} 

Rõ ràng đây lá thời gian còn lại khi chia cho 4, thiết bị gốc Duff đã có một thông minh cách nhảy đến giữa vòng lặp bằng cách sử dụng lệnh chuyển đổi được trộn lẫn với vòng lặp. Javascript không hỗ trợ điều này, nhưng bạn có thể xử lý các phần còn lại của mình theo cách thủ công. Ngoài ra số 4 là ngẫu nhiên, số lượng chính nó có thể được bắt nguồn bằng thử nghiệm hiệu suất.

Xem thêm: http://www.websiteoptimization.com/speed/10/10-3.html

+0

WTF? Bạn đang mất các yếu tố cuối cùng của mảng ... –

+0

Đó là lý do tại sao tôi nói "Rõ ràng điều này để phần còn lại khi chia cho 4" .. –

1

Một trong những lý do chính cho vấn đề hiệu suất của IE là hoạt động DOM. Bạn muốn thực hiện các hoạt động DOM của mình một cách hiệu quả nhất có thể. Điều này có thể bao gồm, tùy thuộc vào tình huống của bạn (điểm chuẩn!):

  • Tạo cấu trúc DOM ngoại tuyến; giữ nguyên tố cấp cao nhất trong tài liệu (tạo, nhưng không nối thêm) rồi thêm nó vào tài liệu khi nó sẵn sàng, thay vì gắn thêm mọi phần tử vào DOM khi bạn tạo nó
  • viết innerHTML thay vì thao tác DOM
+0

Mẹo đầu tiên đã có. Xem - bảng được thêm vào DOM ở cuối cùng. Bây giờ tôi đang khám phá innerHTML và nó thực sự có vẻ nhanh hơn. –

+0

Có, tôi nên đề cập đến điều đó. Nó không phải luôn luôn nhanh hơn mặc dù, đó là lý do tại sao tôi muốn đề cập đến 'Benchmark!' phần :-) –