使用Ajax加速Sinatra页面加载?

时间:2015-01-21 04:59:39

标签: ruby ajax load sinatra erb

我正在使用Sinatra开发Web应用程序,但我遇到了长页面加载时间问题。

应用程序通过并显示大量数据,所以我确定这是原因,但我想知道是否有办法让页面的主要erb布局首先加载然后在加载之后,数据加载在它之上。

我的第一个想法是AJAX,但我不确定如何实现它。

提前致谢。

1 个答案:

答案 0 :(得分:2)

你是对的,这可能有所帮助。旧的口头禅“将那些不同的东西改变”,适用于编程的任何部分。

这是返回一些数据的路线:

require 'json'
get "/time-now/?" do
  content_type :json
  {time: Time.now.to_s}.to_json
end

这里有一些javascript(jQuery ajax)来称呼它:

$.ajax({
  accepts: "application/json",
  type: "GET",
  url: "/time-now",
  dataType: "json",
  success: function(res, status, xhr) {
    return [$("#time").html(res)];
  },
  error: function(res, status, xhr) {
    return [$("#time").addClass("error")];
  },
  complete: function(res, status, xhr) {
    return [$("#button1").show()];
  }
});

(jQuery的那一点可能有点不对,只是警告你,这是一个复制'粘贴工作被黑客攻击以适应这个例子)

也许你可以停止从Sinatra路由提供用户页面并使用静态(即预构建)页面,其中有javascript,这些页面可以对Sinatra路由进行AJAX调用。或两种类型的混合物。然后你就开始了一个Web服务数据API。有许多javascript框架可以帮助解决这个问题(例如Ember,Backbone,Angular等等)以及与Sinatra一起使用的大量API构建器,如GrapeWeasel Diesel