2009-06-28 25 views
12

Có cách nào để phát hiện xem máy tính có chạy chậm hay không chạy một số mã (bằng cách tắt hoạt ảnh jQuery hoặc chỉ chạy một hàm nếu nó nhanh)?Bỏ qua một số mã nếu máy tính chậm

Tôi biết câu hỏi này có lẽ thực sự tầm thường, nhưng tôi nhận thấy rằng trên một số máy tính chậm hơn, ngay cả hình động lề đơn giản nhất để di chuyển một cái gì đó được thực hiện trong nhấp nháy trông không đẹp lắm.

Cập nhật:
Mã tôi đang cố gắng chạy chỉ đơn giản là một loạt các hoạt ảnh; tất cả đều mất cùng một lượng thời gian nhưng trên các trình duyệt chậm hơn, hoạt ảnh được phân đoạn như những gì bạn thấy khi bạn xem video đang lưu vào bộ đệm.

Trả lời

11

Khi chạy javascript, bạn không có sự hiểu biết trước về hiệu suất của máy tính đích. Điều duy nhất tôi có thể nghĩ đến, là chạy một hàm thực hiện một số phép tính và đo thời gian thực hiện. Chức năng phải thực hiện đủ số phép tính để đảm bảo rằng thời gian cần thực hiện, là đại diện cho hiệu suất của máy.

Nói chung, tôi sẽ khuyên bạn không nên làm thử nghiệm hiệu suất như vậy, bởi vì nó lấy tài nguyên trên máy đích, điều mà người dùng thường không thích. Nhưng có lẽ bạn có thể đo thời gian để hoàn thành hoạt ảnh đầu tiên, và nếu nó quá chậm, hãy tắt những hình ảnh tiếp theo.

+2

Kiểm tra hiệu suất thực sự có thể thực hiện * dưới dạng * hoạt ảnh phát và sử dụng (hầu như) không có tài nguyên bổ sung. Tôi không thấy lý do tại sao không, khi bạn có thể nhận được một bài kiểm tra khá hiệu quả để đáp ứng gần như miễn phí. Thực tế là hoạt ảnh đang sử dụng cho nhiều thời gian tính toán cho máy tính có khả năng gây khó chịu cho người dùng hơn! – Noldorin

5

tôi nghĩ rằng có hai tùy chọn:

  1. Hãy để người dùng quyết định - đưa ra một 'băng thông thấp/thấp đặc tả' tùy chọn cho người sử dụng mà khi nhấp vào sẽ hiển thị phiên bản đơn giản của trang web.

  2. Cố gắng phát hiện máy chậm - bạn có thể thử phát hiện máy chậm bằng cách sử dụng tập lệnh hết thời gian chờ - nếu hoạt ảnh/tải không hoàn tất trong một khoảng thời gian nhất định sang phiên bản trang web đơn giản hơn. Nhược điểm của phương pháp này là bạn không có ý tưởng tại sao kịch bản hết thời gian chờ - có lẽ đó là một kết nối không tốt hoặc người dùng đang tải một thứ gì đó khác cùng một lúc tạm thời làm chậm máy của họ.

Hy vọng điều này sẽ cung cấp cho bạn một số ý tưởng.

Josh

7

Giải pháp đơn giản nhất là để mặc nó lên cho người dùng với một hộp kiểm tra, nhưng khác khôn ngoan bạn có thể thử thời gian các hoạt hình đầu tiên cho một máy tính và sau đó nếu nó vượt quá một giới hạn thời gian nhất định, các hoạt ảnh còn lại bị tắt ... ví dụ:

var start = new Date(); 
//... some jQuery animation 
var end = new Date(); 
var diff = end - start; 

Sau đó, ví dụ: hoạt ảnh sẽ mất 1,5 giây và chênh lệch thời gian là 5 giây, sau đó tắt mọi hoạt ảnh còn lại.

+0

chỉ để làm rõ, 2 dòng cuối cùng phải được thực hiện sau khi hoạt ảnh được thực hiện, tức là, trong gọi lại hoạt ảnh. – Smokie

0

Do JavaScript chạy trong môi trường tin cậy một phần, bạn sẽ không thể nhận được bất kỳ thông tin cấp hệ điều hành nào, tôi sẽ nghĩ.

Điều tốt nhất bạn có thể thực sự là thử nghiệm "phản hồi". Một cách tiếp cận có thể là chỉ để bắt đầu chơi các hình ảnh động đầy đủ và phát hiện tụt hậu bằng cách so sánh tỷ lệ khung hình mục tiêu với tỷ lệ khung hình "thực". Sau đó bạn có thể đơn giản bỏ qua các bit của hình ảnh động (mã) để giảm thời gian tính toán và do đó cải thiện khả năng đáp ứng/tỷ lệ khung hình phù hợp. Đây là cơ bản có bao nhiêu trò chơi trên máy tính để bàn phát hiện độ trễ và do đó làm giảm độ phức tạp của hoạt ảnh.Tôi không thể đảm bảo rằng nó sẽ làm việc tốt như nhau trong trình duyệt với JavaScript, nhưng nó có giá trị một thử chắc chắn.

1

Tôi muốn chỉ ra rằng nếu bạn định để nó cho người dùng (mà tôi nghĩ là một ý tưởng hay), bạn nên nói rõ rằng bạn đang hỏi về tốc độ máy tính, không phải tốc độ kết nối hoặc băng thông. Một người dùng có thể có một máy tính xách tay rất nhanh, nhưng đang làm việc trên một kết nối wi-fi công cộng chậm, hoặc ngược lại. Vì Javascript là phía máy khách, nó chỉ là tốc độ máy tính quan trọng.

+0

Đây không phải là câu trả lời thực sự, nhưng tôi vẫn upvoting nó bằng cách nào đó, bởi vì nó là một điểm quan trọng mà các câu trả lời phổ biến hơn dường như bỏ bê. –

0

Tôi đoán rằng mã mà bạn muốn tắt sẽ mất một khoảng thời gian đáng kể để chạy.

tôi đề nghị bạn nên:

  • Bắt đầu để thực thi mã này
  • Sau khi nó được thực hiện một phần, xem có bao nhiêu thời gian thực đã ellapsed
  • Nếu quá nhiều thời gian thực đã ellapsed (tức là nếu mã đang thực thi quá chậm) sau đó hủy thực thi thay vì hoàn thành nó.
Các vấn đề liên quan