【发布时间】:2012-03-29 19:35:03
【问题描述】:
如果已经在某处回答了这个问题,请原谅我。我已经搜索过了,这似乎是一个相当具体的案例。
这是 JSON 的示例(注意:这是非常精简的 - 这是动态加载的,目前有 126 条记录):
var layout = {
"2":[{"id":"40","attribute_id":"2","option_id":null,"design_attribute_id":"4","design_option_id":"131","width":"10","height":"10",
"repeat":"0","top":"0","left":"0","bottom":"0","right":"0","use_right":"0","use_bottom":"0","apply_to_options":"0"},
{"id":"41","attribute_id":"2","option_id":"115","design_attribute_id":"4","design_option_id":"131","width":"2","height":"1",
"repeat":"0","top":"0","left":"0","bottom":"4","right":"2","use_right":"0","use_bottom":"0","apply_to_options":"0"},
{"id":"44","attribute_id":"2","option_id":"118","design_attribute_id":"4","design_option_id":"131","width":"10","height":"10",
"repeat":"0","top":"0","left":"0","bottom":"0","right":"0","use_right":"0","use_bottom":"0","apply_to_options":"0"}],
"5":[{"id":"326","attribute_id":"5","option_id":null,"design_attribute_id":"4","design_option_id":"154","width":"5","height":"5",
"repeat":"0","top":"0","left":"0","bottom":"0","right":"0","use_right":"0","use_bottom":"0","apply_to_options":"0"}]
};
我需要匹配正确的值组合。这是我目前使用的功能:
function drawOption(attid, optid) {
var attlayout = layout[attid];
$.each(attlayout, function(k, v) {
// d_opt_id and d_opt_id are global scoped variable set elsewhere
if (v.design_attribute_id == d_att_id
&& v.design_option_id == d_opt_id
&& v.attribute_id == attid
&& ((v.apply_to_options == 1 || (v.option_id === optid)))) {
// Do stuff here
}
});
}
问题是我可能会遍历 10-15 个布局(唯一的 attid),而任何给定的布局 (attid) 可能有多达 50 种可能性,这意味着这个循环正在运行很多次。
考虑到必须匹配的多个条件,AJAX 调用会更好吗? (这个 JSON 是通过 PHP 动态创建的,所以我可以制作一个 PHP 函数,它可能会更有效地做到这一点), 还是我完全错过了有关如何在 JSON 对象中查找项目的信息?
一如既往,欢迎提出任何改进代码的建议!
编辑:
我很抱歉没有说清楚,但这个问题的目的是找到一种提高性能的方法。该页面有很多 javascript,这是我知道性能低于其可能的位置。
【问题讨论】:
-
您可以使用
jsonpath库。几乎不会更快,但您将拥有更简单的代码。 -
您是否关心可读性、性能或其他一些指标?
-
首要关注的是性能。可读性是次要的。
-
jsonpath : 无需特殊脚本即可在客户端以交互方式查找和提取数据。[link]goessner.net/articles/JsonPath
-
如果代码可以正常工作并且您只是想改进它,您应该将其发布到codereview.stackexchange.com。
标签: javascript jquery json