2012-11-13 44 views
9

Tôi có một trường hợp sử dụng nơi tôi cần nhận được tổng số dòng Javascript được thực thi khi trang web của tôi đang tải.Số dòng Javascript được thực hiện trong khi tải trang

Vấn đề tôi đang gặp phải là trình duyệt ném cảnh báo khi một số lượng thực thi JS vượt quá (5 triệu tôi nghĩ trong trường hợp IE) và trang bị treo.

Tôi đã sử dụng trình hồ sơ có sẵn trong thanh công cụ của IE Developers, nhưng nó cho tôi tổng số hàm JS được gọi chứ không phải tổng số/số dòng được thực thi.

Mọi trợ giúp đều được đánh giá cao.

Cảm ơn

+4

Tôi rất nghi ngờ rằng điều này được dựa trên dòng mã. Nó rất có thể gây nên khi động cơ JS mất quá nhiều thời gian mà không cần điều khiển trở lại trình duyệt. – ThiefMaster

+0

'while (true);' cũng sẽ khiến trang bị treo ... nhận được những gì tôi đang nói? – Matt

+5

@ThiefMaster: Tôi có thể nghĩ điều tương tự, nhưng thú vị, có vẻ như OP thực sự chính xác: http://blogs.msdn.com/b/jpsanders/archive/2008/09/23/a-script-on -this-page-là-gây-internet-explorer-to-run-slow-if-it-continue-to-run-máy tính của bạn-có thể trở thành-unresponsive.aspx – mellamokb

Trả lời

0

Trong BASH:

wc -l file.js 

Trong PHP:

<?php 
$c=0; 
$file_handle = fopen("file.js", "r"); 
while (!feof($file_handle)) { 
    $line = fgets($file_handle); 
    $c++; 
} 
fclose($file_handle); 
print "$c lines.\n"; 
?> 

Trong Node.js:

var i, count = 0, js=require('fs').createReadStream('file.js'); 

js.on('data', function(chunk) { 
    for (i=0; i < chunk.length; ++i) 
     if (chunk[i] == 10) count++; 
}); 

js.on('end', function() { 
    console.log(count); 
}); 

Hãy thử minification để có được dòng số của bạn xuống .

Điều này có vẻ giống như một mã khủng khiếp.

+0

Điều đó sẽ không thực hiện được. IE là các câu lệnh đếm được thực hiện (không phải dòng mã), vì vậy các câu lệnh bên trong các vòng lặp được tính trên mỗi lần lặp, vv Điều này được ghi trong [bài đăng blog MSDN] (http://blogs.msdn.com/b/jpsanders/ lưu trữ/2008/09/23/a-script-on-this-page-là-gây-internet-explorer-to-run-chậm-nếu-nó-tiếp-to-run-của bạn-máy tính-có thể-trở thành- unresponsive.aspx) mellamokb cung cấp trong bình luận của mình về câu hỏi. – Bryan

+1

Yeh, tôi đã trả lời câu hỏi ban đầu của họ, nhưng câu trả lời đúng là "viết lại mã của bạn, quá nhiều mã." – konsumer

1

này có thể giúp:

http://www-archive.mozilla.org/performance/jsprofiler.html

Dòng đầu tiên xác định tập tin js từ đó lần được thu thập. Mỗi dòng dưới đó là các định dạng: [A, B] C {DE} F {G, H, I}

D -> số dòng cơ bản của các chức năng trong các tập tin JS
E - > Số dòng (cuối cùng) của hàm trong tệp JS

1

Trước hết, bạn nên thiết kế lại mã của mình; 5 triệu báo cáo mà không cần điều khiển trở lại trình duyệt là tất cả có nghĩa là rất nhiều mã, hãy tưởng tượng cách các trình duyệt di động sẽ đấu tranh với nó.

Một cách để biết có bao nhiêu câu lệnh được thực hiện bằng cách thiết lập mã của bạn, thêm một câu lệnh cho mỗi câu lệnh trong mã của bạn để đếm số lần nó được thực thi, tăng gấp đôi số lượng câu lệnh trong mã của bạn.

Ngoài ra còn có các công cụ bảo vệ mã có thể chạy bên trong trình duyệt mà không cần phải cụ thể mã của bạn; Googling cho "phạm vi mã javascript" cung cấp số lượng tiện ích mở rộng trình duyệt mà bạn có thể sử dụng, chẳng hạn như hrtimer.

1

Chỉ cần chia nhỏ thành các phần nhỏ hơn và gọi sau khi hết thời gian chờ - tức là xung quanh vấn đề với IE. ví dụ.

somethingBig(); 
somethingElseBig(); 

thay vì viết:

somethingBig(); 
setTimeout(somethingElseBig); 
Các vấn đề liên quan