从Plone搜索结果中提高大型表的性能

时间:2015-06-03 14:43:15

标签: performance datatables plone zope

Zope处理大型搜索结果的传统方式是批处理输出:显示第一个 batchsize 项目,为了获得下一个数据块,您可以单击“下一个”链接获取来自服务器的下一个块。

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

那么,如何解决这个问题呢?

  • 从JSON生成整个表? (需要Javascript才能工作)
  • 如果Javascript可用,请使用标准分页,并将其替换为客户端表解决方案?
    • 通过JSON
    • 提供第2页的数据
    • 通过JSON提供所有数据
    • 让表格引擎加载下一页的内容或过滤
  • 是否有一些插件解决方案可以将此类增强功能应用于标准视图(例如文件夹内容)?

我有一个页面,其中包含大约1600个项目并需要60s +才能加载,这当然需要改进......

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

1 个答案:

答案 0 :(得分: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数据。

如果您有兴趣,可以调查的事项: