문제

클라이언트가 요청을 기다려야 하는 시간을 어떻게 측정합니까?

서버 측에서는 예를 들어 필터를 통해 쉽습니다.그러나 대기 시간과 데이터 전송을 포함한 총 시간을 계산하려면 어려워집니다.

요청이 언제 완료되는지 확인하기 위해 기본 소켓에 액세스할 수 있습니까?아니면 자바스크립트 트릭을 수행하는 것이 필요합니까?어쩌면 브라우저와 서버 간의 시계 동기화를 통해서일까요?이 작업을 위해 미리 만들어진 자바스크립트가 있나요?

도움이 되었습니까?

해결책

클라이언트가 서버 측에서만 기다려야 했던 시간을 알 수 있는 방법은 없습니다.JavaScript가 필요합니다.

클라이언트와 서버 시계를 동기화하고 싶지 않은 경우는 과잉입니다.클라이언트가 요청한 시점과 응답 표시가 완료되는 시점 사이의 시간을 측정하면 됩니다.

클라이언트가 AJAX라면 이는 매우 쉬울 수 있습니다.new Date().getTime()을 호출하여 요청이 이루어진 시간을 밀리초 단위로 가져오고 결과가 구문 분석된 후의 시간과 비교합니다.그런 다음 이 타이밍 정보를 백그라운드의 서버로 보냅니다.

AJAX가 아닌 애플리케이션의 경우 사용자가 요청을 클릭하면 JavaScript를 사용하여 클라이언트의 관점에서 현재 타임스탬프를 쿼리와 함께 서버로 보내고, 결과 페이지가 다시 로드됩니다.해당 페이지의 onLoad 핸들러에서 총 경과 시간을 측정한 다음 XmlHttpRequest를 사용하거나 서버에 대한 다음 요청에 추가 인수를 추가하여 서버로 다시 보냅니다.

다른 팁

클라이언트 요청을 시뮬레이션하기 위해 브라우저에서 이를 측정하려면 Firebug의 넷 탭을 보고 페이지의 각 부분을 다운로드하는 데 걸리는 시간과 다운로드 순서를 확인할 수 있습니다.

HttpServletResponse 개체와 HttpServletResponse에서 반환된 OutputStream을 래핑할 수 있습니다.출력 쓰기가 시작되면 startDate를 설정할 수 있고, 출력이 중지되면(또는 플러시되는 경우 등) stopDate를 설정할 수 있습니다.

이는 모든 데이터를 클라이언트로 다시 스트리밍하는 데 걸린 시간을 계산하는 데 사용할 수 있습니다.

우리는 이를 애플리케이션에서 사용하고 있으며 숫자는 합리적으로 보입니다.

편집하다:ServletFilter에서 시작 날짜를 설정하여 클라이언트가 기다린 시간을 얻을 수 있습니다.클라이언트에 출력을 작성하는 데 걸리는 시간을 알려 드렸습니다.

HttpResponse.send()에 대한 차단 호출 시 마지막 바이트가 언제 남았는지 더 자세히 알 수 있도록 0바이트 소켓 전송 버퍼를 설정할 수 있지만(정확히 권장하지는 않습니다) 이동 시간은 포함되지 않습니다. . 에크--거부하기조차 꺼려지네요.커넥터별 설정을 사용하여 Tomcat에서 이 작업을 수행할 수 있습니다.(Tomcat 6 커넥터 문서)

또는 일종의 자바스크립트 타임스탬프 접근 방식을 생각해낼 수도 있지만 클라이언트 시계를 설정할 것으로 예상하지는 않습니다.웹 서버에 대한 호출을 여러 번 수행해야 합니다.

  • 타임스탬프 쿼리
  • 실제 요청
  • 데이터 보고

그리고 이 접근 방식은 여전히 ​​약간의 지터 차이가 있기는 하지만 대기 시간을 처리합니다.

흠...흥미로운 문제가 있습니다.:)

확인해 보세요 Jiffy-web, 전체 페이지 -> 페이지 렌더링 시간을 보다 정확하게 볼 수 있도록 Netflix에서 개발한 것입니다.

나는 같은 문제가 있었다.하지만 이것은 자바원 페이퍼 이 문제를 해결하는 데 정말 도움이 되었습니다.나는 당신에게 그것을 살펴보라고 요청하고 그것은 기본적으로 시간을 계산하기 위해 자바스크립트를 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top