目录
本章将要讲述使你的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 ...