Simple rendering meter does not tell the whole story
therefore I have created a simplistic PageMeter that
calculates the whole time to render a page including
all the artifacts.
For example for my test index page it prints:
1296 ms - /pagemeter/
1 ms - /pagemeter/images/TrafficOff.gif
0 ms - /pagemeter/images/TrafficRed.gif
1 ms - /pagemeter/images/TrafficYellow.gif
0 ms - /pagemeter/images/TrafficGreen.gif
1454 ms - Length of the sequence
As you may notice the total time is not equal to the
sum of render times because it takes into account time
for browser to think and time for stuff to go over the
network.
I hope you may want it useful during development.
Note: current assumptions are
- the filter works for single client environment only;
- requests for the page parts are not delayyed more
than 500 ms (increase quietPeriodMS if your network is
too slow )
In the web.xml
<web-app>
<filter>
<filter-name>meter</filter-name>
<filter-class>com.kgionline.web.filter.PageMeter</filter-class>
</filter>
<filter-mapping>
<filter-name>meter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
package com.kgionline.web.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by IntelliJ IDEA.
* User: konstantinignatyev
* Date: Nov 22, 2005
* Time: 1:46:31 PM
*/
public class PageMeter implements Filter {
Timer t ;
long quietPeriodMS = 500;
long firstInTheChain = -1;
long lastRequest = -1;
PrintStream out = System.out;
private boolean inRequest = false;
public synchronized boolean isInRequest(){
return inRequest;
}
public synchronized void setInRequest( boolean
inRequest ){
this.inRequest = inRequest;
}
public void init( FilterConfig filterConfig ) throws
ServletException{
reset();
t = new Timer( true );
TimerTask task = new TimerTask(){
public void run(){
if( ! isInRequest() ){
checkQuietness();
}
//System.out.println( "." );
}
};
t.scheduleAtFixedRate( task, 0, 300);
}
public void doFilter( ServletRequest servletRequest,
ServletResponse servletResponse, FilterChain
filterChain ) throws IOException, ServletException{
long start = System.currentTimeMillis() ;
requestStarted();
filterChain.doFilter( servletRequest,
servletResponse );
requestFinished( start,
System.currentTimeMillis(), servletRequest );
}
private void requestStarted(){
setInRequest( true );
if( firstInTheChain == -1 ){
firstInTheChain = System.currentTimeMillis();
}
}
private void requestFinished( long start, long end,
ServletRequest servletRequest ){
setInRequest( false );
lastRequest = System.currentTimeMillis();
if( servletRequest instanceof HttpServletRequest){
HttpServletRequest r = ( HttpServletRequest )
servletRequest;
printLength( end - start, r.getRequestURI() );
}
}
private void printLength( long l, String requestInfo
){
out.println( l + " ms - " + requestInfo);
}
public void destroy(){
}
private void checkQuietness(){
if( firstInTheChain == -1 ) return;
if( System.currentTimeMillis() - lastRequest>
quietPeriodMS ){
reset();
}
}
private void reset(){
printLength( lastRequest - firstInTheChain,
"Length of the sequence\n\n\n\n\n");
firstInTheChain = -1;
lastRequest = -1;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]