【发布时间】:2015-03-19 13:00:30
【问题描述】:
我正在使用 Sinatra 开发 Web 应用程序,但我遇到了页面加载时间过长的问题。
应用程序通过并显示大量数据,所以我确定这是原因,但我想知道是否有办法让页面的主 erb 布局首先加载,然后在加载后加载数据在它之上。
我的第一个想法是 AJAX,但我不确定如何实现它。
提前致谢。
【问题讨论】:
标签: ruby ajax load sinatra erb
我正在使用 Sinatra 开发 Web 应用程序,但我遇到了页面加载时间过长的问题。
应用程序通过并显示大量数据,所以我确定这是原因,但我想知道是否有办法让页面的主 erb 布局首先加载,然后在加载后加载数据在它之上。
我的第一个想法是 AJAX,但我不确定如何实现它。
提前致谢。
【问题讨论】:
标签: ruby ajax load sinatra erb
你是对的,它可能会有所帮助。 “将变化与不变分开”这句古老的口头禅适用于编程的任何部分。
这里是返回一些数据的路由:
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 构建器,例如 Grape 和 Weasel Diesel。
【讨论】: