¿Deseas transferir mod_pagespeed a otro servidor o integrarlo en otro sistema? Perfecto. Desarrollamos mod_pagespeed para que sea modular y casi completamente independiente de Apache. El único código específico de Apache se encuentra en el directorio net/instaweb/apache.
Si buscas en nuestra fuente, nuestro código principal se encuentra en net/instaweb/:
- util/ y http/ tienen muchas de nuestras herramientas básicas, incluidas las clases base abstractas como
MessageHandler,TimeryUrlFetcher. Hay algunos ejemplos de implementaciones, pero tendrás que hacer tus propias implementaciones de muchas. - htmlparse/ tiene el analizador de HTML principal. No deberías tener que lidiar con eso.
- rewriter/ tiene los filtros y el marco de trabajo de reescritura. El punto de integración central es la clase parcialmente abstracta aquí,
RewriteDriverFactory. Tu esfuerzo de integración comenzará con la subclasificación y la implementación de sus métodos virtuales puros.
Es probable que debas implementar un puerto para las siguientes clases (consulta las implementaciones de ejemplo en el directorio apache/):
- MessageHandler: Manejo de errores (consulta los ejemplos FileMessageHandler y ApacheMessageHandler)
- FileSystem (consulta los ejemplos StdioFileSystem y AprFileSystem)
- AbstractCondvar (consulta los ejemplos PthreadCondvar y AprCondvar)
- AbstractMutex (consulta los ejemplos PthreadMutex y AprMutex)
- Estadísticas: realice un seguimiento de diversas estadísticas globales (consulte los ejemplos SimpleStats y AprStatistics).
- Cronómetro (Ver ejemplo MockTimer y AprTimer)
- UrlFetcher: buscador de recursos por URL (consulta los ejemplos WgetUrlFetcher y SyncFetcherAdapter)
- UrlAsyncFetcher: Igual, pero con una interfaz de devolución de llamada (consulta los ejemplos WgetUrlAsyncFetcher y SerfUrlAsyncFetcher; este último admite un modelo de evento asíncrono creado sobre UrlPollableAsyncFetcher)
- RewriteDriverFactory: administra todas las opciones y clases específicas de una implementación (consulta el ejemplo ApacheRewriteDriverFactory).
Luego, a fin de invocar el código, deberás crear un FooRewriteDriverFactory para crear todos los objetos y, luego, StartParseWithType(url, content_type), ParseText(text) entre cada limpieza del servidor y FinishParse() para cada solicitud.
Comunícate con nosotros a través de nuestra lista de distribución para el desarrollo si estás investigando sobre este asunto o si tienes algún problema. No garantizamos que las interfaces internas se mantengan iguales, por lo que podríamos dañar fácilmente tu puerto si no sabemos que las estás usando.