چند نکته درباره سرعت…

سلام.

امروز که دارم این مطلب رو می‌نویسم(11 تیر 1389 3:30، ب.ظ) بر مشکل عظیمی فائق آمدم! مشکلی که مدت‌ها با آن دست و پنچه نرم می‌کردم.

template compiler ای نوشته بودم برای یک cms. این قطعه برنامه به قدری کند عمل می‌کرد که از مرز 30 ثانیه هم می‌گذشت و با خطای

Fatal error: Maximum execution time of 30 seconds exceeded in F:\Program Files\EasyPHP 2.0b1\www\…\libs\templateengine.class.php on line xxx

مواجه می‌شدم. فکر کنید اگر کسی می‌خواست این cms رو با اینترنت ذغالی ببینه چی می‌کشید…

اما فقط با رعایت سه نکته ساده سرعت اجرا رو به حد لحظه ای رسوندم.

(1): بیجا از » بجای ‹ استفاده نکنید

مفسر php محتوای بین دو » » را تجزیه و تحلیل می‌کند که اگر در آن متغیری بکار رفته بود مقدار آن را جایگزین کند. شما در یک فایل php ممکن است صدهابار از » استفاده کنید بدون اینکه نیاز باشد و دست کم 3-4 کیلوبایت داده را بی جهت parse کنید. تعویض بجای » با ‹ می‌تواند 1 الی 3 ثانیه زمان اجرا را بهبود ببخشد.

مثال ها:

درست نادرست
require ‹mysql.class.php›; require «mysql.class.php»;
echo ‹<header>›; echo(«<header>»);
$res[‹post_title›]; $res[«post_title»];
require «mod-$module.php»; require ‹mod-$module.php›;

(2): وقتی می‌شود از prinft و sprintf استفاده نکرد از آنها استفاده نکنید!

پیوندزدن رشته ها با .(نقطه-dot) بسیار سریع تر از printf و sprintf انجام میپذیرد. «$var1 $var2» هم که به کلی روش غلطی است.

البته در اندک مواردی این دو تابع برنامه را خیلی خواناتر می‌کنند که کُندی این توابع قابل چشم‌پوشی است.

و هرگز از print استفاده نکنید! print یک تابع است اما echo تابع نیست بلکه یک دستور است.(مثل if, switch,function,…) فراخوانی یک تابع عملیاتی است که بسیار زمان بر تر از فراخوانی یک دستور است.درضمن شما با echo میتوانید کدی به این شکل بنویسید:

echo 'Yourname is: ',$name,' - and lastname is: ',$lastname; But when you Use print: print ('Yourname is: ' . $name . ' - and lastname is: ' . $lastname);

در قطعه کد بالا استفاده از echo به همراه ویرگول ها هم راحت تر است و هم سریع تر از پیوند زدن رشته ها عمل می‌کند.

وقتی شما از echo استفاده می‌کنید، در سرور تابعی (این یک تابع php نیست بلکه تابعیست که با زبان C در شرکت zend نوشته شده است) صدا زده می‌شود تا عبارتی که جلوی echo نوشته شده را به مرورگر بفرستد. ولی وقتی شما از print استفاده می‌کنید، سرور در بین توابع php دنبال تابع print می‌گردد و وقتی آن را پیدا کرد، محتوایش را می‌خواند و دستورات آن را که به زبان php اند اجرا می‌کند. این دستورات مانند echo آرگومان تابع را به مرورگر می‌فرستند. حالا مسئله خروج از تابع باقیست!!

(3): هرگز از ereg_replace استفاده نکنید

سه چهار ثانیه را با دو نکته قبل حل کردم. اما امان از ereg_replace که از آن برای پیدا کردن متن بین دو تگ استفاده می‌کردم! قبلا اینطور کار می‌کردم:

$post_template = eregi_replace("(.+)(<\\\$post\\\$>)(.+)(<\\\$\/post\\\$>)(.+)","\\3",$compiled);

