Spring Boot رایجترین فریمورک برای ایجاد APIهای REST در جاوا است. این فریمورک تمامی تنظیمات و کدهای پیشفرض را مدیریت میکند و ما تنها باید منطق اصلی را پیادهسازی کنیم.
با بزرگتر شدن API و استفاده زیاد مشتریان، ممکن است عملکرد آن کاهش یابد.
در این مقاله به بررسی چند تکنیک میپردازیم که میتواند عملکرد API در برنامههای Spring Boot را بهبود بخشد.
استفاده کارآمد از @Async و @CompletableFuture
Spring Boot محدودیتی در تعداد درخواستهای همزمان دارد. اما اگر محاسبات سنگینی وجود داشته باشد که میتوان آنها را در یک نخ جداگانه اجرا کرد، این کار میتواند به بهبود عملکرد منجر شود.
برخی وظایف، مانند لاگگذاری، میتوانند به صورت غیرهمزمان انجام شوند تا تأخیر API کاهش یابد.
ابتدا باید Async را فعال کنیم:
import org.springframework.context.annotation.Configuration; @Configuration |
ایجاد یک سرویس
import org.springframework.scheduling.annotation.Async; @Service @Async // Tells Spring to run this in a separate thread
|
سپس میتوانیم سرویس را به این صورت فراخوانی کنیم:
CompletableFuture<String> future result = slowService.performSlowTask(data); |
Spring WebFlux یک فریمورک غیرمسدودکننده و واکنشگرا است. این فریمورک از مدل event-loop استفاده میکند که تعداد کمی نخ ثابت دارد تا ارتباطات همزمان بسیاری را بهطور کارآمد مدیریت کند.
@GetMapping("/reactive-process") // Simulate a non-blocking delay (like a reactive API call) |
پایگاههای داده معمولاً بزرگترین عامل محدودکننده در بهبود عملکرد API هستند.
حتی اگر شاخصها تنظیم شده باشند، استراتژیها و پرسوجوهای ناکارآمد میتوانند منجر به عملکرد ضعیف شوند.
چه تکنیکهایی میتوانند در این زمینه کمک کنند؟
استفاده از استراتژیهای کش پیشرفته(Using Advanced Caching Strategies)
همه ما میدانیم که کش میتواند عملکرد را با بازگرداندن نتایج به جای درخواست دادههای مشابه از پایگاه داده یا تماسهای شبکهای، بهبود بخشد.
بهینهسازی سریالسازی دادهها(Optimizing the Data Serialization)
سریالسازی یا دسیریالسازی میتواند زمان و حافظه زیادی برای اشیاء پیچیده بزرگ مصرف کند.
مثال فایل product.proto
syntax = "proto3"; option java_package = "com.example.myapp.dto.proto"; message Product { |
پیکربندی فشردهسازی درخواست و پاسخ
پاسخهای API میتوانند بزرگ باشند، بهویژه اگر از JSON استفاده میکنیم. این میتواند باعث کاهش تأخیر API شود، زیرا هرچه اندازه بسته بزرگتر باشد، زمان بیشتری برای انتشار آن در شبکه نیاز است.
میتوانیم Spring Boot را برای فشردهسازی خودکار پاسخهای HTTP با استفاده از GZip یا سایر فناوریهای فشردهسازی پیکربندی کنیم.
نمونهای از application.properties برای فشردهسازی پاسخها
# Enable response compression # Specify the MIME types that should be compressed # Minimum response size (bytes) to trigger compression. Don't compress tiny responses. # You can also specify which user agents to exclude (if some have issues) # Brotli support (if available on the server classpath/environment - requires specific setup)
|
تنظیمات JVM
بسیاری از تنظیمات JVM میتوانند بر عملکرد و پایداری API تأثیر بگذارند.
نمونهای از تنظیمات JVM
# Start with 1GB initial heap, 2GB max heap, using G1GC # Example: Potentially using ZGC (requires compatible JDK) |
در این مقاله تکنیکهای پیشرفتهای برای بهبود عملکرد API پوشش داده شد. اما نکات مهمی نیز باید در نظر گرفته شوند:
لیست دوره های آکادمی جاواپرو
بستن *نام و نام خانوادگی * پست الکترونیک * متن پیام |
دوره های آموزشی برنامه نویسی
انجام پروژه های برنامه نویسی
تدریس خصوصی برنامه نویسی
بیش از 7 سال از فعالیت جاواپرو میگذرد
جاواپرو دارای مجوز نشر دیجیتال از وزارت فرهنگ و ارشاد اسلامی است
جهت ارتباط مستقیم با جاواپرو در واتساپ و تلگرام :
09301904690
بستن دیگر باز نشو! |