PHPackages                             namelesscoder/asynchronous-reference-indexing - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. namelesscoder/asynchronous-reference-indexing

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

namelesscoder/asynchronous-reference-indexing
=============================================

2.1.0(7y ago)329.5k6[2 issues](https://github.com/NamelessCoder/asynchronous_reference_indexing/issues)[1 PRs](https://github.com/NamelessCoder/asynchronous_reference_indexing/pulls)GPL-2.0-or-laterPHP

Since Dec 4Pushed 6y ago1 watchersCompare

[ Source](https://github.com/NamelessCoder/asynchronous_reference_indexing)[ Packagist](https://packagist.org/packages/namelesscoder/asynchronous-reference-indexing)[ RSS](/packages/namelesscoder-asynchronous-reference-indexing/feed)WikiDiscussions master Synced 2d ago

READMEChangelogDependencies (1)Versions (10)Used By (0)

Asynchronous Reference Indexing for TYPO3
=========================================

[](#asynchronous-reference-indexing-for-typo3)

> Delegates reference index updating to an asynchronous queue, processed by CLI / scheduler

What does it do?
----------------

[](#what-does-it-do)

Provides a couple of things:

- An override class for DataHandler which replaces a single method, `updateRefIndex`, causing on-the-fly indexing to be skipped, instead delegating to a queue.
- A similar override for the ReferenceIndex class which replaces methods called also outside of DataHandler, to catch those cases.
- An SQL table storing queued reference index updates.
- A CommandController which can be executed via CLI to process queued reference indexing without running into timeout or long wait issues.
- Provides option to exclude tables from reference indexing (only on TYPO3 8.6+). See extension configuration.

Depending on how often your editors perform record imports, copies, deletions etc. this can over time save many, many hours of waiting for the TYPO3 backend to respond.

For further information about the performance aspects see the "Background" section below.

Installing
----------

[](#installing)

Only available through Packagist (or via GitHub). Installation via Composer is recommended:

```
composer require namelesscoder/asynchronous-reference-indexing

```

Then enable the extension in TYPO3. This can be done with a CLI command:

```
TYPO3_PATH_ROOT=$PWD/web vendor/bin/typo3 extensionmanager:extension:install asynchronous_reference_indexing

```

Word of warning
---------------

[](#word-of-warning)

Failing to update the reference index can have negative effects on your site in some cases, both in frontend and backend. You are advised to add a scheduler task or cronjob for the included command controller *and set the frequency to a very low value such as once every minute*. The controller maintains a lock file and prevents parallel executions, so frequent runs are safe.

Note that this extension consistently captures all of the current reference indexing, including that which you can trigger using the existing (non-Extbase) CLI command or via the "DB check" backend module which is added when you install the `lowlevel` system extension. Using either of these methods to force reference index updating will instead fill the queue for the command controller included with *this* extension so that all existing records which have relations will be processed on the next run.

Possible side effects
---------------------

[](#possible-side-effects)

Delaying update of the reference index has one main side effect: if the editor tries to delete a record whose relations have not been indexed, an appropriate warning may not be shown.

Secondary side effect is in listing of relationships between records. Such information will be updated only when the command controller runs.

Frontend rendering should not be affected negatively.

Usage
-----

[](#usage)

To re-index a site from scratch you would normally execute the following command, if you have a lot of garbage in the sys\_refindex table you might wan't to truncate it before:

```
TYPO3_PATH_ROOT=$PWD/web vendor/bin/typo3cms asyncreferenceindex:update --force 1

```

Afterwards you can update the sys\_refindex by executing the command:

```
TYPO3_PATH_ROOT=$PWD/web vendor/bin/typo3cms asyncreferenceindex:update

```

Alternatively you can setup a Scheduler Task to execute the command at a certain interval.

Background
----------

[](#background)

This community extension exists for one reason alone: *increasing responsiveness of the TYPO3 backend when performing record operations*. Due to the internal structure of the ReferenceIndex class in TYPO3, any record operation which might potentially change references causes an extreme amount of SQL traffic.

At the time of writing this (2016-12-04) the problem can be illustrated as follows:

- Assume you use `sys_category` relations for 10,000 different records (from any table to one `sys_category`)
- Updating, importing, deleting or copying any record pointing to this `sys_category` triggers index update
- Index update itself cascades to process *all 10,000 `sys_category` records for every record you edited*
- Depending on the number of records you edited this may cause hundreds of thousands of SQL requests

A significant effort has already been made to improve the reference indexing performance, however, all improvements are inevitably minor without a complete rewrite of the entire reference indexing logic. Again, at the time of writing this, the ReferenceIndex and RelationHandler classes are mutually dependent and will recursively call each other, thus further compounding the performance problem described above. Since these technical challenges are very hard to overcome, this extension is presented as a temporary solution to increase responsiveness of record operations in TYPO3 by upwards of 90% reduction in wall time.

You read that right. **90%** - nine-zero percent.

Credit
------

[](#credit)

This work and all preceding investigation was sponsored by [Systime](https://systime.dk/). Systime is a Danish online publishing firm specialising in "i-books" for the educational market, and they faced severe problems with reference indexing in particular.

References
----------

[](#references)

-
-

(performance profiles not linked as they are not permanently online)

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance7

Infrequent updates — may be unmaintained

Popularity27

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 56.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~108 days

Recently: every ~216 days

Total

9

Last Release

2627d ago

Major Versions

1.2.0 → 2.0.02018-01-27

### Community

Maintainers

![](https://www.gravatar.com/avatar/f5c01fb202269a6d9ba372c482874512d0246da99934592cdba1869a1776c4c1?d=identicon)[NamelessCoder](/maintainers/NamelessCoder)

---

Top Contributors

[![NamelessCoder](https://avatars.githubusercontent.com/u/2228052?v=4)](https://github.com/NamelessCoder "NamelessCoder (13 commits)")[![thomashohn](https://avatars.githubusercontent.com/u/3414869?v=4)](https://github.com/thomashohn "thomashohn (8 commits)")[![cvisys](https://avatars.githubusercontent.com/u/8544669?v=4)](https://github.com/cvisys "cvisys (1 commits)")[![franzkugelmann](https://avatars.githubusercontent.com/u/11320147?v=4)](https://github.com/franzkugelmann "franzkugelmann (1 commits)")

---

Tags

deferredindexingperformancereferencetypo3

### Embed Badge

![Health badge](/badges/namelesscoder-asynchronous-reference-indexing/health.svg)

```
[![Health](https://phpackages.com/badges/namelesscoder-asynchronous-reference-indexing/health.svg)](https://phpackages.com/packages/namelesscoder-asynchronous-reference-indexing)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k51](/packages/friendsoftypo3-content-blocks)[b13/container

Container Content Elements - Create Custom Container Content Elements for TYPO3

1833.4M107](/packages/b13-container)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

40529.5k](/packages/wazum-sluggi)[fluidtypo3/flux

The flux package from FluidTYPO3

1501.0M24](/packages/fluidtypo3-flux)[typo3/cms-redirects

TYPO3 CMS Redirects - Create manual redirects, list existing redirects and automatically createredirects on slug changes.

167.4M77](/packages/typo3-cms-redirects)[yoast-seo-for-typo3/yoast_seo

Yoast SEO for TYPO3

511.7M9](/packages/yoast-seo-for-typo3-yoast-seo)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
