چرا کد شما به بهینه سازی نیازمند است؟
معمولا هنگام کدنویسی به طور مستمر در حال اتخاذ تصمیمات متفاوتی می باشیم و گزینه های مختلفی را امتحان می کنیم که ممکن است در نگاه اول معادل کدی که نوشتیم به نظر برسند. نتیجه این تغییرات به برنامه ای با کارآیی بهتری نسبت به کد اولیه منجر خواهد شد و این شرایط لازمه استفاده از تکنیک های بهینه سازی را توجیه می کند و به بیان دیگر کل فرآیند توسعه یک مسئاله بهینه سازی است که باید آن را رفع کرد.
مشکلات پیش روی برنامه نویسان تنها به بهینه سازی محدود نمی شوند و برنامه نویس باید چاره ای برای مشکلات تصمیم گیری و جستجو نیز پیدا کند. بهینه سازی فرآیندی است که مراحل توسعه وب را بیشتر از همه تحت تاثیر قرار می دهد. بهینه سازی کد در سطوح مختلف به وقوع می پیوندد، در توسعه وب تنها قادر به اعمال بهینه سازی های سطح بالا هستیم.
با بکار بردن الگوهای طراحی هوشمند می توان کد را در سطح معماری بهینه ساخت و با استفاده از بهترین روش های کدنویسی و ابزارهای مناسب می توان کد منبع را بهینه کرده و با آشنا ساختن اعضا با دستورالعمل ها و سبک های کدنویسی در جریان کاری می توان کارآیی تیم را نیز ارتقا بخشید.
مزایای بهینه سازی کد به موازات رشد پروژه افزایش می یابند، به طور معمول پروژه های کوچک با گذر زمان بزرگ می شوند و بکارگیری مهارت های بهینه سازی محض نتایج مثبت چشمگیری را به دنبال خواهد داشت.
1. کد تمیزتر
با پیشرفت پروژه توسعه دهندگان بیشتری آغاز به کار بر روی آن می کنند و موارد تکراری و همپوشانی ها دیر یا زود رونمایی می کنند و ناگهان متوجه می شویم که درک کد برای ما تا چه اندازه دشوار شده است.
در ذهن داشتن مفهوم "خود را تکرار نکنید" یکی از اصول ذهنی در توسعه نرم افزار کارآمد است. یک پایه کد با ساختاربندی خوب و بهینه سازی شده که در آن به دفعات نامحدود قادر به استفاده از عناصر مشابه باشید رویکرد خوبی است که موجب درک بهتر و آسان تر کد می گردد.
2. ثبات و سازگاری بهتر
ثبات و سازگاری مشابه کارهای خانه است و اگر به درستی صورت گیرد کسی متوجه آن نمی شود، اما در صورت غفلت از آن همه جا نامرتب و آشفته می گردد.
دستیابی به سازگاری کامل دشوار است و می توان در طول مراحل توسعه به آن دست یافت، اما توجه به استفاده از دستورالعمل های کد منسجم، API های سازگار و استانداردهای ثابت از مشکلات به طور چشمگیری می کاهد.
حفظ سازگاری کد هنگام سر و کار داشتن با کدهای Legacy و یا در شرایطی که توسعه دهندگان متعددی در پروژه درگیر هستند اهمیت بیشتری پیدا می کند.
3. وب سایت های سریع تر
بهینه سازی کد مشابه خرید یک خودروی سریع می باشد، بهینه سازی منجر به اجرای سریع تر کد شده و وب سایت یا اپلیکیشن حافظه کمتری را مورد استفاده قرار می دهد. فرآیند بهینه سازی نیازمند صرف زمان و هزینه است، اما نتیجه کار به تجربه بهتری منجر خواهد شد که نه تنها برای توسعه دهنده بلکه برای کاربران نیز مهم است.
هرچه کد سریع تر به اجرا در آید سرعت بارگذاری وب سایت نیز بهتر می شود. مبنی بر مطالعات صورت گرفته حدود نیمی از کاربران وب انتظار دارند تا وب سایت در کمتر از دو ثانیه بارگذاری شود و اگر بارگذاری وب سایت بیشتر از سه ثانیه به طول انجامد آن را رها می کنند، با این تفاسیر از مسئاله سرعت بارگذاری نمی توان چشم پوشی کرد.
4. خوانایی بهتر کد
خوانایی کد یک جنبه مهم از نگهداری کد می باشد. خواندن کد نامنظم دشوار بوده و در نتیجه درک آن نیز پیچیده می گردد و شرایط برای توسعه دهندگانی که به تازگی به پروژه ملحق شده اند به مراتب دشوارتر خواهد بود.
چنانچه از تکنیک های بهینه سازی کد مشابه موارد زیر به درستی استفاده کنیم، دیگر نیازی به دست و پنجه نرم کردن با کشف کد احساس نمی شود:
- استفاده از قواعد نام گذاری منسجم و نام های بامعنی مانند BEM
- قالب بندی ثابت با استفاده منطقی از تورفتگی ها، فضای خالی و فاصله گذاری عمودی
- اجتناب از مواردی مانند بکار بردن توضیحات آشکار یا کامنت های واضح که موجب شلوغی زیاد کد می شوند
پروژه های بزرگی مانند WordPress ،jQuery و Mootools دارای سبک و دستورالعمل های آشکاری برای کدنویسی هستند و تمامی افراد درگیر ملزم به پیروی این قواعد می باشند.
5. ریفکتورینگ کارآمدتر
استفاده از کدهای سایرین در توسعه وب بسیار رایج است، در نتیجه این کار سریعا درمی یابیم که برخی از این کدها از لحاظ ساختاربندی، کارآیی و یا قابلیت نگهداری آنچنان که باید بهینه نیستند، همین شرایط برای پروژه های قبلی ما نیز صادق است، چرا که در آن زمان تجربه کمتری در زمینه برنامه نویسی داشته ایم.
در برخی از شرایط اهداف یک پروژه بزرگ با گذشت زمان تغییر می کنند و در نتیجه نیازمند اولویت بندی موارد می باشیم.
در اینجا منظور از ریفکتورینگ تغییر کد کنونی و بهینه سازی آن است، اما عملکردها دستخوش هیچگونه تغییری نمی شوند. ریفکتورینگ باید با دقت زیادی انجام شود، چرا که در صورت پیاده سازی نادرست، کد نتیجه شده بهینگی کمتری نسبت به کد اصلی خواهد داشت. خوشبختانه تکنیک های تست شده متعددی در اختیار ما قرار دارد که فرآیند ریفکتورینگ را تسهیل می بخشند.
6. فرآیند دیباگ ساده تر
دیباگ بخش عمده ای از فرآیند توسعه وب را به خود اختصاص داده و معمولا کاری خسته کننده و دلهره آور قلمداد می شود. دیباگ کردن کدی که خودتان نوشته اید دشوار است، اما شرایط زمانی که مجبور به یافتن خطا در کدهای سایرین هستید به مراتب دشوارتر می گردد، مخصوصا زمانی که کد نوشته شده غیرحرفه ای بوده و تنها توابع را گرد هم آورده باشد.
طراحی هوشمند و الگوهای معماری همچون استفاده از آبجکت ها و ماژول های مختلف و دستورالعمل های کدنویسی مشخص و واضح فرآیند دبیاگ کردن را تسهیل می بخشد.
7. جریان کاری بهبودیافته
بسیاری از پروژه های توسعه وب توسط تیم های توزیع شده مانند انجمن های اپن سورس و تیم های از راه دور به اجرا در می آیند. یکی از دشوارترین بخش ها در مدیریت چنین جریان کاری یافتن راهی برای کارآمد نمودن ارتباطات و قادر ساختن اعضای تیم برای درک متقابل یکدیگر است تا دیگر به طور مداوم مجبور به بحث بر سر پیش فرض ها نباشند.
توافقات درباره بهترین روش ها و دستورالعمل ها شکاف بین افراد با پیش زمینه های گوناگون را پر می کند.
در حقیقت بهینه سازی کد بهینه سازی جریان کاری نیز تلقی می شود، زیرا اعضای تیم با یک زبان رایج با یکدیگر به تعامل می پردازند و اهداف تعریف شده ای را به اشتراک می گذارند و به راحتی با یکدیگر کار می کنند.
8. نگهداری کد به شکل آسان تر
نوشتن کد از گام نخست جذاب تر و هیجان انگیزتر از کار بر روی کدهای قبلی است، اما گاه به نگهداری کد به صورت مداوم نیاز است. کار با سیستم های موجود دیدگاه ها و نگرش های جدیدی را درباره بهینه سازی کد در اختیار ما قرار می دهد و علاوه بر این تجربه ای متفاوت با بهینه سازی های اولیه در یک پروژه جدید می باشد.
در نگهداری نرم افزار به مشکلاتی در ارتباط با کارآیی و کارآمدی برمی خوریم که به جای موارد فرضی با کاربران واقعی سر و کار داریم. استفاده از کنترل قابل اعتماد نسخه، مدیریت وابستگی، پلتفرم های نمایش و تست و مستندسازی مناسب روش هایی برای عملکرد بهتر می باشند.
9. توسعه امکانات به شکل سریع تر
اساس مرتبط ماندن در این رشته نوآوری به صورت مداوم می باشد، اگر ارائه دهنده چیز جدیدی به کاربران خود نباشیم به راحتی کنار گذاشته خواهیم شد. در صورت استفاده از کدهای بهینه و تمیز، گسترش پروژه و افزودن قابلیت های جدید به آن راحت تر و سریع تر صورت می پذیرد.
به غیر از متدهای بهینه سازی کدی که مورد بحث قرار گرفت، می توان از متدهای مدیریت مدرن نیز استفاده کرد، برای نمونه می توان به جای استفاده از مدل سنتی آبشاری از مدل های چرخه عمر تکرارشونده استفاده کرد.
10. بدهی فنی کمتر
عبارت Technical Debt برای اولین بار توسط Ward Cunningham مورد استفاده قرار گرفت. این عبارت به مقایسه نتایج تصمیمات برنامه نویسی نامناسب که در طول زمان به بدهی های مالی منجر می شوند که در آن مردم در ازای آنها بهره پرداخت می کنند تا در زمان حال پول دریافت کنند ارتباط پیدا می کند.
این تصمیمات غیربهینه معمولا به رفع سریع، برنامه نویسی copy-paste، هاردکدینگ، برنامه نویسی cargo-cult و سایر عادات کاری درهم ریخته منجر می شوند.
اجتناب از بدهی های فنی به طور کامل غیرممکن است، چرا که حتی تصمیم گیری های خوب هم ممکن است نتایج ناخواسته ای را در آینده به دنبال داشته باشند، اما اگر کدهای خود را به طور مداوم و با دقت بهینه کنیم بدهی های مالی کمتری گریبان گیر ما خواهند شد.