mod_pagespeed를 다른 서버로 포팅하시겠습니까? 아니면 다른 시스템에 통합하시겠습니까? 맞습니다! Google은 mod_pagespeed를 모듈식으로 개발하여 Apache와 거의 완전히 독립적으로 만들었습니다. Apache 관련 코드는 net/instaweb/apache 디렉터리에만 있습니다.
Google 소스의 기본 코드는 net/instaweb/입니다.
- util/ 및 http/에는
MessageHandler,Timer,UrlFetcher같은 기본 추상 클래스가 포함된 기본 도구가 많이 있습니다. 몇 가지 구현 예가 있지만 그중 다수를 자체 구현해야 합니다. - htmlparse/에는 핵심 HTML 파서가 있습니다. 이 문제를 처리할 필요가 전혀 없습니다.
- rewriter/에는 재작성 필터 및 프레임워크가 있습니다. 중앙 통합 지점은
RewriteDriverFactory의 부분 추상 클래스입니다. 통합 작업은 먼저 서브클래스를 분류하고 순수한 가상 메서드를 구현하는 것으로 시작됩니다.
다음 클래스에 대한 포트를 구현해야 할 수 있습니다 (apache/ 디렉터리의 구현 예 참고).
- MessageHandler - 오류 처리 (예: FileMessageHandler 및 ApacheMessageHandler 참조)
- FileSystem (예: StdioFileSystem 및 AprFileSystem)
- AbstractCondvar(PthreadCondvar 예 및 AprCondvar 참고)
- AbstractMUx(Pthreadmutex 및 Aprmutex 예 참고)
- 통계 - 다양한 글로벌 통계를 추적합니다 (SimpleStats 및 AprStatistics 예 참조).
- 타이머 (Mock타이머 및 Apr타이머 예 참고)
- UrlFetcher - URL별 리소스 가져오기 도구입니다 (예: WgetUrlFetcher 및 SyncFetcherAdapter 참고).
- UrlAsyncFetcher - 동일하지만 콜백 인터페이스가 있음 (예: WgetUrlAsyncFetcher 및 SerfUrlAsyncFetcher 참고). 후자는 UrlPollableAsyncFetcher를 기반으로 빌드된 비동기 이벤트 모델을 지원합니다.
- RewriteDriverFactory - 구현과 관련된 모든 옵션 및 클래스를 관리합니다 (ApacheRewriteDriverFactory 예시 참고).
그런 다음 실제로 코드를 호출하려면 FooRewriteDriverFactory을 만들어 모든 객체를 만든 다음 서버의 각 플러시 사이에 StartParseWithType(url, content_type), ParseText(text)를 생성하고 각 요청에 FinishParse()를 사용해야 합니다.
이 문제를 살펴보거나 문제가 있는 경우 개발 메일링 리스트에 이메일을 보내 주세요. 내부 인터페이스가 유지된다고 보장할 수는 없으므로 이러한 인터페이스 사용 여부를 모르면 포트를 쉽게 중단할 수 있습니다.