【问题标题】:JSF page load is very slowJSF 页面加载很慢
【发布时间】:2015-01-15 15:16:03
【问题描述】:

我有一个网站,其中包含一些使用带有rendered 属性的p:graphicsimage 标签的图片。因此,仅当 bean(数据库查询)返回 true 时才会显示图像。 我还有一个登录表单检查用户与数据库。这工作正常,但我目前的问题是页面需要大量时间来加载页面(大约 25 秒)。

loginbutton 的 bean 方法在按下 loginbutton 后约 20 秒被调用,但我不知道服务器在此期间在做什么。知道如何检查服务器状态或如何解决该问题吗?

我的豆子是ManagedBeans

提前致谢!

【问题讨论】:

  • 尝试调试登录后执行的方法。尝试找到发生滞后的语句。
  • 您是否运行了分析器?在 jvisualvm 中尝试 CPU 示例。这将告诉您 CPU 时间的去向。也许是数据库查询。
  • Profiler 显示 98% 的时间 cpu 处于空闲状态
  • 您是否在资源充足的真实服务器上运行应用程序?虽然速度/性能取决于几件事,但在服务层上运行的业务逻辑(EJB 上的 JPA 事物或其他)可能会对性能产生重大影响,如果该逻辑/代码混乱/分散 - 例如,如果你正在做很多Java 代码的事情,否则这些事情可以委托给单个(一个或两个)(聚合)SQL 语句,查询优化技术被忽略,来自数据库的结果集不会延迟获取,在许多地方不必要地使用急切获取等.
  • 确保图片尺寸不要太大。浏览器可能正在获取这些图像,但它们太大(20 MB 或 osthing)并且需要时间。只是猜测

标签: java jsf primefaces javabeans wildfly


【解决方案1】:

您可以调试您的方法并对潜在领域进行基准测试,例如非常老派

long startTime = System.currentTimeMillis();
method();
long endTime = System.currentTimeMillis();
System.out.println((endTime - startTime) + "ms")

或使用像 yourkit 这样的分析器。

【讨论】:

    【解决方案2】:

    您可以采取一些措施来提高屏幕的性能

    1. GZIP 过滤器将显着减少初始加载时间。它在传输到客户端浏览器时压缩页面内容。参考https://stackoverflow.com/a/35567295/5076414
    2. 您还可以实现一个 cacheFilter 来带来 您的屏幕与基于 JavaScript 的 UI 相当。这将缓存屏幕的静态内容,例如图标、图像、样式表、javascript 等。您可以控制要缓存的内容和要排除的内容。参考https://stackoverflow.com/a/35567540/5076414
    3. 对于客户端 UI 组件,您可以使用 Primefaces,即 JQuery 基于用户界面。

    如何验证我的屏幕是否使用 gzip 和缓存

    要查看您的内容是否已使用 gzip 和缓存,请在 Google Chrome 浏览器中 -> 右键单击​​屏幕 -> 检查 -> 单击网络选项卡 -> 刷新屏幕。 点击图片、图标、样式表,看看你是否在响应标题

    中看到以下内容

    Cache-Control:max-age=2592000 如果元素的状态为 304(来自缓存)

    Content-Encoding:gzip 如果元素的状态为 200

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-13
      • 2015-03-30
      • 1970-01-01
      • 2011-07-20
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      相关资源
      最近更新 更多