إزاي تعمل Pagination احترافي في الـ APIs وتخلي السيرفر بتاعك يطير؟
تخيل إنك بتبني تطبيق، وعندك جدول فيه مليون مستخدم، وفجأة قررت تعمل Get request عشان تجيب كل المستخدمين دول مرة واحدة. النتيجة؟ السيرفر بتاعك هيهنج، الذاكرة (Memory) هتتملي، والـ Client هيقعد مستني لحد ما الكون يخلص. دي اللحظة اللي بتدرك فيها إن الـ Pagination مش مجرد "ميزة إضافية"، ده ضرورة حتمية عشان الـ API بتاعك يعيش.
في المقال ده، هنتكلم عن طرق تقسيم البيانات (Data Pagination) بطريقة تخلي الـ Web Development بتاعك احترافي ومستقر.
Table of contents [Show]
يعني إيه Pagination وليه محتاجينه؟
الهدف ببساطة هو إننا نقسم الداتا الكبيرة لمجموعات صغيرة (Pages أو Chunks). ده بيقلل الـ Latency، بيحمي قاعدة البيانات (Database) من الانهيار، وبيخلي تجربة المستخدم (User Experience) أسرع بكتير. عندنا طريقتين هما الأشهر في السوق، خلينا نشوفهم بالتفصيل.
الطريقة الأولى: الـ Offset Pagination (التقليدية)
دي الطريقة اللي أغلبنا بدأ بيها. بنستخدم الـ Query Parameters زي limit و offset. فكرتها إننا بنقول للسيرفر: "سيب أول 20 سجل وهات اللي بعدهم".
مثال على الـ Request:
GET /api/users?limit=20&offset=40
المميزات: سهلة جداً في التنفيذ، وبتقدر تنط لصفحة معينة (مثلاً روح لصفحة 10 مباشرة).
العيوب: مع الوقت، الـ Performance بيبدأ يقع. ليه؟ لأن قاعدة البيانات بتضطر "تعدي" على كل السجلات اللي قبل الـ Offset عشان توصل للمكان اللي أنت عايزه، وده بيرهق الـ DB جداً لما الداتا تكبر.
الطريقة الثانية: الـ Cursor Pagination (طريقة المحترفين)
دي الطريقة اللي بتستخدمها فيسبوك وتويتر. بدل ما نستخدم الـ Offset، بنستخدم "مؤشر" أو (Cursor). الكيرسور ده عادة بيكون الـ ID بتاع آخر عنصر وصلك.
مثال على الـ Request:
GET /api/users?limit=20&after=user_id_500
ليه دي أحسن؟ لأن الـ Database بتعمل Query باستخدام الـ Index بتاع الـ ID، فبتوصل للبيانات فوراً من غير ما تعدي على اللي قبلها. الطريقة دي ممتازة جداً لو الداتا عندك بتتغير باستمرار (Real-time data)، لأنها مش بتعتمد على أرقام الصفحات اللي ممكن تتبدل لو حد ضاف سجل جديد.
إزاي تختار بينهم؟
- لو الداتا بتاعتك ثابتة أو صغيرة (زي قائمة أقسام في متجر)، الـ Offset Pagination هتكون كافية وسهلة.
- لو بتعمل Feed (زي إنستجرام) أو عندك ملايين السجلات، لازم تستخدم Cursor Pagination عشان تضمن السرعة.
نصيحة من أخ لمبرمج زميل
يا صاحبي، التقنية اللي تختارها مش هي اللي بتخليك مبرمج شاطر، شطارتك بتظهر لما تعرف "إمتى" تستخدم كل أداة. لو لسه بتبدأ، جرب تنفذ الـ Offset في مشروع صغير، ولما تحس إنك جاهز، انقل مشروعك للـ Cursor عشان تتعلم التعامل مع البيانات الضخمة. دايماً اقرأ الـ Documentation بتاع الـ API اللي بتستهلكه، هتلاقي أفكار عبقرية في تصميم الـ Response بتبني بيها خبرتك.