Vale. Lo reconozco. No se me ha ocurrido otro título más estúpido. Pero, verás que algo tiene que ver con lo que comentaré a continuación. Investigando sobre cómo implementar una determinada característica en Gesbit (básicamente, cómo pueden añadir los plugins nuevos directorios a tener en cuenta en la función "autoload" para clases en Gesbit), digo, me he encontrado con el orden en que se cargaban las clases, al menos las de una instalación "limpia" de Gesbit.
Este orden distaba ya mucho de ser aleatorio, es decir, me estoy refiriendo al orden en que se cargan las clases "principales" de Gesbit, y algunas otras auxiliares, que, puede verse en el archivo "gb-globals.php" y, como digo, sobre el que ya había dado más de una y dos vueltas. Sin embargo, hoy he querido fijarme en dicho orden de nuevo, principalmente, por la clase "GbCache", que, como sabes, también me ha preocupado y aun me preocupa. Pues bien, este era el mencionado orden:
Timer Input I18n CachedFileReader StringReader GettextReader GbCache
No nos fijaremos sino en las siete primeras clases (hay algunas más) para quedarnos en la clase "GbCache", precisamente. Ahora bien, lo que más me llamó la atención fue la necesidad de la clase "I18n", porque, esta a su vez requiere las tres siguientes en la lista, así que me puse a ver para qué usaba esa clase en "GbCache".
En realidad ya lo sabía: la usaba para traducir ciertas cadenas de texto que se usan en la clase "GbCache" en dos circunstancias: para mostrar una especie de mensaje "estadístico" en el pie de cada página servida desde el caché, y, para el mensaje de error que muestra Gesbit si se especifica un directorio para el caché, pero, este resulta inválido.
Ahora bien, ¿era realmente necesario traducir dichas cadenas? Según lo he visto ahora no, no lo era. El error no se mostrará "casi nunca", y, desde luego, está destinado a no mostrarse. Por otro lado, los errores "de requisitos" en Gesbit tampoco se muestran traducidos, sino en el inglés "original", y es que entonces no está siquiera disponible la clase "I18n".
Así pues, quedaba el mensaje que añade información en el pie de las páginas enviadas desde el caché. Este mensaje, hay que decirlo, es una "vacilada". Quiero decir, lo que viene a decir es, "Esta página requirió pocas consultas SQL para su creación, pero, con el caché no requirió ninguna en absoluto". Vale. Me gusta. Es verdad. Está bien. ¿Pero merece la pena traducirse?
Teniendo en cuenta que la "vacilada" significa tener que cargar cuatro clases antes que la clase "GbCache", desde luego, no parece que sea necesaria su traducción. Por lo demás, no es complicado de entender, en mi opinión. Sea como fuera, no hablamos sólo de las cuatro clases necesarias para traducir esa "vacilada", sino que hablamos de cargar el archivo de lenguaje de marras, o sea de unos 50 KB cada vez.
Visto lo visto, no me ha quedado más remedio: he decidido prescindir de la clase "I18n" en la clase "GbCache", de modo que el orden de carga se altera de este modo:
Timer Input GbCache
Como ves nos quedamos ahora en las primeras tres clases, puesto que con eso llegamos a la que nos interesa: "GbCache". En este punto me acordé de que la clase "Timer" realizaba una tarea "obsoleta", por decirlo así. Y claro, ya puestos, tenía que ponerme con ello. Se trata de que la clase "Timer" se usa para la vacilada comentada arriba, y en otros lugares, pero, sea como sea, para calcular el tiempo que lleva la respuesta al usario.
Para esto la clase "Timer" se instanciaba en primer lugar, precisamente, para "recoger" el tiempo de "inicio de Gesbit", de modo que después pudiera calcularse el "tiempo final", y así calcular el tiempo de la respuesta al usuario. Ahora bien, la clase "Timer" tenía sentido antes de PHP 5, puesto que, desde esta versión de PHP contamos con la variable "REQUEST_TIME" en el array super global "$_SERVER".
Dicha variable, precisamente, especifica el tiempo de inicio de la respuesta al usuario, y a partir de ella podemos después calcular cuánto tardamos en responder al usuario en total. Así que para quitar la clase "Timer" del medio ha bastado un nuevo método público en la clase "Input", "RequestTime", que proporciona la información que al cabo se perseguía con la clase "Timer".
Total, que el orden de carga de las clases en Gesbit queda tal que: "Input", "GbCache", siendo necesaria sólo una clase hasta llegar a la clase "GbCache" y que esta se ponga en marcha. Recuérdese que hablo de clases, pero, en realidad me estoy refiriendo a variables globales. En el archivo "gb-globals.php" se inicializan las principales de Gesbit, y ahora el orden queda como se ha dicho.
Input GbCache
Luego de la clase "Input" (que realmente necesita, a no ser que le demos acaso demasiadas vueltas al asunto) la clase "GbCache" se pone en marcha, lo que quiere decir que en caso de contar con contenido en el caché, el mismo será enviado en ese punto al usuario. Algo hemos ganado, pues, con estos cambios, aunque me temo que hablemos de pocos milisegundos. Pero tal vez algos más. ¿No te parece?