Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 集体讨论克服Heroku的想法';s 30秒超时和HTMLUnit';页面渲染速度慢_Java_Heroku_Htmlunit - Fatal编程技术网

Java 集体讨论克服Heroku的想法';s 30秒超时和HTMLUnit';页面渲染速度慢

Java 集体讨论克服Heroku的想法';s 30秒超时和HTMLUnit';页面渲染速度慢,java,heroku,htmlunit,Java,Heroku,Htmlunit,我有一个奇怪的问题 我正在做一些屏幕抓取,然后将数据呈现给我的用户以进行一些选择。我无法控制正在使用的站点,我需要它们首先执行Javascript 这个过程在本地运行得很好,每件事情只需要一分钟就可以发生。但是当我推到Heroku时,请求在30秒后超时,尽管我可以通过日志看到,实际的处理一直在进行 您是否可以推荐以下解决方案之一或其他替代方案: 以某种方式增加Heroku的超时-我认为这是不可能的(我使用的是PlayFramework 1.2.7和Java) 以某种方式加速HTMLUnit-我已

我有一个奇怪的问题

我正在做一些屏幕抓取,然后将数据呈现给我的用户以进行一些选择。我无法控制正在使用的站点,我需要它们首先执行Javascript

这个过程在本地运行得很好,每件事情只需要一分钟就可以发生。但是当我推到Heroku时,请求在30秒后超时,尽管我可以通过日志看到,实际的处理一直在进行

您是否可以推荐以下解决方案之一或其他替代方案:

  • 以某种方式增加Heroku的超时-我认为这是不可能的(我使用的是PlayFramework 1.2.7和Java)
  • 以某种方式加速HTMLUnit-我已经在下面粘贴了我的代码
  • 在执行Javscript(Ajax)之后,以不同的方式获取页面HTML—我只需要HTML。有没有更好/更快的方法
  • 分两步完成这项工作,首先使用HTMLUnit获取页面代码并将其保存到数据库中。然后从数据库中获取页面代码并对其进行一些处理。这就是我所能想到的
  • 守则:

    LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
    java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF);
    
    WebClient webClient = new WebClient();
    webClient.getOptions().setThrowExceptionOnScriptError(false);
    webClient.waitForBackgroundJavaScript(20000);
    
    Page page = webClient.getPage(url);
    WebResponse response = page.getWebResponse();
    String html = response.getContentAsString();
    

    运行长时间运行的流程的正确方法是使用异步工作进程。即使是一个耗时5秒的进程也会将您的web worker锁定一段时间(假设您正在运行同步worker),因此将此类任务委托给异步worker总是明智的

    请按照以下指南开始: