Ocache... روشی عمومی برای cache کردن

اکـسـیـژن

پنج شنبه، 28 مهر 1384

Ocache... روشی عمومی برای cache کردن

ارسال شده توسط امید در پی‌اچ‌پی در 14:50

Ocache

روشی برای cache کردن عمومی صفحات برای توسعه دهندگان وب.
(Global caching system for web developers)


اینجا می خوام به بحث در مورد روشی که برای cache کردن صفحات طراحی شده توسط PHP طراحی کردم بپردازم.

قبل از هر چیز بگم که این روش هنوز خیلی مبتدی است و باید پرورده بشه، برنامه ای هم که فعلا براش نوشتم، در سطح آلفا و بتاست و می دونم که اشکالاتی داره، اما هیجان انتشارش نذاشت که تا انتشار نسخه نسبتا بدون مشکلش صبر کنم. :-)

دیگه اینکه این سیستم caching در سطح برنامه است (در سطح کامپایل/سرور/... نیست) پس اگر با این تفاسیر فکر می کنید این مطلب می تونه به دردتون بخوره، ادامه مطلب رو مطالعه کنید، احتمالا براتون جالب خواهد بود :-)






این روش کاملا مجزا از برنامه ایست که توسعه دهندگان سیستم می نویسند و به دو صورت قابل پیاده سازی است.

روش اول:


تمامی درخواست ها با کمک وب سرور آپاچی و توسعه mod_rewrite به صورت پارامتر به فایل cache.php که من نوشتم، در شاخه cache ارسال میشه. مثلا اگر فایلی در آدرس http://test/dir1/index.php فراخوانی بشه، آدرس به چیزی مشابه http://test/cache/cache.php?my_cache_file=dir1/index.php تغییر داده خواهد شد.

سپس این فایل با الگوریتمی (که فعلا md5 است) فایل رو کد کرده و چک می کنه تا ببینه آیا نسخه ای از فایل cache شده است و زمانش نگذشته است یا خیر. اگر چنین فایلی وجود داشت، اون فایل به سمت بیننده ارسال میشه، در غیر این صورت، برنامه تفسیر و کامپایل میشه و خروجی صفحه در شاخه مربوط به کش ها ذخیره می کنه و ...

- در زمان نگارش این مطلب، فایل و دستورات مربوط به این روش توسعه داده شده است.



روش دوم:


این روش دقیقا مشابه روش فوق است، با این تفاوت که به جای استفاده از mod_rewrite از auto_append_file و auto_prepend_file استفاده میشه. (این روش در بحث هام با دوست و همکارم، آقای جواد عامل، به دست اومد.)

- در زمان نگارش این مطلب، این روش هنوز پیاده سازی نشده است.



نگرانی ها:


- در ابتدا تصمیم بر این بود که سیستمی توسعه داده بشه که هیچ کاری به توسعه دهنده نداشته باشه و خوب مشکل اطلاعات متغیری که معمولا از بانک ها خوانده میشه وجود داشت. حداقل فعلا، کاری که کردم این بوده که تابعی برای حذف فایل cache شده نوشته ام تا بتواند سیستم رو مجبور به بازسازی فایل cache شده بکند.

- نگرانی دوم صفحاتی است که توسعه دهنده به هیچ وجه نمی خواهد cache شوند، برای فرار کردن از cache شدن کافی است که عبارت NO_NO_CACHE در برنامه مربوط به توسعه دهنده define بشود، دیگر برنامه مربوط به caching خروجی صفحه ای را ذخیره نخواهد کرد.

- نگرانی یا مشکل سوم، فایل هایی بودند که خروجی ای غیر از متن داشتند (مثل تصاویر).... برای مقابله با این مشکل، نوع صفحه ارسالی به بیننده (Content-Type) دریافت می شود، و فقط در صورتی که متنی (*/text) باشد، cache خواهد شد.



نکات متفرقه:


- این برنامه توسط PHP توسعه داده شده ولی قابلیت توسعه به زبان های دیگر را نیز داراست (مثلا با زبان Perl برای برنامه های Perl)

- برای اجرای این برنامه به وب سرور آپاچی، توسعه mod_rewrite، دسترسی به فایل .htaccess و php دارید. برای فعال بودن برنامه در روش دوم هم احتیاج دارید که PHP به صورت module نصب شده باشه. (تمامی موارد گفته شده، در اغلب سرور های اینترنتی وجود دارد)

