[ 2674923 ] Performance enhancement
zk.xml - turn of js compression ServerContextCallback - avoid expensive reflection call for the 2 most common use case CompositeADTab - replace Window with ligher weight Div Window - turn off drop shadow to improve performance and resize behaviour windowContainer - remove delay resize to improve responsiveness of UI
This commit is contained in:
parent
bd452d6b5b
commit
3d373500ff
|
@ -15,10 +15,10 @@ package org.adempiere.webui;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import net.sf.cglib.proxy.InvocationHandler;
|
|
||||||
|
|
||||||
import org.adempiere.webui.session.ServerContext;
|
import org.adempiere.webui.session.ServerContext;
|
||||||
|
|
||||||
|
import net.sf.cglib.proxy.InvocationHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Intercaptor for Server context properties that delegate to the threadlocal instance
|
* Intercaptor for Server context properties that delegate to the threadlocal instance
|
||||||
* @author Low Heng Sin
|
* @author Low Heng Sin
|
||||||
|
@ -31,6 +31,18 @@ public class ServerContextCallback implements InvocationHandler, Serializable {
|
||||||
public Object invoke(Object proxy, Method method, Object[] args)
|
public Object invoke(Object proxy, Method method, Object[] args)
|
||||||
throws Throwable {
|
throws Throwable {
|
||||||
ServerContext context = ServerContext.getCurrentInstance();
|
ServerContext context = ServerContext.getCurrentInstance();
|
||||||
|
//optimize for the 2 most common access
|
||||||
|
if (method.getName().equals("getProperty")) {
|
||||||
|
Class<?>[] types = method.getParameterTypes();
|
||||||
|
if (types != null && types.length == 1 && types[0] == String.class &&
|
||||||
|
args != null && args.length == 1 && args[0] instanceof String) {
|
||||||
|
return context.getProperty((String)args[0]);
|
||||||
|
}
|
||||||
|
else if (types != null && types.length == 2 && types[0] == String.class &&
|
||||||
|
types[1] == String.class && args != null && args[0] instanceof String &&
|
||||||
|
args[1] instanceof String)
|
||||||
|
return context.getProperty((String)args[0], (String)args[1]);
|
||||||
|
}
|
||||||
Method m = context.getClass().getMethod(method.getName(), method.getParameterTypes());
|
Method m = context.getClass().getMethod(method.getName(), method.getParameterTypes());
|
||||||
return m.invoke(context, args);
|
return m.invoke(context, args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.compiere.model.GridTab;
|
||||||
import org.compiere.util.CLogger;
|
import org.compiere.util.CLogger;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
import org.zkoss.zk.ui.event.EventListener;
|
||||||
|
import org.zkoss.zul.Div;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -44,7 +45,7 @@ public class CompositeADTab extends AbstractADTab
|
||||||
|
|
||||||
private List<ADTabListModel.ADTabLabel> tabLabelList = new ArrayList<ADTabListModel.ADTabLabel>();
|
private List<ADTabListModel.ADTabLabel> tabLabelList = new ArrayList<ADTabListModel.ADTabLabel>();
|
||||||
|
|
||||||
private Window window;
|
private Div div;
|
||||||
|
|
||||||
protected ADButtonTabList tabList;
|
protected ADButtonTabList tabList;
|
||||||
|
|
||||||
|
@ -56,20 +57,19 @@ public class CompositeADTab extends AbstractADTab
|
||||||
|
|
||||||
protected Component doCreatePart(Component parent)
|
protected Component doCreatePart(Component parent)
|
||||||
{
|
{
|
||||||
window = new Window();
|
div= new Div();
|
||||||
if (parent != null) {
|
if (parent != null) {
|
||||||
window.setParent(parent);
|
div.setParent(parent);
|
||||||
LayoutUtils.addSclass("adtab-body", window);
|
LayoutUtils.addSclass("adtab-body", div);
|
||||||
window.setContentSclass("adtab-body");
|
|
||||||
} else {
|
} else {
|
||||||
window.setPage(page);
|
div.setPage(page);
|
||||||
}
|
}
|
||||||
return window;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doAddTab(GridTab gTab, IADTabpanel tabPanel) {
|
protected void doAddTab(GridTab gTab, IADTabpanel tabPanel) {
|
||||||
tabPanel.setParent(window);
|
tabPanel.setParent(div);
|
||||||
tabPanel.setVisible(false);
|
tabPanel.setVisible(false);
|
||||||
|
|
||||||
ADTabListModel.ADTabLabel tabLabel = new ADTabListModel.ADTabLabel(gTab.getName(), gTab.getTabLevel());
|
ADTabListModel.ADTabLabel tabLabel = new ADTabListModel.ADTabLabel(gTab.getName(), gTab.getTabLevel());
|
||||||
|
@ -140,6 +140,6 @@ public class CompositeADTab extends AbstractADTab
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component getComponent() {
|
public Component getComponent() {
|
||||||
return window;
|
return div;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ public class Window extends org.zkoss.zul.Window
|
||||||
public Window()
|
public Window()
|
||||||
{
|
{
|
||||||
super();
|
super();
|
||||||
|
setShadow(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -13,24 +13,19 @@
|
||||||
|
|
||||||
package org.adempiere.webui.part;
|
package org.adempiere.webui.part;
|
||||||
|
|
||||||
import org.adempiere.webui.LayoutUtils;
|
|
||||||
import org.adempiere.webui.component.Tab;
|
import org.adempiere.webui.component.Tab;
|
||||||
import org.adempiere.webui.component.Tabbox;
|
import org.adempiere.webui.component.Tabbox;
|
||||||
import org.adempiere.webui.component.Tabpanel;
|
import org.adempiere.webui.component.Tabpanel;
|
||||||
import org.adempiere.webui.component.Tabpanels;
|
import org.adempiere.webui.component.Tabpanels;
|
||||||
import org.adempiere.webui.component.Tabs;
|
import org.adempiere.webui.component.Tabs;
|
||||||
import org.zkoss.zk.ui.Component;
|
import org.zkoss.zk.ui.Component;
|
||||||
import org.zkoss.zk.ui.event.Event;
|
|
||||||
import org.zkoss.zk.ui.event.EventListener;
|
|
||||||
import org.zkoss.zk.ui.event.Events;
|
|
||||||
import org.zkoss.zkex.zul.Borderlayout;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Low Heng Sin
|
* @author Low Heng Sin
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class WindowContainer extends AbstractUIPart implements EventListener
|
public class WindowContainer extends AbstractUIPart
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@ -67,8 +62,6 @@ public class WindowContainer extends AbstractUIPart implements EventListener
|
||||||
tabbox.setWidth("100%");
|
tabbox.setWidth("100%");
|
||||||
tabbox.setHeight("100%");
|
tabbox.setHeight("100%");
|
||||||
|
|
||||||
tabbox.addEventListener(Events.ON_SELECT, this);
|
|
||||||
|
|
||||||
if (parent != null)
|
if (parent != null)
|
||||||
tabbox.setParent(parent);
|
tabbox.setParent(parent);
|
||||||
else
|
else
|
||||||
|
@ -151,7 +144,6 @@ public class WindowContainer extends AbstractUIPart implements EventListener
|
||||||
if (enable)
|
if (enable)
|
||||||
setSelectedTab(tab);
|
setSelectedTab(tab);
|
||||||
|
|
||||||
deferLayout();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -216,23 +208,6 @@ public class WindowContainer extends AbstractUIPart implements EventListener
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
|
||||||
* @param event
|
|
||||||
*/
|
|
||||||
public void onEvent(Event event) throws Exception {
|
|
||||||
if (Events.ON_SELECT.equals(event.getName()))
|
|
||||||
deferLayout();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void deferLayout() {
|
|
||||||
Tabpanel panel = (Tabpanel) tabbox.getSelectedPanel();
|
|
||||||
if (panel.getFirstChild() instanceof Borderlayout) {
|
|
||||||
LayoutUtils.sendDeferLayoutEvent((Borderlayout) panel.getChildren().get(0), 50);
|
|
||||||
} else if (panel.getFirstChild() != null){
|
|
||||||
panel.getFirstChild().invalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Tabbox
|
* @return Tabbox
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,7 +12,7 @@ Copyright (C) 2006 Potix Corporation. All Rights Reserved.
|
||||||
|
|
||||||
<!-- change to false to use compress js which is much smaller -->
|
<!-- change to false to use compress js which is much smaller -->
|
||||||
<client-config>
|
<client-config>
|
||||||
<debug-js>true</debug-js>
|
<debug-js>false</debug-js>
|
||||||
</client-config>
|
</client-config>
|
||||||
|
|
||||||
<!--
|
<!--
|
||||||
|
|
Loading…
Reference in New Issue