Příliš závislostí v composeru + optimize_autoloading zabije aplikaci

noximo
Člen | 4
+
0
-

Ahoj,

narazil jsem na problém s composerem, závislostmi a Nette Application. Popravdě si tedy nemyslím, že je to vyloženě problém v Nette, spíš na úrovni PHP, ale jelikož se projevuje v balíčku Nette Application, tak to píšu sem.

O co jde?
Aplikace s větším množstvím závislostí v composeru přestane fungovat bez jakékoliv chybové hlášky při zapnutí optimize-autoloader v composeru.

Chybu se mi podařilo reprodukovat na dvou počítačích s použitím následujících kroků:

  1. Vytvořím si nette sandbox pomocí
composer create-project nette/sandbox
  1. Updatuji composer.json, sekci config aby vypadala následovně:
"config": {
  "optimize-autoloader": true
}
  1. Provedu composer update. Nyní stále vše funguje v pohodě, uvítací stránka se načte.
  2. Přidám do závislostí „symplify/easy-coding-standard“: „5.2.*“ (Na kokrétním balíčku nezáleží, tento má ale spoustu závislostí, rychle tak nabobtná vendor/composer/autoload_classmap.php)
  3. Stránka se nyní nenačte, php nevyhodí žádnou chybu, v prohlížeči je ERR_CONNECTION_RESET

Problém jsem vysledoval sem: https://github.com/…xtension.php#L146

Když z autoload_classmap.php odmažu dostatek řádků tak, aby pole vracelo max cca 1600 položek (přesné číslo se mi nepodařilo určit a předpokládám, že bude záležet na délce jednotlivých záznamů, ne jen na jejich počtu), tak se aplikace opět rozjede. Problém tak asi nezpůsobuje přímo zapnuté optimize-autoloader samo o sobě, to jen vyústí v menší velikost souboru.

Zkoušel jsem dohledat, jestli PHP neomezuje velikost pole nebo velikost navrácených dat při require, ale nedaří se mi nic najít. Velikost přidělené paměti taky nevypadá, že by měla na problém vliv.

Nenapadá někoho, kde hledat problém?