目录
本章将要讲述使你的ZK应用程序运行的更快的提示。
在ZUML中使用zscript很方便,但是这需要付出代价:性能较低。降级随应用程序不同而不同(The degradation varies from one application from another)。对于大型的网站,建议尽可能的不使用zscript。
若你仍然需要编写zscript 代码,可以指定deferred 属性来延迟zscript 代码的赋值(evaluated),如下。
<zscript deferred="true"> ...
通过指定deferred属性,它包含的zscript 代码在ZK提交(render)一个页面时不会被赋值(evaluated)。这意味着当ZK提交一个页面时,解释其不会被加载。这节省了内存且加速了页面的提交。
在下面的例子中,仅当按钮被点击时解释器才会被加载:
<window id="w">
<zscript deferred="true">
void addMore() {
new Label("More").setParent(w);
}
</zscript>
<button label="Add" onClick="addMore()"/>
</window>
这值得注意,若onCreate事件监听器由zscript 编写,在前面提到的deferred 选项会变得无效。这是因为onCreate事件是在加载页面时被送出的。换言之,若onCreate事件监听器由zscript 编写,所有被延迟的zscript会在加载页面时被赋值,如下所示。
<window onCreate="init()"> ...
最好重写为
<window use="my.MyWindow"> ...
然后准备MyWindow.java,如下。
package my;
public class MyWindow extends Window {
public void onCreate() { //to process the onCreate event
...
若你喜欢在创建了组件(及该组件所有的子组件)之后马上进行初始化,可以是实现org.zkoss.zk.ui.ext.AfterCompose接口,如下。注:AfterCompose接口的afterCompose方法是在组件创建阶段被赋值的,而onCreate事件是在事件处理阶段被赋值的。
package my;
public class MyWindow extends Window implements org.zkoss.zk.ui.ext.AfterCompose {
public void afterCompose() { //to initialize the window
...