代码之家  ›  专栏  ›  技术社区  ›  baudtack

为一个网站设计带有多个搜索插件的Ajax驱动的Quicksilver风格搜索

  •  1
  • baudtack  · 技术社区  · 15 年前

    我正在尝试建立一个 Quicksilver 我们在工作中开发的内部Web应用程序的样式搜索系统。有很多使用jquery或mootools或其他工具的非常酷的前端的例子。这些例子都没有真正提到后端。据我所知,这些示例假定后端正在搜索单个表,或者至少执行单个查询。我要做的是设计一个系统,在那里你可以,字面上,键入任何东西,并找到你正在寻找的东西。Idealy,我想能够为这个系统编写插件,把它们放进去,然后开始搜索。

    我有一个解决方案,在这个解决方案中,后端使用观察者模式为每种搜索类型将查询发送到不同的插件。但是,这会将所有插件的结果作为一个块返回。如果有很多种搜索,这可能会变得明显缓慢。我希望它能快速返回结果,并以一种更异步的方式返回结果,结果会在它们进入时显示出来,这是LA OS X的聚光灯或Quicksilver。

    另一种解决方案是动态地编写一个带有要使用的插件名称的javascript数组。然后,我可以用这个查询分别启动对服务器的调用,每个插件一个。关于这个解决方案的一些内容…给我。不过,我不能准确地把手指放在上面。

    所以,我的问题是:对于构建一个基于插件的搜索系统,有人有更好的解决方案吗?在加载页面和尽快返回结果之前,不知道各个搜索类型。

    3 回复  |  直到 15 年前
        1
  •  1
  •   manumoomoo    15 年前

    另一种解决方案是动态地编写一个带有要使用的插件名称的javascript数组。然后,我可以用这个查询分别启动对服务器的调用,每个插件一个。关于这个解决方案的一些内容…给我。不过,我不能准确地把手指放在上面。

    这似乎不是一个糟糕的选择。它给你所需要的一切。

    1. 您需要尽快返回搜索结果。
    2. 我相信它允许你使用你现有的插件架构。
    3. 它遵循 KISS 原理。

    这不是一个新的解决方案,但我认为这是最简单的。

    当做。

        2
  •  1
  •   Jeff Beck    15 年前

    你可以做一个 Comet style 在Ajax中使用长轮询来获取搜索结果的解决方案。为脚本提供一个调用位置,以便在所有插件进入时返回结果。此方法允许您更快地显示快速结果。

    拥有一系列插件是一种选择,但有些浏览器一次只能有两个请求,这样会限制刚启动的请求量,并可能导致快速进程必须等待缓慢的进程。

    听起来你和后端越来越接近了,你只需要让后端在数据进入时提供数据就行了。此外,这将允许您在不影响JS的情况下即时添加和删除插件,因此无需担心缓存的数组列表。

    评论的最后几点想法。构建一个工作队列,以便将搜索请求传递给许多工作人员。可以在数据库中或通过Web服务实现工作队列,这样您就可以使用其他语言甚至计算机来完成每次搜索的工作。工作调用将需要一些ID来传递回,以将数据定向到正确的客户机。此外,您还需要一种从队列中删除作业的方法,或者如果客户机不在,至少将客户机的所有工作标记为空。(如果使用长轮询,您应该能够检测到这一点。)

    连接限制

    HTTP14的IE7

    HTTP1.1 2的IE7

    HTTP16的IE8

    HTTP1.1 6的IE8

        3
  •  1
  •   Jeff Beck    15 年前

    从所有的评论和谈话中,你似乎想在前端构建它。

    不要构建一个插件数组来调用它,这会迫使你在更换插件时担心缓存,而应该做的是构建一个引导系统。这将是一个简单的Ajax调用,它有一个插件列表,其中包含要调用的URL。这将允许您从一个中心位置打开和关闭插件,它将工作得更好。

    你必须把每个插件都放到一个Web服务中,而不是一个插件中,这样每个插件都可以独立调用。确保使用MediaSalve link 关于连接的数量,因为如果不绕过它,浏览器会限制连接的数量。