2

我有一个带有 9 个 InputText 框和 2 个 InputSecret 框的 JSF 页面。这些盒子中的每一个都有一个连接到属性文件的标签、一个验证器(带有一条消息),并包含一个连接到命名会话范围 bean 的 EL 表达式。我使用 Glassfish 3.1.2.1 作为应用服务器。如果我将 project_stage 设置为 Development,则在加载或刷新此页面时会看到明显的闪烁。它发生得非常快,但看起来好像背景(正文)在页面加载之前被清除为白色。如果我将项目阶段设置为生产,我看不到闪光灯。导致这种行为的 Project_Stage 开发是做什么的?

4

1 回答 1

3

当从 HTTP 响应接收到的第一个字节和最后一个字节之间需要一些时间时,这是浏览器特定的行为。一些浏览器在收到第一个字节时会显示空白,并在收到最后一个字节时显示整个新页面。人眼的帧速率约为 25fps(电视正在使用)。任何比这更快的东西对人类来说是不明显的。但是任何比这慢的东西都会导致空白可见。

开发阶段导致某些部分没有被缓存,因此源文件中所做的最新更改立即可见,例如 Facelets 源文件。它们都在每个请求的基础上重新编译和重新解析。所有这些都会导致页面加载时间稍长一些,因此当浏览器空白显示超过大约 1/25 秒时,它很快就会显示出来。

您可能需要考虑将 Facelets 缓冲区大小web.xml增加到最大 HTML 输出的大小,以便一次性发送响应,而不是分批发送,这可能需要更多的预处理时间。

例如 64KB:

<context-param>
    <param-name>javax.faces.FACELETS_BUFFER_SIZE</param-name>
    <param-value>65535</param-value> <!-- 64KB -->
</context-param>
于 2013-03-13T14:43:13.273 回答