رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
برنامه نویسی بهتر و بهینه تر PHP
#31
(14-07-1394، 02:59 ب.ظ)ADMIN نوشته: شما اکثر پروژه هایی که انجام دادین (تقریباً تمامشون) تا جایی که اطلاع دارم برای مصارف شخصی و استفاده توی مقیاسهای کوچک و تک کاربره بوده. وقتی توی پروژه مقیاس بزرگ کار کنید، اهمیت این وسواس در مصرف حافظه و پردازنده رو درک میکنید.
بله خب اینطور بوده حرفی نیست!
ولی با این حال بنظر من بازم حرفهای بنده در خیلی موارد درسته و خیلی ها بیش از حد روی بهینه سازی تصور اغراق آمیز و رفتار افراطی دارن. من فقط میخوام این وسواس ها و افراطهای بیش از حد و اغراق ها رو که میدونم بیان کنم و نسبت بهشون هشدار بدم و اینکه طرز تفکر منطقی در این زمینه رو آموزش بدم. بنا به مطالعات و صلاحیت دانشیک که در خودم میبینم و به پشتوانهء منابعی که دیدم و ارائه دادم!
من یه مطالعات تئوریک در این زمینه داشتم که منابع درست و حسابی داره و افرادی که خودشون برنامه نویسان حرفه ای بودن بعضیاشون کارهای تجاری در مقیاس بزرگ منجمله تحت وب هم کردن. حرفهایی که اینا میزنن برای من کاملا قابل درکه و درست میاد بنظرم عقل و تجربهء شخصی من هم گرچه تجربم کم باشه ولی تایید میکنه. و اصلا بعضی چیزها درک و کشفش از راه تئوریک راحتتره تا بصورت تجربی و عملی. بنده کلا درک مطلب بالایی دارم یه مطلب تخصصی علمی چیزی بخونم تا حداکثری که ممکن باشه کامل و عمیق متوجه منظورش میشم. چیزهایی در نوشته ها در منابع تئوریک هست که بعضا با تجربه عملی ولو سالها خیلی سخته بشه فهمید، بعضی وقتا غیرممکن. مثلا علم امنیت و رمزنگاری از اینطور چیزها زیاد داره. ولی مرد میخواد این منابع رو بخونه و بفهمه؛ سواد و پایه علمی و قدرت تحلیل ذهنی بالایی میخواد. بمب اتمی رو تئوری درست کرد. اگر فقط بصورت تجربی بود شاید تاحالا نه بمب اتمی داشتیم نه انرژی هسته ای! بمب اتمی که قطعا نداشتیم، ولی انرژی هسته ای شاید به زور! پس قدرت تئوری رو دست کم نگیرید. بعضی چیزا کار تجربه و تست عملی صرف نیست!

حالا بله یه مقداری هم ممکنه من زیاده روی بکنم درمواردی ممکنه اشتباه بکنم یا در میزان واقعی چیزها تخمین های بیش از حد دور از واقعیت داشته باشم، قبول دارم و میپذیرم! مثلا من اون داستان count رو تست کردم روی سیستم خودم با حلقهء 100 هزار دیدم حدود یک ثانیه اختلاف زمان ایجاد کرد! حقیقتش انتظار اینقدر زمان رو نداشتم فکر میکردم خیلی کمتر بشه. گرچه بهرصورت بازم حلقه های دور کمتر مثلا 100 تا و هزارتا رو من مشکلی نمیبینم در برنامه ها و مقیاس های عادی اگر کسی count رو توی حلقه گذاشت! چون تا یک صدم ثانیه و این حدود قابل تحمله. فرض گیریم چندتا حلقه اینطوری هم داشته باشه روی هم مثلا میشه یک دهم ثانیه. البته در شرایط ترافیک سنگین بله این یک دهم هم ممکنه بتونه در هندلینگ سایت و بخصوص هاستهای اشتراکی اهمیت پیدا کنه، ولی من اعتقاد ندارم فقط به این خاطر حتما اصرار هست که همیشه همه کس توی همه کدها این مسئله رو رعایت کنن. خیلی وقتا تنها آگاهی هست که ضروری یا کافیه، نه انجام کار خاصی. و در پست قبلی هم اشاره کردم گفتم که آدمها خودشون باید انتخاب کنن کسی جای کس دیگر نیست شرایط برای هر شخص و برنامه میتونه متفاوت باشه. مثلا من سیستم رجیستر و لاگین نوشتم از اول هدفم پرفورمنس بالا و مقیاسهای بزرگ یا پاسخگویی ترافیک سنگین نبود، و این هدف رو عمدا انتخاب کردم بر اساس اولویت ها و علاقمندی های شخصی خودم و یک دلیلش این بود که حجم و پیچیدگی کار رو کاهش بدم اسیر محدودیت های پرفورمنس نباشم تمرکز و وقتم روی این صرف نشه چون اصل کار خودش کار جدید و بقدر کافی گسترده و پیچیده ای بود. هروقت هم بخوام واقعا لازم ببینم میتونم اون برنامه رو مقداری بهینه تر کنم، مشکلی درش نمی بینم، بخصوص الان که بهش احاطهء بیشتری دارم. روی سایت مایت کسی هم نصب نکردم پولی بابتش نگرفتم که بخوام نگران پشتیبانی و تعهدات و اینها باشم.

