From 3d373500ffce41838c71deddfe73bd2db0a17bee Mon Sep 17 00:00:00 2001 From: Heng Sin Low Date: Tue, 10 Mar 2009 02:14:07 +0000 Subject: [PATCH] [ 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 --- .../webui/ServerContextCallback.java | 16 +++++++++-- .../webui/component/CompositeADTab.java | 18 ++++++------- .../org/adempiere/webui/component/Window.java | 1 + .../adempiere/webui/part/WindowContainer.java | 27 +------------------ zkwebui/WEB-INF/zk.xml | 2 +- 5 files changed, 26 insertions(+), 38 deletions(-) diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/ServerContextCallback.java b/zkwebui/WEB-INF/src/org/adempiere/webui/ServerContextCallback.java index 6c0386bec9..6e8ab8fab5 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/ServerContextCallback.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/ServerContextCallback.java @@ -15,10 +15,10 @@ package org.adempiere.webui; import java.io.Serializable; import java.lang.reflect.Method; -import net.sf.cglib.proxy.InvocationHandler; - import org.adempiere.webui.session.ServerContext; +import net.sf.cglib.proxy.InvocationHandler; + /** * Intercaptor for Server context properties that delegate to the threadlocal instance * @author Low Heng Sin @@ -31,6 +31,18 @@ public class ServerContextCallback implements InvocationHandler, Serializable { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 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()); return m.invoke(context, args); } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/CompositeADTab.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/CompositeADTab.java index badd82d88c..d69a8a5da2 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/CompositeADTab.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/CompositeADTab.java @@ -27,6 +27,7 @@ import org.compiere.model.GridTab; import org.compiere.util.CLogger; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.event.EventListener; +import org.zkoss.zul.Div; /** * @@ -44,7 +45,7 @@ public class CompositeADTab extends AbstractADTab private List tabLabelList = new ArrayList(); - private Window window; + private Div div; protected ADButtonTabList tabList; @@ -56,20 +57,19 @@ public class CompositeADTab extends AbstractADTab protected Component doCreatePart(Component parent) { - window = new Window(); + div= new Div(); if (parent != null) { - window.setParent(parent); - LayoutUtils.addSclass("adtab-body", window); - window.setContentSclass("adtab-body"); + div.setParent(parent); + LayoutUtils.addSclass("adtab-body", div); } else { - window.setPage(page); + div.setPage(page); } - return window; + return div; } @Override protected void doAddTab(GridTab gTab, IADTabpanel tabPanel) { - tabPanel.setParent(window); + tabPanel.setParent(div); tabPanel.setVisible(false); ADTabListModel.ADTabLabel tabLabel = new ADTabListModel.ADTabLabel(gTab.getName(), gTab.getTabLevel()); @@ -140,6 +140,6 @@ public class CompositeADTab extends AbstractADTab } public Component getComponent() { - return window; + return div; } } diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/component/Window.java b/zkwebui/WEB-INF/src/org/adempiere/webui/component/Window.java index 3d6da3d91c..fb867f5437 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/component/Window.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/component/Window.java @@ -50,6 +50,7 @@ public class Window extends org.zkoss.zul.Window public Window() { super(); + setShadow(false); } /** diff --git a/zkwebui/WEB-INF/src/org/adempiere/webui/part/WindowContainer.java b/zkwebui/WEB-INF/src/org/adempiere/webui/part/WindowContainer.java index 0c4d0645e5..104b1ff5b9 100644 --- a/zkwebui/WEB-INF/src/org/adempiere/webui/part/WindowContainer.java +++ b/zkwebui/WEB-INF/src/org/adempiere/webui/part/WindowContainer.java @@ -13,24 +13,19 @@ package org.adempiere.webui.part; -import org.adempiere.webui.LayoutUtils; import org.adempiere.webui.component.Tab; import org.adempiere.webui.component.Tabbox; import org.adempiere.webui.component.Tabpanel; import org.adempiere.webui.component.Tabpanels; import org.adempiere.webui.component.Tabs; 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 * */ -public class WindowContainer extends AbstractUIPart implements EventListener +public class WindowContainer extends AbstractUIPart { private static final long serialVersionUID = 1L; @@ -67,8 +62,6 @@ public class WindowContainer extends AbstractUIPart implements EventListener tabbox.setWidth("100%"); tabbox.setHeight("100%"); - tabbox.addEventListener(Events.ON_SELECT, this); - if (parent != null) tabbox.setParent(parent); else @@ -151,7 +144,6 @@ public class WindowContainer extends AbstractUIPart implements EventListener if (enable) 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 */ diff --git a/zkwebui/WEB-INF/zk.xml b/zkwebui/WEB-INF/zk.xml index 659df2c9ba..584d1819af 100644 --- a/zkwebui/WEB-INF/zk.xml +++ b/zkwebui/WEB-INF/zk.xml @@ -12,7 +12,7 @@ Copyright (C) 2006 Potix Corporation. All Rights Reserved. - true + false