我可以逐步显示缓慢加载的网页吗?

时间:2013-08-14 17:43:44

标签: html ruby-on-rails html5 performance server-sent-events

我正在使用mashup来抓取几个网站以获取数据。我想按需抓取和缓存数据,而不是索引整个网站。

第一次获取数据时,操作可能非常慢 - 至少几分钟。

这样逐行显示页面的最佳做法是什么?有没有办法动态显示页面,显示获取的数据?

相关:

2 个答案:

答案 0 :(得分:1)

我使用jquery允许在单击按钮时呈现每个昂贵的部分:

观点:

  #book_forecast    
    = link_to 'See Sales Estimates'  , book_forecast_work_update_path(:work => @work),  :remote => true

book_forecast.js.erb:

$( "#book_forecast" ).html( "<%= escape_javascript( render( :partial => 'works/work_update/evaluation_forecast', :locals => { :work => @work} ) ) %>" );

work_update控制器:

  def book_forecast
    @work = Work.find(params[:work])
    respond_to do | format |
        format.js
    end
  end

工作/ work_update / evaluation_forecast.html.haml:

# slow-loading code 

缺点是用户必须单击按钮才能渲染每个部分,但另一方面,使用jquery而不是正常渲染意味着在页面加载时不会运行昂贵的代码。

您还可以使用“加载”图标,以便在繁重的代码运行时用户可以查看某些内容,例如:

同样的观点:

  #loading
    %h2
      .notice
        Loading, please wait...

JS:

$(document).ready(function () {

  $('#loading')
      .hide()  
      .ajaxStart(function() {
          $(this).show();
      })
      .ajaxStop(function() {
          $(this).hide();
      })
  ;

答案 1 :(得分:0)

看起来像Rails Live Streaming是一种方法。缺点是它似乎是高度依赖Web服务器和敏感的。这是一个教程:

http://tenderlovemaking.com/2012/07/30/is-it-live.html

class MyController < ActionController::Base
  include ActionController::Live

  def index
    100.times {
      response.stream.write "hello world\n"
    }
    response.stream.close
  end
end