Accediendo a Big Arrays en PHP

He estado haciendo algunos perfiles de diferentes métodos para acceder a grandes (ish) arreglos de datos en PHP. El caso de uso es bastante simple: algunas de nuestras herramientas generan datos en archivos PHP como matrices asociativas y la aplicación considera estos archivos como datos estáticos. Hacemos juegos, por lo que algunos ejemplos de archivos de datos incluirían elementos en un catálogo, tareas que un usuario debe completar o definiciones para mapas:

<?php
$some_data = array(
    ...lots and lots of stuff in here...
);
?>

Dado que estas matrices son grandes (400K), y gran parte de nuestro código está interesado en estos datos, es necesario acceder a estos datos de la manera más eficiente posible. Me decidí a sincronizar 3 patrones diferentes para hacer esto. Después de presentar los métodos compartiré mis resultados a continuación.

Lo que estoy buscando es una validación basada en la experiencia de estos métodos y su sincronización, así como cualquier otro método para probar.

Método # 1: función getter

En el método, el exportador en realidad crea un archivo que se ve así:

<?php
function getSomeData()
{
    $some_data = array(
        ...lots and lots of stuff here...
    );
    return $some_data;
}
?>

El código del cliente puede obtener los datos simplemente llamando a getSomeData () cuando lo deseen.

Método # 2: global + include

En este método, el archivo de datos parece idéntico al bloque de código original anterior, sin embargo, el código del cliente debe saltar a través de unos pocos aros para obtener los datos en un ámbito local. Esto supone que la matriz está en un archivo llamado 'some_data.php';

global $some_data; //must be the same name as the variable in the data file...
include 'some_data.php';

Esto traerá la matriz $ some_data al alcance, aunque es un poco incómodo para el código del cliente (mi opinión).

Método # 3: getter por referencia

Este método es casi idéntico al Método # 1, sin embargo, la función getter no devuelve un valor, sino que establece una referencia a los datos.

<?php
function getSomeDataByRef($some_data)
{
    $some_data = array(
        ...lots and lots of stuff here...
    );
    return $some_data;
}
?>

El código del cliente luego recupera los datos declarando una variable local (llamada cualquier cosa) y pasándola por referencia al captador:

$some_data_anyname = array();
getSomeDataByRef(&$some_data_anyname);
Resultados

Así que ejecuté un pequeño script que ejecuta cada uno de estos métodos de recuperación de datos 1000 veces y promedia el tiempo de ejecución (calculado por microtime (verdadero) al principio y al final). Los siguientes son mis resultados (en ms, ejecutándose en un MacBookPro de 2 GHz, 8GB de RAM, PHP versión 5.3.4):

MÉTODO 1:

AVG: 0.0031637034416199 MAX: 0.0043289661407471 MIN: 0.0025908946990967

MÉTODO # 2:

AVG: 0.01434082698822 MAX: 0.018275022506714 MIN: 0.012722969055176

MÉTODO # 3:

AVG: 0.00335768699646 MAX: 0.0043489933013916 MIN: 0.0029017925262451

Parece bastante claro, a partir de estos datos, que el método global + include es inferior a los otros dos, que son una diferencia "despreciable".

¿Pensamientos? ¿Estoy perdiendo algo por completo? (probablemente...)

¡Gracias por adelantado!