01 Mar 2025, 20:31
การเรียก API เป็นหนึ่งในกระบวนการที่ส่งผลต่อประสิทธิภาพของแอป Flutter หากทำได้ไม่ดี อาจทำให้แอปโหลดช้าและประสบการณ์ใช้งานแย่ลง มาดูวิธีปรับปรุงให้เร็วขึ้นกัน!
1. ใช้ Concurrent Requests
แทนที่จะเรียก API ทีละตัว ให้ใช้ Future.wait()
เพื่อเรียกหลาย API พร้อมกัน ใช้เมื่อ API ไม่ต้องรอข้อมูลจากกันและกัน
Future<void> fetchData() async {
final results = await Future.wait([
http.get(Uri.parse('https://api.example.com/user')),
http.get(Uri.parse('https://api.example.com/posts')),
]);
final userData = jsonDecode(results[0].body);
final postsData = jsonDecode(results[1].body);
print(userData);
print(postsData);
}
2. เปิดใช้ HTTP Keep-Alive
ลดเวลาการเชื่อมต่อใหม่ทุกครั้งด้วย HttpClient
แทน http
library ปกติ วิธีนี้ช่วยลด Latency ได้ โดยเฉพาะเมื่อมีการเรียก API บ่อย
final client = HttpClient()..idleTimeout = const Duration(seconds: 15);
Future<void> fetchData() async {
final request = await client.getUrl(Uri.parse('https://api.example.com/data'));
final response = await request.close();
final responseBody = await response.transform(utf8.decoder).join();
print(responseBody);
}
3. ใช้ Compression (Gzip)
บีบอัดข้อมูลตอบกลับ ลดขนาด Payload เซิร์ฟเวอร์ต้องรองรับ Gzip ด้วย
final response = await http.get(
Uri.parse('https://api.example.com/data'),
headers: {'Accept-Encoding': 'gzip'},
);
4. ใช้ Cache ลดจำนวน API Calls
ลดภาระเซิร์ฟเวอร์ เหมาะกับข้อมูลที่ไม่เปลี่ยนแปลงบ่อย
import 'package:shared_preferences/shared_preferences.dart';
Future<String?> getCachedData() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString('cached_response');
}
Future<void> fetchData() async {
final cachedData = await getCachedData();
if (cachedData != null) {
print('ใช้ Cache: $cachedData');
return;
}
final response = await http.get(Uri.parse('https://api.example.com/data'));
final responseBody = response.body;
final prefs = await SharedPreferences.getInstance();
prefs.setString('cached_response', responseBody);
print('เรียก API: $responseBody');
}
5. ใช้ Compute() ลดการบล็อก UI
เหมาะสำหรับ JSON ขนาดใหญ่ ช่วยให้ UI ไม่กระตุก
import 'dart:convert';
import 'package:flutter/foundation.dart';
Future<void> fetchData() async {
final response = await http.get(Uri.parse('https://api.example.com/data'));
final parsedData = await compute(parseJson, response.body);
print(parsedData);
}
List<dynamic> parseJson(String body) {
return jsonDecode(body);
}
สรุป
ทำตามเทคนิคเหล่านี้ แล้วแอปของคุณจะโหลด API ได้เร็วขึ้น