حالا شما میخواید برنامه تجاری بنویسید روی هاست اشتراکی هم نصب کنید ترافیک بالا هم جواب بده، خب معلومه این مسائل براتون خیلی مهمتر میشه. ولی همه که چنین شرایطی ندارن و بنظرم این حتی در دنیای برنامه نویسان حرفه ای و تجاری هم مشکلی اینقدر بزرگ برای همه نیست. پس نباید کلی و مطلق صحبت کرد بگید آقا همه باید این جزییات رو عادت کنن توی تمام کدها تمام برنامه ها رعایت کنن!
پاسخ
تشکر شده توسط:
#32
من یه تابع رندوم از کتابخانهء phpseclib برداشتم، تغییر دادم برای برنامهء خودم، بهبودش دادم، طرف یجاش یه بهینه سازی خفن کرده بود بجای اینکه دو رشته رو با == مقایسه کنه دستورات & و سطح بیتی بکار برده بود که کلی باید فکر و تحلیل میکردی تا میفهمیدی داستان چیه چطوری کار میکنه و در کامنت اون کد هم نوشته بود بله من میدونم خوانایی کد رو کم میکنه ولی این تابع چون ممکنه در یک ثانیه میلیون ها بار نیاز باشه فراخوانی باشه پس من این بهینه سازی رو باوجودی که به خوانایی کد صدمه میزنه انجام میدم!
میخوام بگم خارجیها اینطوری هستن اینا رو میدونن وقتی انجام میدونن میدونن افرادی ممکنه فردا ازشون انتقاد کنن، بخاطر همین دفاعیه خودش رو از قبل نوشته بود!!

حالا یکی از هموطنان خودمون اون کد رو دید من یادمه گفت وهه طرف عجب حرکت خفنی زده خوشم اومد! ولی نظر من به شخصه اصلا شبیه اون نبود و پیش خودم گفتم این طرف کار احمقانه ای کرده!

تازه من اون بهینه سازی طرف رو نهایتا برداشتم با یک کد خیلی خواناتر عوضش کردم، چون بنظرم اون شرایطی که طرف میگفت در برنامهء من وجود نداشت و در اکثر برنامه های دیگر هم همچنین!

بعدم من خودم در تستهای اولیه چندتا باگ از کدهای طرف درآوردم و بهش اطلاع دادم که برطرف کرد! چه بسا همین بهینه سازیها و پیچیدگی و ناخوانایی هایی که در کد موجب شده بودن باعث اون باگها شده بود، اونم در یک کتابخانهء امنیتی!
پاسخ
تشکر شده توسط:
#33
(09-07-1394، 06:53 ب.ظ)BITNEVIS نوشته: با عرض سلام و ادب خدمت تمامی دوستان عزیز  Ywink
و با اجازه از اساتید توی این تاپیک بهترین و بهینه ترین روش ها را در برنامه نویسی PHP بررسی کنیم تا بتونیم برنامه های سریع تر و کارامد تری داشته باشیم به طور مثال همون طور که استاد  گفتن استفاده از ' ' برای قرار دادن رشته به جای " " ، در صورتی که نیاز به پردازش متغیر ها و جایگزینی مقدار درون آن ها در رشته مورد نظر  نیست ، بهتره ، چون با این کار ما  پردازش اضافی رو حذف کرده و درتعداد دفعات تکرار بالا باعث جلوگیری از کاهش راندمان برنامه میشیم با بطور مثال  توابع و ... جدید تر و بهینه تر رو که بجای توابع قدیمی تر و یا کندتر اومدن رو معرفی کنیم تا در نهایت بتونیم بهترین رو از بین گزینه های روبرومون در برنامه نویسی PHP انتخاب کنبم.

