2015-06-03 20 views
2

Zope处理大搜索结果的传统方式是批量输出:第一个的批量大小项目被显示出来,为了获得下一个数据块,你点击一个“next “链接从服务器获取下一个块。提高Plone搜索结果的大表性能

现在有很酷的Javascript解决方案,它允许客户端排序和过滤表, Datatables。这些工作正常;但是如果表格很大,并且Zope生成完整的HTML,那么在页面加载之前有时需要很长时间(似乎搜索速度相当快,但TAL引擎是性能瓶颈)。

那么,这是如何解决最好的?

  • 从JSON生成整个表? (需要Javascript才能正常工作)
  • 使用标准分页,如果有Javascript可用,请用客户端表格解决方案替换它?
    • 化JSON提供的网页2+数据
    • 通过JSON
    • 让下个页面或过滤
  • 表发动机负荷内容提供的所有数据是否有应用一些插件解决方案标准视图(如文件夹内容)的这些增强功能?

我有一个网页,其中包含约1600项,并采取60 +加载,这肯定需要改进......

任何指针和/或代码段?谢谢!

+1

这是一个非常开放式的问题,这是不是最好的计算器。 https://community.plone.org可能会更好,因为它允许进行对话。 – SteveM

+0

我不认为这是开放式的;许多Zope/Plone开发者可能会遇到这种情况。也许有人有一个优雅的解决方案我在Plone社区网站注册了,但我觉得那里没有可比的家(然而?)。当然,如果在堆栈交换中有更好的地方... – Tobias

+0

在这种情况下,请尝试高级搜索解决方案Solr或ElasticSearch。具体的插件示例是collective.solr和collective.elasticsearch。但是,我还没有使用它们,并且您的里程可能会有所不同。希望文档能够很快显现出来。参考:http://github.com/collective/collective.solr/issues/60 – marr

回答

2

您必须推出自己的自定义设置。 plone 5中的新文件夹内容仅适用于json数据;但是,它一次不会返回整个文件夹结果集 - 它仍然会分页服务器端。实际上,我没有遇到任何将客户端数千个结果进行排序的用例。我通常做那个服务器端并且带有ajax的数据。

你会想从目录结果(大脑)自己生成json数据结构。在某种意义上可能是这样的:

import json 
from Products.CMFCore.utils import getToolByName 

catalog = getToolByName(context, 'portal_catalog') 
query = { 
    'path': { 
    'query': '/'.join(context.getPhysicalPath()), 
    'depth': 1 
    } 
} 
result = [] 
for brain in catalog(**query): 
    result.append({ 
    'id': brain.id, 
    'uid': brain.UID, 
    'title': brain.Title, 
    'url': brain.getURL() 
    }) 
return json.dumps(result) 

随着JavaScript。有很多库在表格中呈现json数据。

的事情,如果你有兴趣,你可以调查:

+0

为什么有人想过滤和/或排序大表客户端?因为它很容易。你简化渲染整个桌子并把它扔在一个很酷的桌子上。将这种工具与服务器进行寻呼和过滤非常困难;并且在大多数情况下它足够快(加载页面后,它非常快,因为不需要网络通信)。 – Tobias

+0

所以Plone 5将使用JSON(因此需要Javascript),但保持传统的旧方式?!对于一个标准的解决方案,我希望能够在没有Javascript的情况下继续工作,但是当启用Javascript时,增加了便利功能(如客户端排序和过滤)... – Tobias

+0

为什么?大多数情况下,分页服务器端。我从来没有与默认情况下返回数千条记录的其余API交互。要求客户下载数千条记录时,他们可能只关心前20个记录对我来说似乎并不理想。仅仅因为你有一些用例并不意味着所有其他的用例都是错误的。正如你所看到的,提供你自己的json结构可以很容易地完成你想要的巨大结果集,所以我不确定为什么你被我所期望的“标准解决方案”所激怒。 – vangheem