و حالا:

class templatecompiler
.
.
>.
// get the content between tags
private function __gettag($tag)
{
$tag1 = "<$$tag>";
$tag2 = "<$/$tag>";
$text = $this->compiled;
$tag1_len = strlen($tag1);
$seek1 = strstr($text, $tag1);
$seek2 = strstr($text, $tag2);
if($seek1 & $seek2)
{
$pos1 = strpos($text, $tag1);
$pos2 = strpos($text, $tag2);
$split_len = $pos2 - $pos1;
$text = substr($text, $pos1, $split_len);
$text = substr($text, $tag1_len);
return $text;
}
}
.
.
.
$post_template = $this->__gettag('post');
.
.
.
}
?>

سرعت به شدت بالا رفته است!

درضمن قطعه قطعه کردن برنامه و نوشتن کلاس بسیار در وقت کاربر، گسترش دهنده و برنامه نویس صرفه جویی می‌کند.

پ.ن: در کد های وردپرس نکته 1 فقط در بعضی جاها رعایت شده که متاسفانه باعث می‌شود حتی در لوکال هوست(localhost) تاخیری نزدیک به 1 ثانیه داشته باشیم.البته در بعضی جاها هم رعایت شده. شاید این بخاطر این باشد که هسته وردپرس را یک نفر ننوشته بلکه یک تیم با سواد برنامه نویسی یا بهتر بگم دقت در برنامه نویسی نابرابر.

موفق باشید.

پایان

شــاهی که بر رعیــت خـــود می‌کند ســتم
مستی است که می‌خورد از ران خـــود کباب

صائب تبریزی

صائب تبریزی: شاعری که در اصفهان زندگی می‌کرده، در دهلی کار می‌کرده و در نامش هم کلمه تبریزی است.محل تولد و محل دفنش را یادم نیست ولی هیچ کدام از این شهرها یکی نبوده اند!

