是否要将 mod_pagespeed 移植到其他服务器或将其集成到其他系统中?太好了!我们已将 mod_pagespeed 开发为模块化并且几乎完全独立于 Apache。唯一的 Apache 专用代码位于 net/instaweb/apache 目录中。
如需查看我们的源代码,我们的主要代码位于 net/instaweb/ 中:
- util/ 和 http/ 包含许多基本工具,包括
MessageHandler、Timer和UrlFetcher等抽象基类。有一些实现示例,但您必须自行实现其中的许多实现。 - htmlparse/ 包含核心 HTML 解析器。您根本无需处理这个问题。
- rewriter/ 具有重写过滤器和框架。中央集成点是此处的部分抽象类,即
RewriteDriverFactory。首先,您需要进行子类化并实现其纯虚拟方法。
您可能需要为以下类实现端口(请参阅 Apache/ 目录中的实现示例):
- MessageHandler - 错误处理(请参阅示例 FileMessageHandler 和 ApacheMessageHandler)
- FileSystem(请参阅示例 StdioFileSystem 和 AprFileSystem)
- AbstractCondvar(请参阅 PthreadCondvar 和 AprCondvar 示例)
- AbstractMutex(请参阅 PthreadMutex 和 AprMutex 示例)
- 统计信息 - 跟踪各种全局统计信息(请参阅 SimpleStats 和 AprStats 示例)
- 计时器(请参阅示例 Mock 计时器和 Apr 计时器)
- UrlFetcher - 按网址提取资源(请参阅示例 WgetUrlFetcher 和 SyncFetcherAdapter)
- UrlAsyncFetcher - 相同,但包含回调接口(请参阅示例 WgetUrlAsyncFetcher 和 SerfUrlAsyncFetcher;后者支持基于 UrlPollableAsyncFetcher 构建的异步事件模型)
- RewriteDriverFactory - 管理实现的所有选项和类(请参阅示例 ApacheRewriteDriverFactory)
然后,要实际调用代码,您需要创建一个 FooRewriteDriverFactory 来创建您的所有对象,然后在服务器每次刷新之间执行 StartParseWithType(url, content_type)、ParseText(text) 和针对每个请求调用 FinishParse()。
如果您调查此问题或遇到任何问题,请写信给我们开发邮寄名单。我们无法保证任何内部接口都保持不变,因此,如果您不知道您的端口是否在被使用,就很容易对其进行破坏。