2012-02-09 27 views
6

Tôi có một trang (A) là trang javascript nặng, khi tôi rời khỏi trang này để chuyển đến trang B phải mất một thời gian dài. Khi tôi đi đến trang B từ một trang khác, nó thực sự rất nhanh. Vì vậy, nó có một cái gì đó để làm với trang A và có lẽ là javascript của nó.Khoảng cách trang Javascript nặng trong 15 giây giữa phản hồi và tải trang

Khi tôi chạy trình thu thập thông tin mạng từ các công cụ nhà phát triển trong IE 9, nó cho thấy khoảng cách ~ 15 giây giữa phản hồi và sự kiện DomContentLoaded (sự kiện).

Trang A có nhiều javascript vì nó chạy Trình chỉnh sửa Xopus, một trình soạn thảo XML văn bản đa dạng thức.

Không ai có bất kỳ ý tưởng nào về những gì tôi có thể làm để phân tích khoảng cách về những gì xảy ra hoặc những gì tôi có thể làm để làm cho Trang A tải nhanh hơn.

+0

Xem thêm: http: // stackoverflow.com/questions/855126 –

+0

Cảm ơn bạn đã đề xuất, tôi đã kiểm tra javascript và không có cuộc gọi nào xuất hiện trong một thời gian dài. Nó trông giống như bộ sưu tập rác trong IE hoặc một cái gì đó như thế. FF và chrome nhanh chóng đáp ứng. –

+0

Điều đó chỉ xảy ra với một trang B cụ thể? – user123444555621

Trả lời

2

Đây là một cảnh quay dài vì có khoảng hơn trăm trăm điều sai trái với nó, nhưng nó có thể là nơi nào đó để bắt đầu. Thêm thẻ script này vào trang của bạn như là rất mới nhất:

<script> 
    function unloadJS() { 
     var scripts = document.getElementsByTagName("SCRIPT"); 
     for (var index = 0; index < scripts.length - 1; index++) 
     { 
     var file = scripts[index].getAttribute("src"); 
     var start = +new Date(); 
     scripts[index].parentNode.replaceChild(document.createElement('script'), 
               scripts[index]); 
     var elapsed = +new Date() - start; 
     alert(file + ": " + elapsed.toString()); 
     } 
     return false; 
    } 
</script> 

Mã này cố gắng để buộc dỡ bỏ của mỗi file JavaScript được nạp trên trang web, báo cáo số lượng thời gian cần thiết để thả chúng tính bằng mili giây. Bắn này như là thuận tiện, ví dụ, trên dỡ bỏ hoặc với một nút:

<button onclick="return unloadJS()">Go!</button> 

Điều này có thể không hoạt động/cho bạn biết những gì bạn cần phải biết vì IE có thể từ chối làm thu gom rác thải khi kịch bản được ngắt kết nối. Điều này có thể là do IE thực sự không dỡ bỏ chúng khi bạn làm điều này, hoặc chỉ vì IE - tốt, những gì oddi đã nói :)

Trong mọi trường hợp, đây không phải là giải pháp; nó không quan trọng khi JS được dỡ xuống, việc thu gom rác vẫn mất cùng một lượng thời gian. Đây chỉ là một nỗ lực trong chẩn đoán đầu tiên, như bạn đã yêu cầu. Hy vọng nó hoạt động/giúp ...

0

Có thể bạn đang sử dụng thư viện Javascript như PrototypeJS móc vào trang unload sự kiện và khi trang tải xuống, nó lặp qua một mảng xóa tất cả trình xử lý sự kiện cho tất cả các phần tử DOM trên trang. Nếu chúng tôi biết bạn đang sử dụng thư viện nào, chúng tôi có thể mô phỏng một cuộc gọi để dỡ trang để buộc thư viện thực thi chức năng dỡ tải của nó. Sau đó, bắt đầu hẹn giờ để xem mất bao lâu để tải một trang khác.

2

IE sucks. Nhưng có một số công cụ để cấu hình trang của bạn.

Fiddler hoặc HttpWatch là một công cụ tốt để phân tích tiến trình yêu cầu của bạn và xem liệu phải mất nhiều thời gian để tải xuống tất cả mã javascript nặng của bạn. Nó thường là nguyên nhân chính làm chậm trang js nặng nề. Kể từ IE doesn't take parallel downloading js very well, nó tốn nhiều thời gian hơn cho hàng trăm tệp javascript nhỏ.

Trong trường hợp này, hãy thử minifying your javascript. Đây là cách trực tiếp nhất để nâng cao hiệu suất tải trang của bạn.

Nếu nó không giúp được gì nhiều. Bạn có thể cần YSlow để phân tích hiệu suất chi tiết. Mặc dù nó không phù hợp với IE, việc khắc phục một số vấn đề trong Chrome hoặc FF có thể ảnh hưởng đến hiệu suất theo IE.

Thêm một số nhật ký trong bảng điều khiển của bạn, thu hẹp phạm vi có thể bạn có thể tìm thấy vấn đề về hiệu suất thi hành.

Các vấn đề liên quan