کجای این پستها گفته شده باید؟ ما اینجا روشهایی که بهینه تر هستن نسبت به روشهای دیگه رو مقایسه میکنیم و میگذاریم و هر کسی نیاز به بهینه سازی داشت، میتونه اول سراغ این موارد بیاد و بعد اگه جواب نگرفت، به فکر ارتقاء تجهیزات و این قبیل اقدامات باشه.
پاسخ
تشکر شده توسط:
#34
(14-07-1394، 03:36 ب.ظ)ADMIN نوشته: کجای این پستها گفته شده باید؟ ما اینجا روشهایی که بهینه تر هستن نسبت به روشهای دیگه رو مقایسه میکنیم و میگذاریم و هر کسی نیاز به بهینه سازی داشت، میتونه اول سراغ این موارد بیاد و بعد اگه جواب نگرفت، به فکر ارتقاء تجهیزات و این قبیل اقدامات باشه.
منم یادم نمیاد جایی گفته باشم کسی گفته باید. فقط سعی کردم مطالب مکمل اضافه کنم رفع ابهام و برداشت غلط بکنم بگم بایدی نیست همه جا همه جزییات بهینه سازی رعایت بشه و در خیلی موارد اصلا عاقلانه هم نیست درست هم نیست.

مشکل از اونجا شروع میشه که دیگران از حرفهای من برداشت غلط میکنن و بعد میان یکسری ادعاهای کلی و مطلق مطرح میکنن یا مواردی که من ادعا نکردم یا اصلا ربطی ندارن.
مطالب من فقط مکمل بودن. شما دربارهء جزییات فنی بهینه سازی صحبت کردید، من درمورد منطق و فلسفه و سیاست در سطوح بالاتر و ارتباط و تعادلی که با بقیهء پارامترهای جهان واقعی دارن.
پاسخ
تشکر شده توسط:
#35
(14-07-1394، 03:26 ب.ظ)Eshpilen نوشته: حالا شما میخواید برنامه تجاری بنویسید روی هاست اشتراکی هم نصب کنید ترافیک بالا هم جواب بده، خب معلومه این مسائل براتون خیلی مهمتر میشه. ولی همه که چنین شرایطی ندارن و بنظرم این حتی در دنیای برنامه نویسان حرفه ای و تجاری هم مشکلی اینقدر بزرگ برای همه نیست. پس نباید کلی و مطلق صحبت کرد بگید آقا همه باید این جزییات رو عادت کنن توی تمام کدها تمام برنامه ها رعایت کنن!

صرفاً جهت یادآوری Ywink
پاسخ
تشکر شده توسط:
#36
سلام دوستان. خسته نباشید. همین بحثی هم که داشتید تا یه جایی خیلی مفید بود و کمک میکرد که تفاوت ها احساس بشه ولی فکر نمیکنید دیگه داره تاپیک رو از هدفش دور میکنه. از سه صفحه موضوع این تاپیک دو صفحه اختصاص داره به این بحث و تنها یک صفحه به اصل موضوع.

در کل به نظر من تفاوت برنامه نویس ها و تفاوت کارهاشون تو توجه به این نکات بسیار بسیار ریزه و رقابت کاری رو تو سطوح خیلی بالا مشخص میکنه. حتی گیریم که تاثیرش هم خیلی خیلی کم باشه حالا چه دلیلی داره که کلا بخوایم ریشه بحث رو بزنیم و نذاریم چنین مطالبی آموزش داده بشه؟

امیدوارم این تاپیک مثل صفحه اولش کارش رو ادامه بده و مطالب خوبش رو دریغ نکنه
پاسخ
تشکر شده توسط: محسن نوری , Alireza




کاربران در حال بازدید این موضوع: 2 مهمان