2016-01-13 31 views
5

Tôi đang viết một ứng dụng web sử dụng websockets cho giao tiếp hai chiều giữa máy khách và máy chủ. Mối quan tâm chính của tôi là thời gian chờ của người dùng, vì vậy, tôi đang đo lường và định hình bất cứ điều gì tôi có thể. Đặc biệt, tôi đang nắm bắt thời gian hiện tại tại sự kiện onmessage(). Điều này rất hữu ích, nhưng tôi cũng muốn biết khi nào sự kiện đã được đẩy vào vòng lặp sự kiện của trình duyệt - điều này xảy ra trước khi sự kiện onmessage được kích hoạt.Thời gian Websocket: Làm thế nào để có được thời gian chính xác khi một tin nhắn websocket đến trình duyệt?

Trong Công cụ dành cho nhà phát triển Chrome, tôi thấy thời gian trong tab "Mạng-> Khung", theo tôi nghĩ, là thời điểm sự kiện đi vào vòng lặp sự kiện. Nhưng tôi cần phải nắm bắt điều này theo lập trình trong Javascript. Bất kỳ ý tưởng làm thế nào để làm điều này?

Tôi đã thực hiện một số thao tác "console.log" và thấy trong một vài trường hợp chênh lệch khoảng 10 mili giây giữa thời gian hiển thị trong Công cụ dành cho nhà phát triển và thời gian tôi chụp trong sự kiện onmessage. Tôi muốn các phép đo của tôi hiển thị nếu chênh lệch luôn nhỏ đến 10 mili giây hoặc đôi khi sự khác biệt cao hơn nhiều, do hiển thị hoặc một số điều khác xảy ra trong trang.

enter image description here

+0

Bạn có thực sự gặp phải vấn đề với việc sử dụng độ trễ nhận thấy hoặc chỉ bị tối ưu hóa sớm không? Nếu bạn đang gặp vấn đề, bạn có thực sự gửi 30k ping mỗi giây không? Đó là loại ping có thể mang lại một trang web như health.gov xuống ... Cuối cùng, hầu hết mọi người sẽ không nhận thức được sự khác biệt trong 10ms, vì vậy nếu bạn có thể nắm bắt một thời gian trong mã mà 10ms tắt của những gì bạn ' nhìn lại trong dev. các công cụ, đủ tốt, hãy chuyển sang vấn đề tiếp theo. –

+0

Độ trễ là mối quan tâm chính của tôi, nó thực sự xảy ra và tôi đang tìm cách để giảm nó, vì vậy tôi đang nghiên cứu ảnh hưởng của các tham số khác nhau đến độ trễ, chẳng hạn như kích thước tin nhắn, vị trí thực, số lượng người dùng đồng thời, v.v. .. Lý do tôi đăng câu hỏi này là bởi vì tôi không chắc rằng các phép đo của tôi chỉ mất 10 mili giây. Trình duyệt dường như biết khi có tin nhắn đến, vì vậy tôi nghĩ rằng có thể có cách để nắm bắt thông tin này. Và liên quan đến 30k, đây chỉ là một trong nhiều thử nghiệm của tôi. Nó không nhất thiết phải là một kích thước thông điệp điển hình. –

Trả lời

1

Các api trình duyệt cho WebSocket là quá hạn chế để lộ những thông tin mà bạn muốn.

trình duyệt bắt đầu để lộ thông tin thời gian với Performance interface, nhưng giao diện đó sẽ chỉ nói cho bạn các thông tin thời gian kết nối ban đầu đến máy chủ WebSocket, nó không biết về WebSocket khung

+0

Ok. Cám ơn vì đã chia sẻ. –

0

Dựa trên mô tả của bạn của vấn đề, không cần thiết. Sự chậm trễ giữa khi ngăn xếp http nhận được thông báo của bạn và khi nó chuyển nó cho bạn trong ứng dụng để nó có thể được ghi lại theo chương trình là không đáng kể và gần như chắc chắn dưới độ chính xác của giá trị ngày giờ javascript (bạn có thể sử dụng performance.now, nhưng tôi có nghi ngờ của mình về độ chính xác của nó).

Độ trễ của bạn sẽ được điều khiển bởi các yếu tố mạng và thời gian phản hồi của máy chủ - nếu bạn có thể đo lường hợp lý những điều đó, bạn sẽ là nơi bạn muốn. Các yếu tố khác có thể góp phần vào việc đo lường "tiếng ồn" - miễn là nó nhỏ hơn 10% giá trị bạn đang cố gắng đo lường, không có vấn đề gì.

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