使用 Ajax 加速 Sinatra 页面加载?

Speed up Sinatra page load with Ajax?

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

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

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

提前致谢。

你是对的,可能会有帮助。 "separate that which changes from that which does not" 这句老话适用于编程的任何部分。

这是 returns 一些数据的路线:

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 等等),还有很多 API 构建器和 Sinatra,喜欢 Grape and Weasel Diesel.