2011-08-04 77 views
6

Xin chào, tôi đang lập trình một tiện ích đồng hồ bấm giờ trong javascript và tôi có câu hỏi về hiệu quả và chi phí. Có hai cách tôi đã cân nhắc tạo đồng hồ bấm giờ:Đồng hồ bấm giờ hiệu quả

1. Lưu trữ ngày bắt đầu và liên tục đo số mili giây kể từ ngày đó.

2.Tạo một số nguyên và tăng giá trị của nó tại một khoảng thời gian đã đặt.

Tôi muốn biết cái nào hiệu quả nhất. Ngoài ra, tôi không chắc chắn nếu tùy chọn # 2 sẽ rất chính xác, nếu có ai có bất kỳ đầu vào nào về điều này cũng sẽ tuyệt vời.

+1

# 1 là cả hai hiệu quả hơn và # 2 sẽ không hoạt động, bởi vì bạn không thể đảm bảo thời gian giữa 've'. – OverZealous

+0

'performance.now()' có sẵn trong các trình duyệt hiện đại https://developer.mozilla.org/en-US/docs/Web/API/Performance/now –

Trả lời

3

Như những người khác đã nói, hãy đi với # 1. Nếu bạn muốn một đồng hồ đánh dấu mỗi giây (hoặc phút hoặc bất kỳ thứ gì), bạn nên ước tính thời gian để "đánh dấu" tiếp theo để setTimeout được gọi là một vài ms sau thời gian thích hợp, ví dụ: để chạy ngay sau khi toàn bộ tiếp theo thứ hai:

var d = new Date(); 
var interval = 1020 - d.getMilliseconds(); 
setTimeout(fn, interval); 

cách đó, nếu thực hiện một cuộc gọi bị trì hoãn bởi hệ thống đang bận rộn, người tiếp theo vẫn nên được gọi là khoảng 20ms sau khi toàn bộ thứ hai tới.

+1

Điều này vẫn có thể bỏ lỡ thời gian chờ (ví dụ: máy tính chuyển sang chế độ ngủ); một đồng bằng bên trong thời gian chờ vẫn còn cần thiết, tùy thuộc vào những gì được yêu cầu. –

+0

Tất nhiên mọi thứ trong trình duyệt phụ thuộc vào trình duyệt thực thi tập lệnh. Những gì bạn có nghĩa là bởi một "đồng bằng bên trong thời gian chờ"? – RobG

+0

Điểm về việc đảm bảo đồng hồ được cập nhật vào đúng thời điểm thật thú vị. Tuy nhiên, nếu không có đồng hồ này sẽ vẫn hiển thị đúng thời điểm ngay cả khi nó ở phía sau trên màn hình, phải không? –

3

Tùy chọn 2 sẽ không chính xác, đặc biệt nếu bạn có trang có javascript bổ sung cho các mục đích khác. Đi với cách tiếp cận đầu tiên.

+0

Tuy nhiên, với tùy chọn # 1 a * thay đổi đồng hồ * phải là chiếm. Đó là, thay đổi dự kiến ​​và thay đổi thực tế cần được so sánh (với một lề thích hợp của lỗi) - và sửa chữa nếu cần thiết. Cấp, đó là một trường hợp rất cạnh. –

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