AWS SDK در PHP: از ۶۸ مگ به ۵ مگ
خلاصهٔ کاملتر
نویسنده میگه نصب کل AWS SDK برای چند تا عملیات S3 همیشه زیادی به نظرش میرسیده. تو یه اپ معمولی فقط نامرتبه، ولی تو سرورلس گرون تموم میشه: پکیج دیپلوی بزرگتر دیرتر آپلود میشه، کولد استارت (یعنی اولین اجرای تابع که باید همه چی رو از صفر باز و آماده کنه) کندتر میشه و به سقف سخت پلتفرم نزدیکتر میشی. مثالش محدودیت ۲۵۰ مگابایتی AWS Lambda در حالت باز شدهست که لایهها و رانتایم سفارشی هم داخلش حساب میشن.
برعکس نسخهٔ جاوااسکریپت، SDK پیاچپی سرویسها رو به پکیجهای جدا نشکسته. یه اسکریپت Composer داخل خودش هست که سرویسهای بیاستفاده رو هنگام نصب حذف میکنه. کافیه هوک pre-autoload-dump رو به متد Composer::removeUnusedServices از نامفضای Aws\Script\Composer وصل کنی و تو کلید extra بنویسی کدوم سرویسها رو لازم داری.
{
"scripts": {
"pre-autoload-dump": "Aws\\Script\\Composer\\Composer::removeUnusedServices"
},
"extra": {
"aws/aws-sdk-php": ["S3", "Sqs"]
}
}نتیجه اندازهگیریشدهست: بعد از composer update پیام حذف ۴۲۳ سرویس AWS میاد و vendor/aws از ۶۸ مگابایت به ۵.۱ مگ میرسه، کل پوشهٔ vendor هم ۷.۸ مگ میشه. نویسنده توضیح میده چرا هر دو عدد رو گفته: اولی نشون میده اسکریپت چی رو عوض کرده، دومی به پکیج واقعی دیپلوی لامبدا نزدیکتره، چون SDK به پکیجهایی بیرون از vendor/aws مثل Guzzle، اینترفیسهای PSR و پلیفیلهای سیمفونی هم وابستهست.
چند نکتهٔ عملی هم هست. چون هوک به pre-autoload-dump وصله، هر بار که Composer فایلهای autoload رو میسازه خودش اجرا میشه، پس تو CI/CD و بیلد داکر با composer install --no-dev بدون هیچ مرحلهٔ اضافه کار میکنه. اسم سرویسها باید دقیقاً مثل نامفضای کلاینتهای SDK باشه (S3، Sqs، DynamoDb). چندتا سرویس مثل S3، Kms، SSO و Sts هم محافظتشدهان و حذف نمیشن چون خود SDK داخلی ازشون استفاده میکنه. اگه چیزی رو حذف کردی و بعد لازمت شد، composer reinstall aws/aws-sdk-php کل بسته رو برمیگردونه.
سمت جاوااسکریپت این مسیر سالهاست طی شده: AWS SDK for JavaScript نسخهٔ ۳ از ۲۰۲۰ برای هر سرویس یه پکیج جدا داره، پس اگه فقط S3 لازم داری همون @aws-sdk/client-s3 رو نصب میکنی و node_modules حدود ۱۸ مگ میمونه. نویسنده میگه اسکریپت Composer داره همون مدل رو برای پیاچپی تقلید میکنه، و پیشنهادش اینه که اگه از AWS SDK در پیاچپی استفاده میکنی سراغ این هوک بری، چون یه تغییر کوچیک کانفیگه که وزن مرده رو از بیلدهای کند سرورلس و CI کم میکنه.
نکات کلیدی:
- نصب کامل SDK پیاچپی: حدود ۶۸ مگابایت در vendor/aws؛ محدود به S3 و SQS: ۵.۱ مگابایت.
- حذف با هوک pre-autoload-dump و لیست سرویسها در کلید extra انجام میشه، بدون مرحلهٔ اضافه در بیلد.
- S3، Kms، SSO و Sts قابل حذف نیستن چون SDK خودش داخلی ازشون استفاده میکنه.
- سقف زیپ باز شدهٔ AWS Lambda ۲۵۰ مگابایته و لایهها و رانتایم سفارشی هم داخلش حساب میشن.
- کد برنامه هیچ تغییری نمیکنه؛ همون S3Client و همون متدها سر جاشون میمونن.




