小编Dav*_*der的帖子

如何_know_哪个JSON渲染器在我的Rails 3应用程序中处于活动状态?

这是这个问题的直接后续问题:在rails中渲染json的最快方法是什么

我的应用程序执行数据库查询并呈现给JSON以进行JS回调.小(1 MB)数据集至少需要8秒,而大(3.5 MB)数据集需要20秒.这基本上会杀死我的应用程序作为一个想法.我的用户不会忍受这种等待.

我读过有关multi_json和辛普森和yajl,我我已经得到了他们安装,但没有我试图激活我的Gemfile的各种宝石的方式显示时间序列化任何改善.我怎样才能证明我使用的是另一个,以便我比较它们之间的结果?我找不到任何方式输出(到Rails调试日志或浏览器中的JS控制台)哪个库可能已用于实际的'render:json => @data'调用.

json ruby-on-rails-3

16
推荐指数
1
解决办法
2308
查看次数

在 Turbolinks 存在的情况下导航回来时,如何防止 jQuery DataTable 上出现重复的包装器?

我在新的 Rails 4.2 项目中使用 jQuery DataTables。我有大量结果需要按组、项目和状态进行过滤。选择组会通过应用程序的往返来过滤项目选择,项目选择也会以相同的方式过滤表。我将组和项目保存在会话变量中,以便当用户更改页面,然后单击主链接返回时,它将记住他们的选择,并将它们返回到原来的位置。这一切都按照我的意愿进行。

问题在于,使用浏览器的后退按钮从不同页面返回表将导致 DataTable 周围出现重复的包装器(带有搜索框、项目数下拉列表和分页链接)。

在此输入图像描述

我添加了 jquery-turbolinks gem。

我尝试过摆弄事件侦听器,但我无法使这些想法发挥作用。

我尝试过使页面正文免受 Turbolinks 的影响data-turbolinks=false

我尝试将我的脚本键更改为除 之外的事件$(document).ready(),例如page:load。他们都没有阻止这一点。

我尝试加载data-turbolinks-eval=false该特定页面中不受 Turbolinks 约束的 DataTable 的所有脚本(带有content_for :head)。

我发现唯一可以防止这种包装器重复发生的方法是简单地删除从资产中完全包含turbolinks JS 的调用。如果我不知道比我更聪明的人认为它应该成为应用程序的一部分,我早就这样做了。我不知道该怎么办。我正在寻找一种优雅的方式来处理这个问题。

更新:四年后,我正在使用 Rails 6.1,并且仍然广泛使用 Ag-Grid。我想尝试一下 Rails Hotwire的新功能,但它似乎是建立在 Turbolinks 上的。因此,我再次尝试让 Ag-Grid 与 Turbolinks 很好地配合,但它仍然存在与 DataTables 相同的问题,而且我仍然找不到解决办法。

通过放入表格的 div(而不是页面,就像我之前尝试过的那样) ,我通过DataTables 上的此页面的提示取得了一些小进展。data-turbolinks="false"对于某些导航来说,这“有效”。我所说的“有效”是指它防止了重复表,但它仍然重新加载整个表。

我还发现了关于 Basecamp 在存在 Turbolinks 的情况下如何处理缓存的有趣讨论,但这对 Ag-Grid 没有帮助。

我发现防止表元素重复的正确咒语是用作document.addEventListener('DOMContentLoaded', function() {})我的密钥。它似乎尊重使用链接或后退/前进按钮进行导航的所有不同情况,而不重复。但是,我丢失了表中超出屏幕上显示内容的任何行,并且整个表需要再次获取和显示数据,所以这实际上并不能解决任何问题。

这就是这种情况继续让我着迷和沮丧的部分。如果我不使用 Tubolinks,这些 JS …

jquery datatables turbolinks ruby-on-rails-4

6
推荐指数
1
解决办法
3189
查看次数

使用Oj JSON解析器无法获得性能改进

根据https://www.ruby-toolbox.com/categories/JSON_Parsers,我应该在使用Oj序列化哈希时获得疯狂的加速.我已经安装了最新的gem,将它包含在我的Gemfile中,运行bundle install,并且可以确认它已经被使用了.如何_know_哪个JSON渲染器在我的Rails 3应用程序中处于活动状态?但是,渲染JSON响应绝对没有加速.

在库中,我使用Ruby的mysql模块查询遗留的MySQL数据库.我将字符串转换为值,并返回一个哈希数组.这很好用,大约需要1.5到2秒.它应该在这里检索一大块数据.

CONTROLLER

@data = Gina.points(params[:project], params[:test],
    session[:username], session[:password])
respond_to do |format|
    format.html { render :text => @data }
    format.json { render :json => @data } # :text => MultiJson.engine
end
Run Code Online (Sandbox Code Playgroud)

图书馆

dbh = Mysql.real_connect(@@host, u, p)
res = dbh.query("SELECT * FROM #{d}.#{t}")
    @data = []
    res.each_hash do |row|
    obj = {}
        row.each_pair do |k, v|
            v.match(/\A[+-]?\d+?(\.\d+)?\Z/) == nil ? obj[k] = v : obj[k] = v.to_f
        end
    @data << obj
end
Run Code Online (Sandbox Code Playgroud)

我的问题是'render:json'部分.对于大约1.5 MB的数据,这可能需要大约8或9秒.在较大的数据集(3.5 …

json ruby-on-rails

5
推荐指数
1
解决办法
2749
查看次数

获取Ruby的OpenSSL :: HMAC.hexdigest()以输出与PHP的hash_hmac()相同的内容

我正在尝试使用Web服务提供商的API.他们在Ruby中没有一个例子,但他们确实有一个用于PHP的例子,而我正试图在两者之间进行解释.API示例在PHP的hash_hmac()调用中始终使用"true",这会生成二进制输出.差异似乎是Ruby的OpenSSL :: HMAC.hexdigest()函数总是返回文本.(如果我将PHP调用更改为"false",则返回相同的值.)有没有人知道一种方法来"编码"从OpenSSL :: HMAC.hexdigest()返回的文本,以获得与hash_hmac返回的相同的内容('sha256',$ text,$ key,true)?

php ruby

2
推荐指数
1
解决办法
3132
查看次数