我在做一个 php,多路API混合搜索的项目。在主页上有一个搜索框,用户提交搜索关键字后,我用jquery ajax提交搜索关键字到5个外部页面,进行5个不同API的搜索,5个API搜索的结果同时写进一个外部缓存文件,进行混合显示和分页使用。然后主页载入缓存文件显示搜索结果。我想询问:这样的方法是否好?本地测试时,感觉PF值略高了点。请教高手,是否有更好的方法,可以达到这一效果?主要关注的是:服务器资源消耗少,用户从搜索到返回结果的时间短。谢谢大家的建议。

解决方案 »

  1.   

    我现在就是用ajax分5次提交到外部页面,分析完再载入回主页面。PF值挺高的。
     
    se_marui_blog,能不能再详细点?谢谢。
      

  2.   

    5个API搜索的结果同时写进一个外部缓存文件如果你不需要把结果保存供下次使用,可以不写的。
    如果需要,可以考虑一下使用 memcache 来缓存。
    或者把结果都写进数据库,这样可以避免每次都去执行 5个api搜索。还有,你的 5个api搜索,是本地搜索?还是站外的搜索??
      

  3.   

    每次都写数据库。不是增加数据量连接数吗?
    缓存进memcache,浪费内存量。
    5个api搜索,都是站外搜索。
      

  4.   

    首先,不是每次都写,比如你搜索 aaa ,数据库里没有保存,就插入aaa及其结果,下次搜索时先搜索是否有aaa的记录,有就提取结果。(这里前提就是数据库操作要比api搜索要快)缓存进memcache,浪费内存量。当然会浪费,基于你服务器够强大而言才能实现
      

  5.   

    可不可以考虑这样一种方案:5 个请求发送到服务器后,各自的结果都返回给客户端,在浏览器端实现混合。缺点:1. 增加传输量;
    2. 增加客户端计算量;
    3. 混合算法需要重新设计;
    4. ...优点:1. 客户端可以有更及时的反应(第一个 API 有返回结果后就可以看到一点显示效果了)
    2. 服务端算法简单;
    3. 服务端额外开销很小(只需考虑对站外搜索结果的缓存)
    4. ...
      

  6.   

    补充一点:因为你的 5 个 API 都是站外搜索,那就是说对外部服务器的可靠性有比较强的依赖。在服务器端做搜索结果的混合,如果某一个外部服务器响应慢,将拖累整个客户端体验。如果是在客户端做混合的话,就会好很多,甚至某个外部服务器卡死了,对客户端体验的影响也不大(这就是我上面说的优点中的第一条)。
      

  7.   

    所以我觉得有必要将结果缓存到本地, file/db/memcache ...