我正在尝试设计一个页面,使其工作速度最快,同时也尽量避免重复。
基本上,我要加载3组用户的联系人。业务联系人,个人联系人和特殊联系人,可以是商业/个人的混合体。所以本质上我会做这3个查询:
SELECT stuff FROM contacts WHERE userId = '$userId' AND type = 'business'
SELECT stuff FROM contacts WHERE userId = '$userId' AND type = 'personal'
SELECT stuff FROM contacts WHERE userId = '$userId' and isSpecial = 1
javascript将使用这些联系人填充页面上的某些<div>s
,并用于搜索页面上的联系人。
仅加载业务和个人联系人更有意义,然后通过javascript循环访问它们并使用javascript构建第3个特殊联系人列表,基本上isSpecial
设置为1?
或者使用MySQL查询单独获取3套并将其传递给javascript作为3个单独的套装会更好吗?
或者我应该只从userId = '$currentUser'
获得一组来自MySQL的联系人,并在页面加载时通过javascript将它们分类为单独的列表? (无论如何,我将遍历页面上的所有联系人以填充他们各自的<div>
,也许我还可以在循环浏览时将它们分成3个单独的列表?)
或者其他方法是否最好?
我担心的是尽可能快地为用户提供一切,同时最大限度地减少数据库服务器的压力。
答案 0 :(得分:1)
只执行一个查询,在该查询中加载“business”和“personal”,然后找到“isSpecial”。 (这假设没有其他类型需要担心。)
答案 1 :(得分:1)
你不能这样做:
SELECT stuff FROM contacts WHERE userId ='$ userId'AND type ='business'OR type ='personal'OR isSpecial = 1
然后你只有一次调用数据库。
您还可以将SELECT内容更改为仅选择所需的字段。此外,更改您的SQL查询以使数据库根据需要对联系人进行排序。
更新 好吧,只是一个想法,在页面加载时你首先选择SELECT,例如20个联系人(最多)然后运行javascript来显示它们或者其他什么,然后当你收到页面已经完全加载的事件时,你就会为剩余的行做SELECT语句(如果有的话。
答案 2 :(得分:1)
IMO最好是使用MySQL本身单独获取联系人,因为MySQL相对较快。另外,如果在用户浏览器中关闭了javascript,或者如果他使用的是移动浏览器,那么您将无法隔离联系人。
修改强>
正如您所指出的,javascript是您网站的最低要求,那么最好的方法是使用单个查询来获取数据并使用js进行隔离。