- صفحه اصلی برنامه توسط سرور های BerliOS پشتیبانی می شود و برنامه را می توانید از آدرس زیر دریافت کنید: http://developer.berlios.de/projects/ocache/

- لطفا تمام سوالات خودتون رو در اینجا یا صفحه مخصوص برنامه در سایت BerliOS ارسال کنید.

- این سیستم رو می تونید از چند روز بعد از نگارش این مقاله، از طریق SVN و بخش File های سایت BerliOS دریافت کنید.

- بعد از اینکه این روش به ذهنم رسید، در اینترنت کمی در مورد کار مشابه جستجو کردم، و چند مورد مشابه دیدم، اما هیچ کدام کامل یا به جامعیت آنچه که من فکرش را کرده بودم نبود.

- o در ابتدای ocache اول نام من نیست، هر نوع شباهتی اتفاقیست، لطفا تهمت نزنید :-P



پانویس:


در نهایت، مسلما این روش بهترین و کامل ترین روش نیست، هر مرحله عملیات cache کردن، جای خودش رو داره و نباید بگیم که چون مثلا apc رو نصب داریم، پس دیگه احتیاجی به سیستم های caching در زمان برنامه نویسی نداریم.

ممنون که این مطلب رو خوندید، منتظر نظرات مفیدتون هستم.

نظر ها (13) | دنبالک ها (0) | بیشترین خروج ها (0)

3205 hits

دنبالک ها
یک آدرس دنبالک برای ارسال

هیچ دنبالکی وجود ندارد

نظر ها
نمایش نظرات به صورت (خطی | بند کشی شده)

امید جان gmstrftime با strftime چه تفاوتی داره؟ مقالت رو همهنوز نخوندم!
#1 iman_ebru در 1384-07-30 05:40 (پاسخ)
کلا هر دوی این توابع، زمان رو بر حسب تنظیمات لوکال (locale) می دن.
strftime هیچ تغییری تو اون زمان نمی ده، اما gmstrftime اون زمان رو بر حسب گرینویچ میده.

ایمان جان، برای locale می تونی تو اینترنت بگردی...
http://linux.about.com/library/cmd/blcmdl1_locale.htm
#1.1 امید (سایت) در 1384-07-30 06:03 (پاسخ)
حالا دلیلش چیه که با md5 کدشون می کنی ؟
کل فایل رو md5 می کنی ؟ مظورت فقط نام فایل هست دیگه ؟
یکم توضیج بده
ممنون
#2 میلاد (سایت) در 1384-07-30 17:21 (پاسخ)
md5 می کنم که به یک رشته (نسبتا) یکتا برسم.

در حالت عادی فقط بر حسب نام فایل تشخیص میده که آیا این فایل قبلا باز شده یا نه، اما در حالت های پیشرفته تر و دقیق تر (من بهش می گم cache level) می تونه مقادیر موجود در _GET یا _POST یا _COOKIE یا _SESSION یا تلفیقی از اینها رو هم md5 بکنه، تا نسبت به اینها هم یکتا بمونه.

البته احتمالا نیازی به فعال کردن _GET و _POST تو این عمل نیست و فقط _SESSION می تونه کافی باشه. (البته خوب مسلما به خود سایت ربط داره)
#2.1 امید (سایت) در 1384-08-01 00:41 (پاسخ)
می گم اگر بشه این فایل ها رو توی یک فایل gz بریزی (tar.gz) تاثیری روی حجمی که فایل کش شده می گیره نداره ؟
#3 میلاد (سایت) در 1384-08-01 08:17 (پاسخ)
چرا، ولی اونوقت فلسفه کش میره زیر سوال :-)
اصولا کش کردن برای افزایش سرعته، اما اگر به فرض شما بخواین load سرور MySQL رو کم کنید، ممکنه performance کل سرور رو بالا ببره.
#3.1 امید (سایت) در 1384-08-01 15:40 (پاسخ)
امید. هیچ فایلی در پروژه نیست. اما از توضیحاتی که دادیمتوجهشدم که تا حدودی شبیه به سیستم کش s9y هست.
#3.1.1 ایمان در 1384-08-05 20:25 (پاسخ)
فایل ها رو باید از SVN دریافت کنی.
ولی هنوز فایلی release نکردم!

