struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Schneider <schne...@gmail.com>
Subject Re: Fast ValueStack
Date Sat, 27 Jan 2007 06:07:46 GMT
Well, I guess I was feeling more ambitious than I thought.

I wrote a simple junit test (below) that tests the 2 techniques for 
retrieving I18N text.  My numbers for 100 iterations were:
Using OGNL expression: 476 ms
Explicitly calling getText: 0 ms

Yikes!!! There is quite a difference between the two.  The OGNL version 
takes 5 ms/request compared to almost nothing for the explicit call.  It 
looks like it would be very beneficial to reimplement the UIBean key 
lookup code based on the Text component-style of text lookup.  I think 
the key attribute is a much cleaner way of specifying label text anyway 
so it's good to give users an incentive to use it. :)

Tom

/************ start source code **************/
package example;

import java.util.Iterator;

import junit.framework.TestCase;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.TextProvider;
import com.opensymphony.xwork2.util.OgnlValueStack;

public class TestOgnl extends TestCase {

    public void testOgnl() {
        TestAction action = new TestAction();
        OgnlValueStack stack = new OgnlValueStack();
        stack.push(action);
        String value = null;
        long start = System.currentTimeMillis();
        for(int i = 0; i < 100; i++) {
            value = stack.findString("getText('key')");
        }
        long end = System.currentTimeMillis();
        assertEquals("value", value);
        System.out.println((end - start));
        start = System.currentTimeMillis();
        for(int i = 0; i < 100; i++) {
            value = findString(stack, "key");
        }
        end = System.currentTimeMillis();
        System.out.println((end - start));
        assertEquals("value", value);
    }

    protected String findString(OgnlValueStack stack, String key) {
        for(Iterator iterator = stack.getRoot().iterator(); iterator
            .hasNext();) {
            Object o = iterator.next();

            if(o instanceof TextProvider) {
                TextProvider tp = (TextProvider) o;
                return tp.getText(key);
            }
        }
        return null;
    }
}

class TestAction extends ActionSupport {

    @Override
    public String getText(String arg0) {
        if("key".equals(arg0)) {
            return "value";
        }
        return null;
    }

}
/************ end source code **************/

Ted Husted wrote:
>
> The tags now have a "key" attribute that can be used in place of the
> getText OGNL expression.
>
> I'd be curious to know if
>
> <s:textfield key="lastName" />
>
> runs faster than
>
> <s:textfield label="%getText('lastName')" name="lastName" />
>
> If so, I wonder if there other places where we could eliminate common
> OGNL statements by adding functionality to the tags.
>
> -Ted.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
> For additional commands, e-mail: dev-help@struts.apache.org
>
>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Mime
View raw message