jsf - 如何在页面上呈现 JSF 阶段计时

标签 jsf timing jsf-2.2 phaselistener

我创建了一个实现 PhaseListener 的类,并将每个阶段的计时打印到日志中。现在我想将其打印到 JSF 页面,这样我就可以看到渲染页面时每个阶段花费的时间。

我不知道这是否可能;也许这是一个先有鸡还是先有蛋的问题?

代码

正如 LaurentG 告诉我的那样,不可能实现我所寻求的目标。如果有人正在寻找时间阶段的代码,这里有一种方法:

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class LogPhaseListener implements PhaseListener {

    private long startTimeP1;
    private long startTimeP2;
    private long startTimeP3;
    private long startTimeP4;
    private long startTimeP5;
    private long startTimeP6;
    private long timeP1;
    private long timeP2;
    private long timeP3;
    private long timeP4;
    private long timeP5;
    private long timeP6;
    private long timeAll;

    @Override
    public void afterPhase(PhaseEvent event) {

        if (event.getPhaseId() == PhaseId.RESTORE_VIEW) {
            timeP1 = (long) ((System.nanoTime() - startTimeP1) * 0.000001);
            System.err.println("|     Phase 1 Execution time -- RESTORE_VIEW -- " + timeP1 + "ms");
        }
        if (event.getPhaseId() == PhaseId.APPLY_REQUEST_VALUES) {
            timeP2 = (long) ((System.nanoTime() - startTimeP2) * 0.000001);
            System.err.println("|     Phase 2 Execution time -- APPLY_REQUEST_VALUES -- " + timeP2 + "ms");
        }
        if (event.getPhaseId() == PhaseId.PROCESS_VALIDATIONS) {
            timeP3 = (long) ((System.nanoTime() - startTimeP3) * 0.000001);
            System.err.println("|     Phase 3 Execution time -- PROCESS_VALIDATIONS -- " + timeP3 + "ms");
        }
        if (event.getPhaseId() == PhaseId.UPDATE_MODEL_VALUES) {
            timeP4 = (long) ((System.nanoTime() - startTimeP4) * 0.000001);
            System.err.println("|     Phase 4 Execution time -- UPDATE_MODEL_VALUES -- " + timeP4 + "ms");
        }
        if (event.getPhaseId() == PhaseId.INVOKE_APPLICATION) {
            timeP5 = (long) ((System.nanoTime() - startTimeP5) * 0.000001);
            System.err.println("|     Phase 5 Execution time -- INVOKE_APPLICATION -- " + timeP5 + "ms");
        }
        if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
            timeP6 = (long) ((System.nanoTime() - startTimeP6) * 0.000001);
            timeAll = (long) ((System.nanoTime() - startTimeP1) * 0.000001);

            System.err.println("|     Phase 6 Execution time -- RENDER_RESPONSE -- " + timeP6 + "ms");
            System.err.println("|     Phase X Execution time -- ALL_PHASES -- " + timeAll + "ms");
        }
    }

    @Override
    public void beforePhase(PhaseEvent event) {

        if (event.getPhaseId() == PhaseId.RESTORE_VIEW) {
            startTimeP1 = System.nanoTime();
        }
        if (event.getPhaseId() == PhaseId.APPLY_REQUEST_VALUES) {
            startTimeP2 = System.nanoTime();
        }
        if (event.getPhaseId() == PhaseId.PROCESS_VALIDATIONS) {
            startTimeP3 = System.nanoTime();
        }
        if (event.getPhaseId() == PhaseId.UPDATE_MODEL_VALUES) {
            startTimeP4 = System.nanoTime();
        }
        if (event.getPhaseId() == PhaseId.INVOKE_APPLICATION) {
            startTimeP5 = System.nanoTime();
        }
        if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) {
            startTimeP6 = System.nanoTime();
        }
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }

}

并将以下内容添加到faces-config.xml

<lifecycle>
  <phase-listener>package.name.LogPhaseListener</phase-listener>
</lifecycle>

在 Andy Gibsons 站点找到的原始代码:http://www.andygibson.net/blog/tutorial/timing-jsf-requests-using-a-phase-listener/

最佳答案

您可以使用JSFInspector在页面上可视化每个生命周期阶段的持续时间。

关于jsf - 如何在页面上呈现 JSF 阶段计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21737220/

相关文章:

c# - 最坏情况操作系统时钟精度?

javascript - 多个 jQuery 幻灯片不会保持同步

java - JBoss 是否缓存类文件?

javascript - 调用另一个a4j :jsFunction in an a4j:jsFunction oncomplete event

Javascript setInterval if 语句无法正常工作

javascript - 使用 javascript 保存 primefaces 的画廊组件中的图像

jsf-2 - Primefaces 扩展 documentViewer 显示下载状态

javascript - 基于复选框选择jquery更新文本框

jsf - Primefaces 数据表的 p :columns not iterating over Map

jsf - 正在处理的页面只是在错误/异常的中途留空,而不是转发到 web.xml 中指定的错误页面