من بیشتر مقصودم این بوده که یک لایه برای کشینگ در نظر بگیرم.
کاملا مجزا و بدون وابستگی به برنامه نویسی، اما نهایتا در سطح برنامه نویسی!!

ممنون.
#3.1.1.1 امید (سایت) در 1384-08-06 01:58 (پاسخ)
به نظر قشنگ میاد، اما چنین چیزی در Shared Servers و با load بالا به خاطر Files I/O که یک Botlle Neck توی پروژه ایجاد میکنه یک latency ایجاد خواهد کرد که در صورتی که cache file مرتبا dump نشه بدجوری Response time رو پایین میاره
#4 امیر در 1384-09-19 13:33 (پاسخ)
ممنون امیر عزیز، کاشکی بیشتر می گفتید که کی و چکاره هستید :-) خوشحال میشم باهاتون آشنا بشم.

راستش در سرور هایی که من مدیریت می کنم، هیچ کدومشون با خوندن از هارد مشکل ندارند! و از اونجایی که سرعت خوندن یک هارد udma6 چیزی حدود چندین هزار (یا بهتره بگم چند گیگا) بایت در ثانیه است، قاعدتا نباید مشکل حادی در این زمینه پیش بیاد.

در اکثر سیستم هایی که مدیریت می کنم (به جز یکیشون!!) مشکل mysql اساسی ترین مشکل سرور های لینوکسی است.

در نهایت این سیستم فقط در حد یک تئوریست (البته عملی شده، اما بهینه سازی و عملی بودنش (در حالت productive) تست نشده و احتمالا در شرایط فعلی، عملی نیست!)

به هر حال، ممنون از نظرتون، منتظر نظرات و بحث های علمی آتی هستم :-)
امیدوارم این پروژه هم ختم به خیر بشه :-)

سپاسگذارم
#4.1 امید (سایت) در 1384-09-20 01:18 (پاسخ)
ممنون امید جان از مهمان نوازیت، والا شما که ما رو قابل نمی دونید و از IranPHP رفتید، من به لطف آرش و بیژن جان یکی از مدیرهای IranPHP هستم، خوشحال میشیم اگر بازهم شما رو اونجا ببینیم.
اگر هم که از IRC زیاد استفاده میکنید، من یکی از Official Developer های Jaws Project هستم در jaws# با اسم gluegadget همیشه online هستم، هم من و هم سایر برنامه نویسان Jaws خوشحال میشیم اگر که شما همینطور که الان به s9y کمک میکنید کمی از وقتتون رو هم به Jaws اختصاص بدید.

با تشکر
امیر محمد سعید
#4.1.1 امیر در 1384-09-21 13:01 (پاسخ)
ممنون امیر جان :-)
موفق و پیروز باشی.
Jaws رو هم قبلا دیده بودم، جالب و ساده و سریع بود (اما زیادی ساده بود، ولی به نظر می رسید خیلی جای رشد داشته باشه، فکر کنم به زودی چیز خوبی بشه :-) )
به دلیل یه سری مسائلی، تقریبا با هیچ پروژه ای نمی تونم همکاری کنم، همین سرندیپیتی رو هم شاید ماهی کمتر از یک ساعت براش وقت می ذارم
#4.1.1.1 امید (سایت) در 1384-09-23 00:07 (پاسخ)
سلام دوست عزیز

یه چیزی بگم !
نزدیک به یکی دو هفته که دنبال یک نرم افزار برای cache کردن می گردم ولی اینگار خبری نیست
اگر کسی یه نرم افزار نا قابل داره حداقل لینکشو برام بفرسته
من کافی نت دارم و نرم افزاره خیلی پیشرفته ای نمی خوام
فقط یه نرم افزار می خوام که برای یه کافی نت با ده تا سیستم کم نیاره
اگر کسی همچی نرم افزاری رو داره دریغ نکنه لطفا
ما هم هواشو داریم
متشکرم
#5 afshin در 1385-11-09 02:21 (پاسخ)

ارسال نظر

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
BBCode format allowed
:'( :-) :-| :-O :-( 8-) :-D :-P ;-) 
E-Mail addresses will not be displayed and will only be used for E-Mail notifications

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

 
 
 
این سایت توسط امید متقی راد با ایدهء اصلی از طرح ولادیمیر سیمو ویچ طراحی شده است و هرگونه کپی برداری از آن با ذکر منبع آزاد است.

