(14-07-1394، 07:47 ق.ظ)ADMIN نوشته: [ -> ]بهرحال بهینه سازی مسئله مهمیه و توی وب هم اهمیتش بیشتر میشه.
خب مگه من گفتم مهم نیست؟
من یه موارد خاص و بهینه سازیهای خیلی جزیی اونایی که میدونم کلا درصد بسیار کوچکی از کل پرفورمنس برنامه رو تشکیل میدن میگم، شما میای یه چیزای دیگه که خیلی فرق میکنن خیلی درشت تر هستن رو میگی که من اصلا با اونا کار نداشتم و ندارم. یا میای کلی گویی و مبهم گویی میکنی همه چیز رو میریزی توی یک کاسه هم میزنی میگی ایناهاش اینه!
نقل قول:مثلاً وقتی با بنچمارک و تست واقعی ثابت میشه گرفتن تعداد عناصر آرایه قبل از حلقه بجای داخل بخش Condition حلقه رو نزدیک به 40 برابر سریعتر میکنه و مثلاً foreach توی آرایه های چند بعدی خیلی سریعتره، چرا نباید اهمیت رعایت این موارد رو گوشزد کنیم؟
خب این یکی انصافا مورد قابل توجه تری هست از بین چند مورد بهینه سازیهای جزیی مطرح شده. ولی حتی اینم حرف من اینه که دلیل نمیشه بگی چون 40 برابر سریعتره پس همیشه باید بهینه سازی بشه! اینجا شما فقط بخشی از واقعیت رو دیدی، یعنی فقط اون 40 برابر رو دیدی! هرکس فقط عدد 40 رو ببینه میگه اوه چقدر زیاد پس حتما اگر اینو رعایت کنم پرفورمنس برنامم خیلی بیشتر میشه، درحالیکه در واقعیت اینطور نیست.
40 برابر یک میلیونیوم میشه 40 میلیونیوم که هنوزم عدد ناچیزی هست.
40 برابر یک صدم درصد میشه 4 دهم درصد، که هنوزم درصد ناچیزی هست.
مهندس باور کن خیلی از مردم در ریاضی اینقدر ضعیف هستن که حتی چنین محاسبات رو هم نمیتونن بصورت ذهنی درست انجام بدن خیلی وقتا اشتباه میکنن من بارها دیدم. سوادها واقعا پایینه! حتی بین افرادی که مثلا برنامه نویس هستن!
حرف من اینه که اینکه بخوایم ببینیم چیزی در عمل تاثیر قابل توجه میذاره مهم هست ارزش پرداختن و زحمت دادن به خود در کدنویسی رو داره فقط به این نیست که چند برابر سریعتره، بلکه به اینه که چه کسری از پرفورمنس برنامه توی این چیزا صرف میشه. که من دارم میگم درمورد اینطور بهینه سازیهای جزیی این کسر در اکثر برنامه ها خیلی کوچکه.
بنظر من برای یه حلقهء عادی و وقتی شرایط خاص نداریم، هیچ لزومی نداره به خودمون زحمت بدیم چنین بهینه سازی ای بکنیم، چون در عمل تقریبا هیچ تاثیری نداره. ولی حالا اگر تعداد تکرار حلقه واقعا زیاد بود، اگر شرایط خاصی بود بهرحال، که سهمش در پردازش قابل توجه میشد، خب بهینه سازی میکنیم. اگر شما منظورت اون موارد هست من مخالفتی ندارم، ولی بهرحال حتی در این موارد هم اغلب تصوری که توی ذهنها هست تخمین و حدسهایی که زده میشه بیش از حدی هست که در واقعیت واقعا وجود داره.
نقل قول:شما که همیشه دنبال مستدل و با سند و مدرک حرف زدن بودی، چرا الان رو هوا داری میگی اینا مهم نیست؟ برو تست کن روی داده های سنگین ببین چقدر تأثیر دارن این موارد.
خوبه پس تا اینجا شما هم با من توافق داری که این مسائل درموارد معمولی و داده های کوچک تاثیر عملی چندانی در واقعیت نداره!
پس شرط داده های سنگین رو اضافه کردی. که البته اینم تاحدی کلی و مبهم هست چیز دقیق و ثابت شده و قابل محاسبه ای نیست فرمول و معیار و عددی به همراه نداره، ولی قابل درک و پذیرش هست. باز هر مورد باید دید و ارزیابی کرد یا حتی تست عملی کرد که واقعا چقدر ممکنه تاثیر در پرفورمنس دیده بشه.
حرف اینه که بهینه سازیهای خیلی جزیی جزو استثنائات هستن، نه قواعد کلی که همیشه باید رعایت کرد! ما در 80% کدهای برنامه شرایطی نداریم که این موارد تاثیر مشهودی روی پرفورمنس کلی برنامه داشته باشن، ولی در 20% هم شاید داشته باشیم. از برنامه به برنامه این درصدها میتونن کم و بیش متفاوت باشن البته.
استثناء رو در موارد استثناء رعایت میکنن اهمیت میدن، نه همیشه.
نقل قول:تیم توسعه فیسبوک مگه مریض بود بره یه زبان دیگه بنویسه و چیزی نزدیک به 9 میلیون خط کد بنویسه واسه کاری که بقول خود زاکربرگ توی کنفرانس مطبوعاتی، اگه قرار بود بهینه ننویسن و فقط کار کنه، دو سوم این خطوط اضافه بود؟!
ببین مهندس باز داری یه مطلب بی ربطی رو قاطی میکنی!
این قضیه فیسبوک چه ربطی داره به موارد و کارهای ما آخه؟
فیسبوک شرایطش خاصه در مقیاسی کار میکنه که خیلی شرایط خاص پیش اومده و میاد براشون و خواهد آمد که برای مقیاسهای معمول برای من و شما تقریبا هیچوقت دیده نمیشه یا مسئلهء جدی ای نیست میشه به روشهای ساده تر و کم هزینه تری هم حلش کرد.
فیسبوک خیلی کارها کرده خیلی چیزهای جدید فناوریهایی برای مقیاسهای بسیار بزرگ درست کرده که اینا رو شما توی سایتهای عادی نمیبینی و البته اکثرا نیاز آنچنانی هم نیست. درحالیکه خود فیسبوک اگر اینا رو نداشت تاحالا یا خوابیده بود یا نیاز داشت کلی سخت افزار و تشکیلات اضافه بخره کلی هزینه اضافی بکنه.
تازه اینا هم اکثرا دنبال راهکارهای سطوح دیگر میرن، میرن کارهای اساسی تر و کلی تری میکنن، مثلا کامپایلر مینویسن PHP رو تبدیل به سی++ کنه و غیره بقول شما زبان جدیدی درست میکنن، نه اینکه بیان در سطح کدنویسی عادی یکسری جزییات رو که در عمل 1% تاثیر میذارن و مشکلی رو حل نمیکنن رعایت کنن. یه راهکارهایی پیاده میکنن که بعدا قراره بارها در هر برنامه ای دیگه بصورت خودکار خودش عمل کنه نیاز به صرف وقت و انرژی دوباره و دوباره در کدنویسی و برای برنامه نویسان سطوح بالاتر نداره اونقدر، و بهرحال اینا برنامه های سیستمی برنامه های سرویس دهنده هستن، نه برنامه های سطح بالا و اپلیکیشن های سطح کاربر.
نقل قول:اینجا بحث بحث وبه و درخواستهای همزمان و منابع محدود. پس هر یک کیلوبایت هم در جای خودش اهمیت پیدا میکنه. شما دوست نداری، تو پروژه های خودت رعایت نکن!
یک کیلوبایت کم و بیشتر فکر نمیکنم برای بیشتر سایتهای معمولی برنامه های معمولی تاثیری داشته باشه. مگه همزمان چندتا کاربر دارن شما ضربدر اون کن ببین چقدر میشه آیا چند مگابایت و حتی چند ده مگابایت RAM بیشتر و کمتر در کل امروزه روز برای بیشتر کاربردها اهمیتی داره مشکلی ایجاد میکنه؟
با فیسبوک مقایسه نکن لطفا! گفتم که شما همه چیز رو با هم قاطی میکنی شرایط خاص و استثناها رو نمیشه و نباید کلیت داد.
فناوریهایی که فیسبوک استفاده میکنه الان روش بیشتر هاستها و سایتها نیست، اگر لازم بود خیلی مهم بود چرا پس نیست؟ شاید اگر بذارن برای بعضیا حداقل مفید و قابل استفاده باشه، ولی اصل استفاده و اهمیتش برای همون مقیاس برای همون امثال فیسبوک هست یا سایتهایی که بهرحال در مقیاس بزرگی باشن.
نقل قول:بحث PHP و C هم فرق میکنه. شما اگه تونستی توی ++C به همون راحتی PHP شئ گرا بنویسی برو بنویس. مقاومت دربرابر کدنویسی بهینه از اونجا ناشی میشه که یه عمر عادت کردیم هر دم بیلی برنامه بنویسیم و الان سختمونه استایل کدنویسیمون رو درست کنیم. این تاپیک ایجاد شده تا کسانی که میخوان تازه وارد این عرصه بشن، از همون اول روش درست رو یاد بگیرن. کسانی هم که تنبل نیستن و از تغییر نمیترسن هم روش کدنویسیشون رو اصلاح کنن.
خب منم همینو میگم دیگه! چون برنامه نویسی در سی و سی++ سخت تر حجیم تر و زمانبرتر از PHP هست، و طبیعتا میتونه به باگهای بیشتری هم منجر بشه، پس اون پرفورمنس افزوده رو بی خیال میشیم، چون ارزش وقت و انرژی برنامه نویس و پایداری و کیفیت و امنیت برنامه بیشتر از حتی چند برابر سرعت افزوده ای هست که با سی میشه بدست آورد. غیر از اینه؟
نقل قول:وقتی میشه با رعایت این اصول، یه وب سایت رو روی یه هاست اشتراکی بالا آورد، چرا رعایت نکنیم و مجبور بشیم پول سرور مجازی یا اختصاصی بدیم؟ چرا همش سنگینی کار رو باید گردن تجهیزات بندازیم؟ فهمیدنش واقعاً سخت نیست!!!
کدوم اصول؟
شما با اون بهینه سازیهای جزیی عمرا نمیتونید یه چیزی رو اونقدری سبک کنید که روی هاست اشتراکی که قبلا بالا نمیامده حالا خوب کار کنه! مشکل جای دیگس دوست عزیز اگر برنامه سنگینه یا واقعا نیاز داره سنگین باشه یا اینکه مشکل بهینه نبودن و الگوریتم های اشتباه و اینا توی چیزهای به مراتب بزرگتری هست، نه اینکه ++ رو قبل متغییر گذاشتی یا بعدش و خلاصه اینطور چیزا!
مثلا میگن جوملا سنگینه. خب بیاید این چند مورد بهینه سازیهای خیلی جزیی رو که من در این تاپیک بهشون گیر دادم توی خط به خط جوملا درست کنید، بعد ببینید پرفورمنس چقدر میره بالا! آیا مشکل سنگینی جوملا به این خاطر حل میشه مشکلش بخاطر این موارد جزیی بوده؟ معلومه که نه! اگر میشد مشکل سنگینی جوملا رو با این چیزهای جزیی حل کرد که خب تاحالا یکی انجامش داده بود و جوملا رو سریع کرده بودم. این کارها رو انجام میدی میای میبینی سرعتش فقط چند درصد زیادتر شده، که این مشکلی رو حل نمیکنه به هیچ وجه کافی نیست از اول ارزش انجام دادن هم نداشت! غیر از اینه؟