使用 SerializeJSON 返回结构数组而不是带有 COLUMNS 和 DATA 节点的 JSON 对象?

2024-02-11

我正在构建一个 Railo 应用程序,它处理通过 Ajax 来回发送的大量 JSON 数据。我已经找到了优化其性能的机会,但在解决这个问题之前我想听听社区的一些建议。

这是一个很好的例子来说明这种情况。

我在服务器上有一个操作,它查询一组出价响应,将它们序列化为 JSON,然后将它们返回到前端的 javascript,然后解析并呈现一些 HTML。 Railo 返回 JSON 的格式是熟悉的二节点对象:

{"COLUMNS":["one","two","three",...],"DATA":["value","value","value",...]}

我写了一个函数,利用下划线 http://documentcloud.github.com/underscore/的 map() 函数将此格式转换为具有命名节点的对象数组:

function toArgsObject(data,columns) {
return _.map(data, function(w){
    var q = {};
    for (var i=0; i < w.length; i++) { eval("q."+columns[i]+" = w[i]"); };
    return q;
});
};

这样就很好地完成了工作但是性能不太好!即使使用 webkit 和 firefox 中的 swift js 解释器,该函数也常常占用调用它的函数中 75% 的处理时间,尤其是当数据集很大时。我想看看通过将此处理卸载到服务器可以得到多少改进,但我不太具备 cfml / cfscript 能力来编写此的高效版本。

那么,我需要从服务器返回的内容将如下所示:

[
{"one":"value","two":"value","three":"value"},
{"one":"value","two":"value","three":"value"}.
...
]

据我所知,SerializeJSON 使用的格式创建的响应要小得多,因此使用更少的带宽来发送。这就是实验的用武之地。我想看看它如何影响我的应用程序以不同的方式做事!

有人编写过可以返回这种格式数据的 JSON 序列化器吗?


如果您需要 JS 中的结构数组,您可以轻松地将查询转换为服务器端的此类数据集并应用 SerializeJSON()。

快速示例 1

<cfset dataset = [
    {"one":"value","two":"value","three":"value"},
    {"one":"value","two":"value","three":"value"}
] />

<cfoutput><p>#SerializeJSON(dataset)#</p></cfoutput>

(I loveRailo 中结构定义语法的自由)

快速示例 2

<cfquery datasource="xxx" name="qGetRecords">
    select userId, login, email from users limit 0,3
</cfquery>

<cfset dataset = [] />

<cfloop query="qGetRecords">
    <cfset record = {} />
    <cfset record["one"] = qGetRecords.userId />
    <cfset record["two"] = qGetRecords.login />
    <cfset record["three"] = qGetRecords.email />
    <cfset ArrayAppend(dataset, record) />
</cfloop>

<cfoutput>
    <p>#SerializeJSON(qGetRecords)#</p>
    <p>#SerializeJSON(dataset)#</p>
</cfoutput>

应该为你工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SerializeJSON 返回结构数组而不是带有 COLUMNS 和 DATA 节点的 JSON 对象? 的相关文章

随机推荐