خوراک‌ها

XML RSS 2.0 feed
XML RSS 2.0 نظر ها

ایمیل من

omi...@gmail.com

Google the Site

موضوعات

  • XML فایرفاکس (1)
  • XML لینوکس (10)
  • XML متفرقه (23)
  • XML چیستان (2)
  • XML پی‌اچ‌پی (15)
  • XML زنگ تفریح (2)
  • XML طراحی وب (4)

تمامی موضوعات

محبوب ترین مطالب

تقویم فارسی برای Google Personalized Homepage
(95)
روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری
(42)
روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
(41)
زمین و گربه
(39)
تکامل چیست؟
(36)
کاراکتر های فارسی در عکس توسط PHP
(32)
بزرگ ترین عدد
(32)
11 نکته مفید در مورد فایرفاکس
(28)
تغییر ظاهر وبلاگ
(26)
چگونگی فارسی سازی phpMyAdmin
(25)

آمار

آخرین نوشته: 1387-03-31 01:22
تعداد مطالب: 59
تعداد نظر ها: 748

لینک

لینک های روزانه

مقایسه‌ی کرنل ویندوز و لینوکس
عضویت در تیم اهدای عضو
Who uses Linux?
ده تغییر مهم مهاجران به لینوکس!
بهینه سازی فایرفاکس
امنیت شبکه (باگ تراک)
طریقه توسعه افزونه، برای فایرفاکس
اینترنت اکسپلورر 7 را بمباران کنید
رفع مشکل حافظه فایرفاکس
نمایش محتویات cache شده در فایرفاکس

قبل | بعد

PageRank Counter

کپی برداری از مطالب سایت طبق لایسنس CC مجاز می باشد

Creative Commons License - Some Rights Reserved
Original content in this work is licensed under a Creative Commons License

نظر ها

امید about persian_log2vis نسخه‌ی RC3 منتشر شد
ج، 15.09.1387 03:53
کدت رو نگاه کردم. کا ر خوبی انجام دادی، ا ما فعلن خیلی ناقصه، ولی فکر می‌کنم بشه م نطقی‌تر کاملش [...]


امید about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ج، 15.09.1387 03:16
خدا شفاشون بده! ا ین چی؟ http://www.m playerhq.hu/DOCS/man /en/mplayer.1.html#O SD/SUBTITLE%20 [...]


nima about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ج، 15.09.1387 01:36
لینکی که دادی فیلتره :-)


امید about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
پ، 14.09.1387 01:46
سلام، من زیاد با بخش زیرنویس mencoder کار نکردم. قبلن با subrip کارام رو انجا م می‌دادم. [...]


امید about MD5 چیست؟
چ، 13.09.1387 23:31
سلام، تنها راهی ک ه حتمن به جواب می‌رس ه، Brute Force است! اما ممکنه زمان به جو اب رسیدن چندین [...]


آرمین about MD5 چیست؟
چ، 13.09.1387 11:13
سلام . ممنون از مقال اتتون . یه سوال داشت م من یک رشته دارم که می دونم با md5 یا s ha1 (در php ) [...]


اميد about persian_log2vis نسخه‌ی RC3 منتشر شد
د، 11.09.1387 17:54
آقا اميد عزيز كارت خ يلي قشنگ بود. اما يه مشكل كوچيك وجود داش ت اونم fribidi . من خودم نتونستم [...]


نیما about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
د، 11.09.1387 02:38
ممنون اون حل شد :-) فقط این زیرنویس رو ه م شامل بشه رو یکم بی شتر توضیح میدی؟ خرو جی -v اینه : [...]


امید about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ی، 10.09.1387 12:43
سلام، اول دی‌وی‌دی ر و بریز روی هارد، بعد از رو هارد تلاش کن تبدیل کنی. ممکنه دی‌وی‌دی‌ات مش [...]


nima about روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD
ی، 10.09.1387 09:39
سلام من تو فدورا ۹ م شکل دارم اگه کمکم کن ی ممنون میشم :-) هر فیلمی رو میخوام تبدی ل کنم بعد ۶۸ ث [...]


مدیریت وبلاگ

باز کردن صفحه ورود