2013-07-19 73 views
5

Tôi đã thực hiện một ứng dụng Node.js làm cho chính xác điều tương tự mà giải pháp khác trong C#. Cả hai ứng dụng nhận được tất cả các tệp javascript từ một thư mục đệ quy và thực hiện lệnh uglify-js để rút gọn các tệp.Cách nào tốt hơn để thực hiện tổng thời gian thực thi ứng dụng Node.js?

Dự án của tôi có khoảng 150 tệp JavaScript để rút gọn và cách tiếp cận C# mất khoảng 22 giây để thực hiện tất cả mọi thứ (sử dụng chủ đề).

Sau khi đọc tài liệu và sách Node.js, tôi đã quyết định thực hiện theo cách Node.js. Tôi đã làm điều đó nhưng tôi không thể làm báo cáo tổng thời gian Node.js làm những thứ bởi vì phương pháp không đồng bộ của nó ...

(yeah, tôi biết, tôi sử dụng chủ đề trong C# đó là không đồng bộ quá)

Vậy, cách nào tốt hơn để thực hiện tổng thời gian thực thi ứng dụng Node.js?

Tôi đang sử dụng Node.js v0.10.13 làm môi trường win32.

+1

Tuy nhiên, tổng thời gian thực hiện của bạn là hoàn thành. Làm điều gì đó async không có nghĩa là nó được thực hiện nhanh hơn. Hoặc, bạn có đang chạy các tiến trình con không? Node.js không làm luồng (cho JS của bạn), vì vậy bạn muốn đo lường cụ thể những gì? – Brad

+0

Có @Brad. Tôi đang chạy các quy trình con và muốn biết tổng thời gian thực hiện của tất cả chúng, khi ứng dụng node.js trở về lệnh ... – tetri

+0

Bạn chỉ có thể đo thời gian quy trình chạy, trừ khi bạn đang tìm kiếm thời gian CPU? – Brad

Trả lời

4

Lúc đầu rất của kịch bản của bạn, sử dụng console.time('Some_Name_Here');, và sau đó sử dụng bất cứ nơi nào console.timeEnd('Some_Name_Here'); kịch bản kết thúc thực hiện của nó.

Đó là chức năng gốc, nhanh của Node.js và ngăn bạn không phải khởi tạo đối tượng Ngày mới.

Dưới đây là một số tài liệu ngắn về phương pháp console.time(): http://nodejs.org/api/stdio.html#stdio_console_time_label.

+0

Cảm ơn bạn @Bagavatu, nhưng ứng dụng của tôi có các chức năng không đồng bộ khác nhau với 'child_process' và tôi không biết nơi để gọi' console.timeEnd'. Có sự kiện kết thúc toàn cầu cho điều đó không? – tetri

+1

Tôi tìm thấy [process Event: 'exit'] (http://nodejs.org/api/all.html#all_event_exit) và 'console.time()' cũng hoạt động! – tetri

3

Bạn có thể thực hiện phương pháp tính thời gian bắt đầu/kết thúc.

Khi bắt đầu tập lệnh chính, bạn lấy thời gian.

var start = Date.now(); 

process.on("exit", function() { 
    var end = Date.now(); 
    console.log("Time taken: %ds", (end - start)/1000); 
}); 

// all you code... 
// more code... 
+1

hãy sử dụng 'process.hrtime()' thay vì 'Date' – cr0

+0

Phải .. khái niệm vẫn giữ nguyên nhưng cr0 là đúng, nó chính xác hơn trong trường hợp này. Xem http://nodejs.org/api/process.html#process_process_hrtime –

+0

Bạn cũng có thể muốn sử dụng process.uptime() nhưng tôi không thể nói chính xác. –

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