Estoy lidiando con una aplicación web que usa un sistema de creación de plantillas propio que permite que el código Perl se incruste en HTML. Estas declaraciones las ejecuta el analizador de plantillas en tiempo de ejecución usando eval EXPR
.¿Una alternativa más rápida a eval?
Esto es muy flexible, pero estas declaraciones están dispersas en todas partes, y se ejecuta un lote. eval EXPR
(a diferencia de eval BLOCK
) requiere Perl para encender el intérprete cada vez, y mi perfil revela que son una fuente razonablemente importante de desaceleración.
Muchas de las sentencias Perl incrustadas son muy simples. Por ejemplo, una plantilla podría tener una línea como esta:
<p>Welcome, <!--E: $user->query('name') -->.
O:
<p>Ticket number <!--E: $user->generate_ticket_number() --> has been generated.
Es decir, sólo están llamando a métodos de objeto. Aunque hay otros más complicados también.
Espero optimizar esto, y hasta ahora tengo dos ideas, ambas son terribles. El primero es reescribir todas las plantillas para reemplazar las llamadas simples con tokens como USER:NAME
y USER:GENERATETICKETNUMBER
, que el analizador podría entonces buscar e invocar el método de objeto apropiado. Pero luego, en lugar de lidiar con plantillas que combinan HTML y Perl, tendría plantillas que combinan HTML, Perl y tokens.
La segunda idea es intentar analizar el Perl incrustado, descubrir qué quiere hacer la afirmación y, si es lo suficientemente simple, llamar al método de objeto apropiado mediante una referencia simbólica. Esto es obviamente una locura.
¿Hay alguna solución lógica que tenga en cuenta?
+1 para "Esto es obviamente una locura". –