2011-06-30 24 views
7

Có trình duyệt hiện đại nào thông qua javascript cho thấy thời gian để byte đầu tiên (TTFB) và/hoặc thời gian đến byte cuối cùng (TTLB) trên yêu cầu http mà không cần đến bất kỳ plugin nào không?Thời gian để byte đầu tiên với javascript?

Điều tôi muốn là đoạn mã javascript có thể truy cập các giá trị này và đăng lại máy chủ cho mục đích giám sát hiệu suất.

Làm rõ: Tôi không tìm kiếm bất kỳ bộ đếm thời gian js hoặc công cụ phát triển nào. Những gì tôi tự hỏi và hy vọng là nếu có bất kỳ trình duyệt nào đo lường thời gian tải và hiển thị những giá trị đó thông qua javascript.

+0

Bạn có nghĩa là đo thời gian tải trang bằng JavaScript? –

+0

Có. Nếu có thể, tôi muốn thời gian cần thiết để trình duyệt gửi yêu cầu cho đến khi nó bắt đầu nhận dữ liệu và/hoặc khi tất cả dữ liệu này được nhận. Dữ liệu bạn có thể nhận được trong Công cụ dành cho nhà phát triển Safari/Chrome, Firebug, v.v. Không cần sử dụng bất kỳ công cụ nhà phát triển nào. –

Trả lời

11

Điều bạn muốn là giao diện PerformanceTiming của W3C. Hỗ trợ trình duyệt rất tốt (xem this survey từ tháng 9 năm 2011). Giống như bạn suy đoán để đáp ứng với câu trả lời của Shadow Wizard, những lần này được chụp bởi trình duyệt và tiếp xúc với javascript trong đối tượng cửa sổ. Bạn có thể tìm thấy chúng trong window.performance.timing. Điểm cuối của khoảng thời gian TTFB của bạn sẽ là window.performance.timing.responseStart (được định nghĩa là "thời gian ngay sau khi tác nhân người dùng nhận byte đầu tiên của phản hồi từ máy chủ hoặc từ bộ đệm ứng dụng có liên quan hoặc từ tài nguyên cục bộ"). Có một số tùy chọn cho điểm bắt đầu, tùy thuộc vào việc bạn quan tâm đến thời gian tải xuống tài liệu trước hay thời gian để giải quyết DNS, vì vậy bạn có thể muốn đọc tài liệu và quyết định tài liệu nào phù hợp với ứng dụng của bạn.

+1

hiệu suất varTiming = performance.timing; ttfb = performanceTiming.responseStart - performanceTiming.requestStart; Điều này được hỗ trợ bởi IE 7+ – Beakal

0

Bạn có thể xem thời gian phản hồi trong Công cụ nhà phát triển Chrome.

+1

Anh ta yêu cầu một cách rõ ràng "mà không cần đến bất kỳ plugin nào" - đoán anh ta có nghĩa là Firebug và những người tương tự. –

+0

Developertools trong Chrome không phải là plugin ... –

+0

Đúng, nhưng Firebug là. Đối với hồ sơ, -1 không phải là của tôi - đây không phải là câu trả lời tồi, chỉ có một "lỗ hổng" mà tôi đã chỉ ra. :) Nhân tiện điều gì khiến bạn nhớ lại câu trả lời của bạn gần như cả năm sau khi bạn đăng nó? –

0

Không thể lấy TTFB thực sự trong JS, vì trang chỉ nhận được ngữ cảnh JS sau khi nhận được byte đầu tiên. Gần nhất bạn có thể nhận được là với một cái gì đó như sau:

<script type="text/javascript">var startTime = (new Date()).getTime()</script> 

rất sớm trong thẻ <head> của bạn. Sau đó, tùy thuộc vào nếu bạn muốn kiểm tra khi html kết thúc hoặc mọi thứ kết thúc tải xuống, bạn có thể đặt một thẻ tương tự gần cuối trang html của bạn (và trừ các giá trị), sau đó thực hiện XHR trở lại máy chủ (hoặc đặt cookie, bạn có thể truy xuất phía máy chủ trên yêu cầu trang tiếp theo) hoặc nghe sự kiện onload và thực hiện tương tự.

+2

Nhưng TTFB được đo từ khi yêu cầu được gửi đi. Theo định nghĩa, TTFB sẽ trôi qua khi javascript sẽ được chứa trong các byte sau. – detaylor

+0

Đo lường thời gian đó và Javascript là f'd: http: // ejohn.org/blog/accuracy-of-javascript-time/ – danjah

+0

@Smirkin yep, nhưng đó là gần nhất bạn sẽ sử dụng Javascript. Chỉnh sửa để làm cho điều này rõ ràng hơn. –

1

Tôi lo sợ điều đó là không thể.

JavaScript trở thành "hoạt động" chỉ sau một phần yêu cầu đã được gửi từ máy chủ, được trình duyệt chấp nhận và phân tích cú pháp.

Những gì bạn hỏi là loại như hỏi "Tôi có thể đo trọng lượng của một chiếc bánh sau khi ăn không?" - bạn cần phải trọng lượng đầu tiên và chỉ sau đó ăn bánh.

+1

Cảm ơn bạn đã trả lời. Tôi sẽ không chính xác đặt nó theo cách đó giống như "Tôi có thể truy cập một cái gì đó mà trình duyệt đã đo cho tôi qua javascript". Rõ ràng là cần phải có một cái gì đó trong trình duyệt thu thập các số liệu thống kê tôi sau. Phần JS sẽ chỉ phơi bày các giá trị đã thu thập được này. –

+0

Có lẽ sẽ có thể thực hiện truy xuất tệp io trên một tệp trong phần được tải trong tiêu đề HTML - nếu thời gian máy chủ mà tại đó chúng được truy cập lần cuối là một thứ có sẵn? Điều đó có thể cho bạn biết thời gian bắt đầu. Nếu điều đó thậm chí còn làm việc thì thời gian kết thúc cũng sẽ khó khăn hơn bởi vì thời gian nó được nạp không phải là lúc mà byte cuối cùng được đọc ... chỉ là một ý nghĩ. – danjah

+0

@NA không, không thể thấy bất kỳ lý do gì khiến trình duyệt sẽ thu thập một thứ như vậy? Có lẽ trong trình duyệt mã nguồn mở có thể để lộ một điều như vậy, nhưng tôi rất nghi ngờ rằng có bất kỳ trình duyệt hiện đại nào lưu trữ số liệu thống kê như vậy, hãy để một mình tiếp xúc với JS. Nhưng dù sao, mọi thứ liên quan đến trình duyệt sẽ là một phần của đối tượng 'navigator'. –

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