Zope处理大型搜索结果的传统方式是批处理输出:显示第一个 batchsize 项目,为了获得下一个数据块,您可以单击“下一个”链接获取来自服务器的下一个块。
现在有很酷的Javascript解决方案允许客户端排序和过滤表格,例如Datatables
。这些工作很好;但是如果表很大,并且Zope生成完整的HTML,有时需要很长时间才能加载页面(看起来搜索速度相当快,但TAL引擎是性能瓶颈)。
那么,如何解决这个问题呢?
我有一个页面,其中包含大约1600个项目并需要60s +才能加载,这当然需要改进......
任何指针和/或代码段?谢谢!
答案 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数据。
如果您有兴趣,可以调查的事项: