我基本上有这个网页,你可以缩小你的搜索结果,添加和删除某些过滤器在左手边。
从数据库中提取的内容是一个属性列表,可以通过以下方法对其进行筛选:
因此,每次我单击左侧的一个有效过滤器时,它都会将其添加到ajax请求中使用的筛选条件中。这将加入所需的最小表数,并返回结果。
因此,如果我四处游玩并激活/取消激活,我可以轻松地在一分钟内完成大约20-30个ajax请求(除非取消激活,否则只允许一次过滤每种类型中的一个)。
问题:--我想知道我是否应该提取所有可能的属性并对它们进行过滤,而不是根据每个ajax请求查询数据库,每个事务至少有2-3个LEFT JOIN。
有不到100的财产,我不处理数百或数千。
发布于 2010-09-15 16:14:59
绝对:拉出完整的数据集并对其进行过滤。假设您的每个Ajax请求花费100‘s。您可能已经在讨论在您的应用程序中引入2-3秒的延迟时间,而对于您的小数据集,您并不真正需要它。
如果您正在缩小结果列表,"面向对象的CSS“也可以成为您的朋友。考虑将各种可过滤的属性表示为类,并将用户选择的筛选器添加到其父类中,然后使用CSS显示或隐藏相关结果。
例如,如果您在父LI下将所有结果作为UL,则<ul class="idaho apartment">可以指示在所有爱达荷公寓项目上过滤的用户,而下面的CSS将隐藏其他内容:
.apartment .camp, .apartment ranch ... { display : none; }
.idaho .illinois, .idaho indiana{ display: none; }使用这种方法,您只需要一台服务器,并依赖browser + JavaScript来处理其余的(由于您使用的是布尔比较-结果要么有属性,要么没有-它可能对您很好)。无论如何,即使在筛选时手动选择节点,也会比按筛选器发送请求更快。另外,现在您可以缓存单个数据库查询,如果需要运行复杂的查询,可能会为您节省大量开销。
全场发球!
发布于 2010-09-14 23:46:59
您可以重写ajax请求,这样它就可以返回它们的it而不是返回属性列表吗?这会减少LEFT JOIN的数量吗?
然后,您可以循环这些ids,调用另一个ajax请求来获取以前筛选中尚未缓存的属性。
https://stackoverflow.com/questions/3713680
复制相似问题