caching - HtmlUnit 比 GUI 浏览器慢?

标签 caching htmlunit

为什么 HtmlUnit 比 GUI 浏览器慢这么多?例如,HtmlUnit 加载此页面 http://oltexpress.airkiosk.com/cgi-bin/airkiosk/I7/181002i?O2=2在 14 秒内(当 CSS 支持关闭时),而 FF 在 5 秒内完成(清除缓存后,支持 CSS)。我知道,现代浏览器在处理糟糕的 JS 代码时并没有那么严格,而 HtmlUnit 是这样,但这里的时差仍然是无法容忍的。

任何想法如何加快 HtmlUnit 的工作?有没有人玩过 HtmlUnit 缓存?

最佳答案

回答您关于为什么慢的问题:

这纯粹是因为 HTMLUnit 有很多反对它的地方:

  • 它以一种编译语言运行,该语言没有许多浏览器(如 FireFox)的 native 优化。
  • 它需要格式良好的 XML,而不是 HTML(非严格),这意味着它必须将 HTML 转换为 XML。
  • 然后它必须通过解析器运行 JavaScript,修复代码中的任何问题,然后在 Java 内部进行处理。
  • 同样正如@Arya 指出的那样,它一次请求一个东西,所以很多 javascript 文件会导致速度变慢,很多图像会导致速度变慢。

  • 回答您关于如何加快速度的问题:

    作为一般规则,我禁用(除非需要它们):
  • JavaScript
  • 图片
  • CSS
  • 小程序。

  • 我也得到了源代码并删除了ActiveX支持并重新编译。如果您想阻止代码加载这些额外的页面,您可以使用下面的代码来提供响应,而无需从网络上下载。
    WebClient browser;
    browser.setWebConnection(new WebConnectionWrapper(browser) {
        @Override
        public WebResponse getResponse(final WebRequest request) throws IOException {
            if (/* Perform a test here */) {
                return super.getResponse(request); // Pass the responsibility up.
            } else {
                /* Give the program a response, but leave it empty. */
                return new StringWebResponse("", request.getUrl());
            }
        }
    });
    

    我注意到的其他事情:
  • HTMLUnit 不是线程安全的,这意味着您可能应该为每个线程创建一个新的。
  • HTMLUnit 实际上缓存页面
  • 关于caching - HtmlUnit 比 GUI 浏览器慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691638/

    相关文章:

    java - 在 Storm bolt 中缓存

    html - 如何使用 HtmlUnit 在另一个 div 中找到 div?

    java - 使用htmlunit提取html内容

    javascript - 有没有办法在开始执行 javascript 之前转换由 HtmlUnit 加载的页面?

    java - 返回 HtmlUnit 历史

    caching - 估计并发 Azure Appfabric 缓存连接

    asp.net - ASP.NET web 服务的大型静态数据?

    java - 缓存 REST API (JAX-RS)

    javascript - 使用 HTMLUnit 调用 JavaScript 函数

    java - 使用 JBoss Cache 作为 Apache Lucene 的目录