跳转到主要内容

加快Plone中getObjPositionInParent索引的速度

项目描述

Plone的 getObjPositionInParent 目录索引针对快速写入和排序 的结果集进行了优化,这些结果集无论如何都会在请求中加载。实际的顺序根本不会存储在目录中,而只存储在父对象上。这意味着排序结果集只能通过加载父对象并从中获取对象位置来实现。

这对于Plone的标准用例(如导航小部件或门户选项卡)效果很好,但进行大量查询且深度较大时非常慢,因为必须唤醒所有容器对象。

此包的目标是用一个实际索引替换 getObjPositionInParent,该索引将顺序存储在目录中的常规 FieldIndex 中。

兼容性

Plone 4.3.x Plone 5.1.x

安装

  • 将包添加到您的buildout配置

[instance]
eggs +=
    ...
    ftw.gopip
  • 安装通用的设置配置文件 ftw.gopip:default

实现

此包用 FieldIndex 替换了 GopipIndex,这是一个假索引,不存储任何数据。

挑战是保持索引的准确更新。这是通过定制标准的 IOrdering 适配器并在其中跟踪更改来实现的,这样我们就不需要依赖其他组件在正确的时间触发事件。

三个标准的 IOrdering 适配器都通过跟踪代理包装

  • DefaultOrdering(提供 IExplicitOrdering

  • PartialOrdering(提供 IExplicitOrdering

  • UnorderedOrdering(提供 IOrdering

如果存在自定义的 IOrderingIExplicitOrdering 适配器,它们必须相应地进行跟踪。

Plone 网站根目录没有 IOrdering 适配器。一个 IReorderedEvent-订阅者负责跟踪第一级重排序。

开发

  1. 从该仓库分叉

  2. 克隆你的分叉

  3. Shell: ln -s development.cfg buildout.cfg

  4. Shell: python boostrap.py

  5. Shell: bin/buildout

  6. Shell: bin/test 以测试你的更改。

或者运行 bin/instance fg 来启动一个实例。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

ftw.gopip-1.1.0.tar.gz (8.8 kB 查看哈希)

上传时间

由以下支持