, , , , , , , , , , , ,

  1. #1 توسط قرنفیل در ژوئیه 3, 2010 - 10:25 ق.ظ.

    فکر نمیکنم قدیما مثل امروز باشه و بیخود که یه نفر تبریزی نباشه بهش بگن تبریزی
    چند شهر ترکی از صائب شاعری ترک که هم شهر فارسی داره هم ترکی:

    حلقه اولدوق قاپیسیندا یئنه مئیخانه لرین

    بو حالیله یئتیشک وصلینه پئیمانه لرین

    بیزخراباتا اوشاق واختی گلیب دؤشمه میشیک

    کرپیچ اولدوق دیواریندا بو قدیم خانه لرین

    دیلیمین خنجری عاشیقلری دوغرار گؤندوز

    گئجه شمعیم یاخاجاق آتشه پروانه لرین

    مشورتله آچیلیر سیرّی اگر دونیامیزین

    من دئییم سنده چئویر تسبحینین دانه لرین

    ایستریک تئز قوتارا صوحبتینی ایندی قلم

    واقیف اوللوق حالینا سونرادا دیوانه لرین

    خوابی غفلت آلاجاق آلسا بیزی آغوشونا

    بیرجه آندا دؤشریک قوینونا افسانه لرین

    او گوزللر ائله هوپموشدو بیزیم جانیمیزا

    صائب اولدوق مایاسی بیزده بو بوتخانه لرین

    صائب تبریزی

  2. #2 توسط قرنفیل در ژوئیه 3, 2010 - 10:26 ق.ظ.

    او آجی سئوزلره صبرائیله یرک دؤزدوم من

    چون کمال اهلی اولان ناکام اولور سئزدیم من

    هرزه سؤز سؤیله ینه یاخشی جواب سوسماقدیر

    سوساراق های قوپاران هرزه دیلی اؤزدوم من

    کاما چاتماق دیله یرسن ائلی چاتدیر کامینا

    بونو گؤردوم هارا گئتدیم هارانی گزدیم من

    اودیله سن مومو بیر یئرده نئجه ساخلایاسان؟

    آتشیمله پولادی موم کیمی بیل ازدیم من

    اونودوبلار سنی صائب یادا سالماز کیمسه

    دردیمی لعلیله داغ سینه سینه یازدیم من

    صائب تبریزی

  3. #3 توسط قرنفیل در ژوئیه 3, 2010 - 10:27 ق.ظ.

    حجاب جسم را از پیش جان بردار ای ساقی

    مرا مگذار زیر این کهن دیوار ای ساقی

    به یک رطل گران بردار بار هستی از دوشم

    من افتاده را مگذار زیر بار ای ساقی

    به راهی می‌رود هر تاری از زلف حواس من

    مرا شیرازه کن از موج می زنهار ای ساقی

    چرا از غیرت مذهب بود کم غیرت مشرب؟

    مرا در حلقه ی اهل ریا مگذار ای ساقی

    چراغ طور در فانوس مستوری نمی‌گنجد

    برون آور مرا از پرده ی پندار ای ساقی

    شراب آشتی‌انگیز مشرب را به دور آور

    بده تسبیح را پیوند با زنار ای ساقی

    ادیب شرع می‌خواهد به زورم توبه فرماید

    به حال خود من شوریده را مگذار ای ساقی

    ز انصاف و مروت نیست در عهد تو روشنگر

    زند آیینه ی من غوطه در زنگار ای ساقی

    به شکر این که داری شیشه‌ها پر باده ی وحدت

    به حال خویش صائب را چنین مگذار ای ساقی

    صائب تبریزی

  4. #4 توسط قرنفیل در ژوئیه 3, 2010 - 10:27 ق.ظ.

    شعری فارسی از صائب
    می‌کند یادش دل بیتاب و از خود می‌رود

    می‌برد نام شراب ناب و از خود می‌رود

    هر که چون شبنم درین گلزار چشمی باز کرد

    می‌شود از آتش گل آب و از خود می‌رود

    از محیط آفرینش هر که سر زد چون حباب

    می‌زند یک دور چون گرداب و از خود می‌رود

    پای در گل ماندگان را قوت رفتار نیست

    یاد دریا می‌کند سیلاب و از خود می‌رود

    زاهد خشک از هوای جلوه ی مستانه‌اش

    می‌کشد خمیازه چون محراب و از خود می‌رود

    وصل نتواند عنان رفتن دل را گرفت

    موج می‌غلتد به روی آب و از خود می‌رود

    نیست این پروانه را سامان شمع افروختن

    می‌کند نظاره ی مهتاب و از خود می‌رود

    دست و پایی می‌زند هر کس درین دریا چو موج

    بر امید گوهر نایاب و از خود می‌رود

    بی‌شرابی نیست صائب را حجاب از بیخودی

    جای صهبا می‌کشد خوناب و از خود می‌رود

    صائب تبریزی

  5. #5 توسط قرنفیل در ژوئیه 3, 2010 - 10:29 ق.ظ.

    منی(مرا)

    بو عشق دردو غمی گؤر نئجه یوغورتدو منی
    قیامتین ائله بیل آتشی قووردو منی
    یاراما بخیه وورارلار فقط نه فایداسی وار
    طبیبیم اولدو او کس کی ائله او قیردی منی

    او قدر هجرانا دؤزدوم اوره گیم دؤندو قانا
    یئتیم اوشاق کیمی گؤز یاشلاریم بوغوردو منی
    نسیم بهانه دیدیگین داغیلدی بدن
    کیمیسه توپلایاراق تورپاق اوسته قوردو منی
    او لاله باغرینا داغ چکدیلر بزه ک یئرینه
    حیات دا مین داغ ایله آلدادیب دوغوردو منی
    دئ جوجه رسین نئجه بس توپراغا دوشن توخوموم
    بو آتش اوزلو گؤزللر اوخویلا ووردو منی
    نه یاخشی اولدو کی صائب یازیلدی خوش خطله
    بو طالع حسرتی عمرومده آز می یوردو منی

    مرا(منی)

    این درد و غم عشق ببین چگونه مرا پرورش داد
    گوئی آتش قیامت مرا خاکستر کرد
    زخمم را بخیه می زنند اما چه فایده ای دارد
    طبیبم کسی شد که خودش مرا شکست
    آنقدر در حسرت هجران صبر کردم که دلم خون شد
    مانند کودک یتیم اشک چشمانم خفه ام کرد
    نسیم بهانه ای برای داغون شدنم بود
    یکی جمعم کرد و دوباره بر خاکم خلق کرد
    بر دل لاله به جای بزک با آتش داغ کشیدند
    زندگی نیز با هزار فریب مرا دوباره زائید
    بگو چگونه تخم من در خاک جوانه بزند؟
    آخر زیبایان آتش رو خودشان به تیرم زدند
    چه خوب که صائب به خط خوش نوشته شد
    این طالع پر حسرت در عمرم کم خسته ام کرد؟
    صائب تبریزی

  6. #6 توسط قرنفیل در ژوئیه 3, 2010 - 10:31 ق.ظ.

    صائب به معلم زبان فارسیش علاقه داشت و به آنان عشق می ورزیده است
    شاه من! در كـوی تـو تـا كی كنـم فـریـاد، هـی!

    داهی طاقت قالما میشدیر دادهی! فـریـاد هـی!

    همدمم غـم، مـونسم غـم، دلبـرا غمخـوار غـم،

    ای دولانیم باشینا، سنسیز دگیل دل، شـاد، هـی!

    گه به عشوه، گه به غمزه، گه تغافل گه بـه نـاز

    آپاریرسان عاقلیمی، بیر شیـوه گـر استـاد, هـی!

    بس همه شب در فـراقـت زار و نـالان بی رفیـق

    قالمیشام زار و ذلیـل، ای یار مـن! امـداد، هـی!

    در دل صائب بسی جا كرده است چشمان مسـت

    ایكی كافر بیر مسلمان ئـولـدورور، بیـداد، هـی!

  7. #7 توسط قرنفیل در ژوئیه 3, 2010 - 10:32 ق.ظ.

    توتما اول گول دامنین مشهور گونونده جان ایچون

    قیلمـا یوزسوزلوك نگـاریلـه بیـر آووج قـان ایچـون

    آچما گیـل آغـزین، گؤرنده خال مشكین دانه سین

    اگمه بـاش پـرگار تك هـر نقطـه ی دؤوران ایچـون

    یولداش اولدور كیم قارا گونلرده یولدان چیخماسین

    گئچمه یـولداشدان خیفیرتك چشمه ی حیوان ایچون

    یئنگی آی بـاشیـن اگـر خـورشیده تا اولسون تمام

    سـاده دل بیلمـز كـه بَشلَر ئـوزونـو نقصـان ایچـون

    حُسن جؤولانینـدان اَل كسمك دیـر آروادالار ایـشی

    كئـچ اوزونـدن مـردلـر تك یـوسـف كنعـان ایچـون

    منّـت ایلـه دیـریلیـك صـائـب ئـولـومـدنـدیـر بتـر

    جـان وئـورلـر اهـل غئیـرت درد بـی درمـان ایچــون
    صائب تبریزی

  8. #8 توسط قرنفیل در ژوئیه 3, 2010 - 10:33 ق.ظ.

    دانلود 70 شعر ترکی از صائب تبریزی
    http://two.xthost.info/turk/Saib.pdf
    موفق باشید

  9. #9 توسط قرنفیل در ژوئیه 3, 2010 - 11:35 ق.ظ.

    راستی بابت حل مشکل بهت تبریک میگم

  1. به سادگی آب خوردن فید RSS2 بسازید! « نوشته‌های گاه و بی‌گاه raindigital

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s

%d وب‌نوشت‌نویس این را دوست دارند: