آیا می خواهید mod_pagespeed را به سرور دیگری پورت کنید یا آن را در سیستم دیگری ادغام کنید؟ عالی! ما mod_pagespeed را توسعه دادیم تا ماژولار و تقریباً کاملاً مستقل از آپاچی باشد. تنها کد مخصوص آپاچی در دایرکتوری 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 و AprStatistics مراجعه کنید)
- تایمر (به مثال MockTimer و AprTimer مراجعه کنید)
- UrlFetcher - Fetcher برای منابع بر اساس URL (به مثال WgetUrlFetcher و SyncFetcherAdapter مراجعه کنید)
- UrlAsyncFetcher - یکسان اما با یک واسط تماس برگشتی (به مثال WgetUrlAsyncFetcher و SerfUrlAsyncFetcher مراجعه کنید؛ دومی از یک مدل رویداد ناهمزمان ساخته شده در بالای UrlPollableAsyncFetcher پشتیبانی می کند)
- RewriteDriverFactory - تمام گزینه ها و کلاس های خاص یک پیاده سازی را مدیریت می کند (به مثال ApacheRewriteDriverFactory مراجعه کنید)
سپس برای فراخوانی کد، باید یک FooRewriteDriverFactory
ایجاد کنید تا تمام اشیاء خود را ایجاد کند، و سپس StartParseWithType(url, content_type) , ParseText(text) بین هر flush سرور و FinishParse() برای هر درخواست.
اگر به دنبال این موضوع هستید یا مشکلی دارید، لطفاً به لیست پستی توسعه ما بنویسید. ما تضمین نمیکنیم که رابطهای داخلی ثابت بمانند، بنابراین اگر ندانیم که از آنها استفاده میکنید، میتوانیم به راحتی پورت شما را بشکنیم.