آیا هنر بهینهسازی خالص را از دست دادهایم؟
مهندسان اولیه با محدودیتهای بسیار ناچیزی کار میکردند. کامپیوتر هدایت آپولو تنها ۲ کیلوبایت رم داشت. هر بیت اهمیت داشت. هر چرخه پردازنده (CPU cycle) حیاتی بود.
امروزه ما گیگابایتها حافظه داریم. ما اغلب مشکلات را با افزودن سختافزار بیشتر حل میکنیم. اگر کد کند یا سنگین باشد، رم بیشتری اضافه میکنیم. این عادت باعث میشود مهارت بهینهسازی خالص را از دست بدهیم.
شما میتوانید با فکر کردن به محدودیتها، نرمافزار بهتری بنویسید.
نگاهی بیندازید به اینکه چگونه یک فایل متنی بزرگ را در Python پردازش میکنید.
روش رایج: بسیاری از توسعهدهندگان کل یک فایل را به یکباره در حافظه میخوانند.
- شما از
f.readlines()استفاده میکنید. - این کار هر خط را در یک لیست در رم شما بارگذاری میکند.
- اگر فایل شما ۱۰ گیگابایت باشد، به ۱۰ گیگابایت رم نیاز دارید.
- این رویکرد در سرورهای کوچک یا دستگاههای با محدودیت مواجه به مشکل میخورد.
روش بهینهشده: فایل را خط به خط پردازش کنید.
- شما مستقیماً روی شیء فایل (file object) پیمایش میکنید.
- Python یک خط را میخواند، آن را پردازش میکند و به سراغ خط بعدی میرود.
- میزان استفاده از حافظه شما کم و ثابت میماند.
- فرقی نمیکند که فایل ۱ مگابایت باشد یا ۱۰۰ گیگابایت.
تفاوت در فلسفه مهندسی است.
افزودن منابع بیشتر یک راه حل موقت است و نرمافزاری شکننده ایجاد میکند. استفاده از محدودیتها برای هدایت طراحی، نرمافزاری مقاوم میسازد.
بهینهسازی فقط به معنای سرعت نیست؛ بلکه به معنای هوشیاری نسبت به منابع است.
وقتی کد مینویسید، از خود بپرسید:
- این چقدر حافظه مصرف میکند؟
- اگر حجم دادهها ده برابر شود، آیا این کد همچنان کار خواهد کرد؟
- آیا برای پنهان کردن کد بد، به سختافزار گرانقیمت تکیه کردهام؟
نرمافزار بهتر از انضباط حاصل میشود.
منبع: https://dev.to/prabashanadev/have-we-lost-the-art-of-pure-optimization-31b9