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)
Vote for articles fresher than 365 days!
Current karma: none, 0 vote(s)
4191 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 متفرقه (24)
  • XML چیستان (2)
  • XML پی‌اچ‌پی (18)
  • XML زنگ تفریح (2)
  • XML طراحی وب (4)

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

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

  • تقویم فارسی برای Google Personalized Homepage (113)
  • روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری (46)
  • کارت عروسی الکترونیکی (44)
  • تکامل چیست؟ (42)
  • روش های نگهداری فیلم - بخش سوم - تبدیل فایل های تصویری DVD (41)
  • زمین و گربه (40)
  • کاراکتر های فارسی در عکس توسط PHP (40)
  • بزرگ ترین عدد (36)
  • چگونگی فارسی سازی phpMyAdmin (32)
  • پی.اچ.پی ۵.۳ و تقویم فارسی (30)

آمار

آخرین نوشته: 1389-01-26 06:48
تعداد مطالب: 63
تعداد نظر ها: 896

لینک

  • Friends
    • Iman Raad
    • Ali Sattari
    • Armin Boroumand
    • Reza Behrouz
    • Abbas Esmaeeli
    • Ashkan Ghassemi
    • Emil Sedgh
    • Opatan
    • Sajad Kioumarsi
    • Amir Khatibzadeh
    • Milad Rastian
    • Morteza Zafari
    • Masoud Gheibi
    • Hadi Rezaee
    • Houtan Alghaspour
    • Mahdi Keramati
    • shaniaki
    • Hamid Hashemi
    • Behrouz Rad
    • Masoud
    • Ramin Farmani
    • Ali Farhadi
    • Nabi
    • Nima Shayafar
  • Other sites
    • Scientific Articles
    • Orisinal
  • OXYGEN Web Solutions
  • this blog
  • DynamicGrids
  • Serendipity

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

مقایسه‌ی کرنل ویندوز و لینوکس
عضویت در تیم اهدای عضو
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 کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 20:55
ممنون از راهنماییتون مشکل از ورژن جدی د PHP هست که این bug رو داره
امید about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 11:51
من هم دلیل این اتفاق رو نمی‌دونم! اما مطمئنن مشکل از این تابع نیست، چون کار ا ین تابع چیز مت [...]
علیرضا about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 09:27
من نسخه های gd و mbs tring رو روی سرور و لوکال تست گرفتم. با هم مطابقت داشتن. هم ینطور از نسخه [...]
علیرضا about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 09:13
ممنونم از جوابتون من این کد رو با فون ت های مختلفی تست کرد م این دو تا عکس رو براتون آپلود ک [...]
امید about کاراکتر های فارسی در عکس توسط PHP
د، 08.06.1389 01:16
سلام، ممکنه مشکل از نسخه‌ی GD باشه که توی سرور نصب شده. یک phpinfo در لوکال و سرور بگیر و [...]
علیرضا about کاراکتر های فارسی در عکس توسط PHP
ی، 07.06.1389 18:33
سلام من از این کده ا استفاده کردم روی local درست جواب میده ولی وقتی آپلودش می کنم برخی از حر [...]
امید about کاراکتر های فارسی در عکس توسط PHP
ی، 07.06.1389 12:15
شرمنده دیر پاسخ می‌د م... محتوای فایل مشکل داره یا فقط نام خود فایل؟ کتاب‌خ انه‌ی GD به نظ [...]
محمد يوسفي about کاراکتر های فارسی در عکس توسط PHP
پ، 04.06.1389 06:31
آقا من يک پورتال LMS دارم . ولي در قسمت ريپورت ها وقتي از گز ارشات با فرمت اکسل ذ خيره سازي رو ا [...]
امید about روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری
ج، 29.05.1389 14:44
با این روشی که من گف تم (هر چند قدیمی است ) تست کن. اگر اروری داد، بهم بگو. پ. ن: چون من فایل [...]
babak about روش های نگهداری فیلم - بخش دوم - تبدیل فایل های تصویری
ج، 29.05.1389 11:04
من از نرم افزار allo k 3gp psp mp4 ipod v ideo converter استفا ده می کنم بدین صورت که ابتدا فایل [...]

مدیریت وبلاگ

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