اذهب إلى المحتوى
  • 0

حل مشكله بطئ في جلب البيانات Node.js

Kirolos Nagy2

السؤال

المشكله دي بتواجهني في اي مشروع 
اني بكون مستخدم مثلا Node.js - Mongodb ورافع المشروع علي Render
ومثلا الموقع بيكون فيه منتجات 
المشكله بتيجي لما المنتجات دي بتكتر
وهي ان الباك ايند بيجيب كل المنتجات مره واحده لو هما 100 او 1000 او مليون 

هل فيه طريقه اعمل نفس نظام Facebook 
وهي ان المنتجات تيجي بالترتيب ياعني لما منتج يجي يظهر مش لازم يستني كل المنتجات تيجي كلهم وبعدين يظهرو

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

تواجه مشكلة شائعة عند التعامل مع كميات كبيرة من البيانات، وهي جلب جميع البيانات في نفس الوقت من قاعدة البيانات.

إليك بعض الحلول:

التقسيم إلى صفحات (Pagination)

  • اجلب البيانات بشكل مقسم إلى صفحات، مثلاً 10 منتجات في كل صفحة
  • أضف خيارات للمستخدم للتنقل بين الصفحات
  • حمل بيانات الصفحة الحالية فقط عند طلبها

التحميل التدريجي (Lazy Loading)

  • أظهر عدد محدود من المنتجات في البداية، مثلاً 10 منتجات
  • أضف خيار "تحميل المزيد" يقوم بجلب 10 إضافية عند الطلب
  • يوفر تجربة أسرع بتحميل أجزاء صغيرة من البيانات

استخدام Query Parameters لتحديد عدد العناصر والصفحة مثل limit=10&page=2 كما في التعليق السابق .

الحلول السابقة تحتاج شرح مطول لذلك قم بالبحث عن المصطلحات السابقة وحاول تطبيقها وستشاهد الفرق 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يفترض أنك في الواجهة تقوم بعرض جزء من المنتجات فقط، بالتالي الواجهة عندما تستدعي الباك ايند يجب أن تمرر المجال الذي تريد عرضه، أي لنفترض أن المنتجات لها أرقام فتقوم بتمرير رقم البداية و رقم النهاية، بحيث لا يتم إرسال إلا هذه المنتجات إلى الواجهة للعرض.

نفس العمل يجب أن تقوم به بين الباك و قاعدة البيانات، عليك استعمال أوامر مثل offset  و limit للقيام بجلب العناصر المرغوب بها فقط.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

1- الحل البديهي هو استخدام تقنية pagination لعرض المنتجات بشكل متتالي، وتسمح لك بتقسيم المنتجات إلى صفحات، بحيث يتم تحميل كل صفحة عند الحاجة إليها، وتستطيع استخدام تقنية pagination مع أي قاعدة بيانات، بما في ذلك MongoDB.

وإليك مثال على كيفية استخدام تقنية pagination لعرض المنتجات في Node.js:

const express = require("express");
const mongodb = require("mongodb");

const app = express();

// Connect to the database
const db = mongodb.connect("mongodb://localhost:27017/products");

// Get all products
const products = db.collection("products").find().toArray();

// Create a paginator
const paginator = new Paginator(products, 10);

// Get the next page of products
const nextPage = paginator.next();

// Render the products
app.get("/products", (req, res) => {
  res.send(nextPage);
});

app.listen(3000);

2- هناك خيار آخر وهو استخدام cursors لعرض المنتجات بشكل متتالي، وتسمح لك تلك التقنية بتصفح مجموعة من البيانات دون تحميلها بالكامل في الذاكرة، وبالطبع تستطيع استخدام cursors مع MongoDB.

مثال:

const express = require("express");
const mongodb = require("mongodb");

const app = express();

// Connect to the database
const db = mongodb.connect("mongodb://localhost:27017/products");

// Get all products
const cursor = db.collection("products").find();

// Iterate over the products
cursor.forEach((product) => {
  console.log(product);
});

app.listen(3000);

ويمكنك استخدام تقنية cursors لعرض المنتجات بشكل متتالي عن طريق استخدام دالة next() للتقدم إلى المنتج التالي.

3- وكحل آخر استخدم sharding لتوزيع البيانات على عدة خوادم، و سيساعد ذلك في تقليل وقت جلب البيانات من قاعدة البيانات. 

مثال:

const express = require("express");
const mongodb = require("mongodb");

const app = express();

// Connect to the database
const db = mongodb.connect("mongodb://localhost:27017/products");

// Shard the database
const sharding = new Sharding(db);

// Get all products
const products = sharding.collection("products").find().toArray();

// Render the products
app.get("/products", (req, res) => {
  res.send(products);
});

app.listen(3000);

والفكرية هي تقسيم مجموعة البيانات إلى عدة أجزاء يتم تخزينها على خوادم مختلفة، مما يساعد في تقليل وقت جلب البيانات من قاعدة البيانات.

بالإضافة إلى تحسين أداء قاعدة البيانات عن طريق تحسين خوارزميات البحث والفرز وتحسين بنية البيانات.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...