Versions/18.0#182
Merged
Merged
Conversation
Pulls in GatoGraphQL 57a82efdb7 — replaces an `array_merge` + `array_unique` accumulator pair with a `<id,true>` set built via `array_flip` and append-in-place. Saves two O(N) allocations per iteration of the per-subcomponent-type-resolver outer loop in the structural memory hotspot `processSubcomponentData`.
…ties Pulls in GatoGraphQL 28bee9407f — replaces four `array_merge` accumulator sites inside `flattenRelationalDBObjectDataProperties` with read-existing → foreach-append → write-back. The function is 73 MB / 22K calls / 3.3 KB per call on cachegrind.out.5667.
…taProperties" This reverts commit 9364ebe.
Pulls in GatoGraphQL — replaces an `array_map` + closure call in a 3-level nested foreach with an explicit `foreach` to avoid per-inner-iter closure-context + result-array allocations in `processSubcomponentData`.
…nents Pulls in GatoGraphQL — replaces a quadratic `array_merge`-in-loop accumulator with collect-into-list + single variadic `array_merge(...$subResults)` in `executeOnSelfAndPropagateToComponents` (88K calls / 833 bytes each on cachegrind.out.5675).
Pulls in GatoGraphQL — promotes `addToDatasetOutputKeysWithPrefix` to public on `AbstractComponentProcessor` and adds it to `ComponentProcessorInterface`, fixing 3 phpstan `method.notFound` errors at the recursive call sites.
Consume less memory
Pulls in GatoGraphQL stages 1-3 of the structural refactor of `processSubcomponentData`: Stage 1 - flat entries list: replace the 3-level nested `$subcomponentIDs[$dbName][$typeOutputKey][$id]` scratch structure with a flat list of tuples, fold the unique-IDs collection into the same single pass, and drop the redundant per-entry `databases[]->contains() && is_array()` re-check. Stage 2 - batch combineIDsDatafields: group `$field_ids` by whether they need filtering. IDs with no `already_loaded` data share the shared direct/conditional fields and dispatch via one batched `combineIDsDatafields` call (replacing N individual calls). IDs with already-loaded data keep individual filtered calls. Also replaces the per-ID `array_filter` + closure with an explicit foreach. Stage 3 - fast-paths: skip the type-qualification call and empty intermediate allocations when `$entries === []`; skip the per-ID foreach when `$subcomponent_already_loaded_id_fields` is empty (the common case — every ID goes to the batched call directly). `processSubcomponentData` is the structural memory hotspot of a request: 8.9 GB / 198 calls / 45 MB per call on the latest AI-translation profile.
…Data submodule ref: refactor processSubcomponentData (3 stages)
Fix several small bugs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
GatoGraphQL/GatoGraphQL#3312