خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

5 نکته عملی عملکرد برای Express.js REST API

یک API باید تا آنجا که می تواند سریع عمل کند تا به تعداد زیادی از مشتریان خدمات ارائه دهد. از این نکات برای تنظیم API های خود برای حداکثر سرعت استفاده کنید.

پذیرش سریع معماری میکروسرویس، نقش APIها را به عنوان ابزار اصلی ارتباط برای توسعه مدرن مستحکم کرده است. API ها ابزاری کارآمد برای تبادل داده بین کلاینت ها و برنامه های کاربردی سمت سرور و همچنین بین سیستم های باطن مختلف ارائه می کنند.

Express.js یک راه حل زیبا برای ساخت API های RESTful ارائه می دهد. اما اولویت بندی معیارهای عملکرد در طول توسعه ضروری است.

این تضمین می کند که API های شما نه تنها به طور موثر عمل می کنند، بلکه عملکرد بهینه ای نیز دارند. در نهایت، یک برنامه وب با عملکرد خوب منجر به تجربه کاربری بهتر و شانس بیشتری برای موفقیت می شود.

بهینه سازی عملکرد برای Express.js REST API

Express.js از طبیعت ناهمزمان Node.js و معماری رویداد محور برای دستیابی به سطوح استثنایی از سرعت و عملکرد استفاده می کند.

با این وجود، بهینه سازی API های REST Express.js می تواند مزایای بیشتری به همراه داشته باشد. این موارد شامل بهبود قابل توجه زمان پاسخ، قابلیت اطمینان افزایش یافته و افزایش کارایی برنامه های شما است که منجر به تجربه کاربر یکپارچه و جذاب می شود.

با اولویت بندی عملکرد API های خود، راه را برای موفقیت نرم افزار خود به عنوان یک کل هموار می کنید.

مردی پشت میز نشسته و روی لپ تاپ با کد روی صفحه تایپ می کند.

در اینجا برخی از نکاتی وجود دارد که می توانید از آنها برای بهبود عملکرد API های REST خود استفاده کنید.

1. پرس و جوهای پایگاه داده را بهینه کنید

بازیابی و دستکاری کارآمد داده ها از یک پایگاه داده می تواند به طور قابل توجهی بر عملکرد API های REST تأثیر بگذارد.

با بهینه سازی کوئری های پایگاه داده، می توانید زمان اجرای پرس و جو را به میزان قابل توجهی کاهش دهید و مصرف منابع را کاهش دهید. این در نهایت عملکرد برنامه Express.js شما را به عنوان یک کل افزایش می دهد.

در اینجا چند نکته مفید برای بهینه سازی پرس و جوهای پایگاه داده آورده شده است.

  1. از فهرست های پایگاه داده استفاده کنید. ستون های پرکاربرد در پرس و جوها را شناسایی کنید و نمایه های مناسب روی آن ستون ها ایجاد کنید. این به موتور پایگاه داده اجازه می دهد تا به سرعت داده های مورد نیاز را پیدا و بازیابی کند و در نتیجه اجرای پرس و جو سریعتر انجام شود.
  2. صفحه بندی را پیاده سازی کنید. وقتی با مجموعه داده های بزرگ سروکار دارید، از صفحه بندی استفاده کنید. به جای واکشی یکباره همه داده ها، مقدار داده های برگردانده شده در هر پرس و جو را محدود کنید.
  3. از پرس و جوهای اضافی خودداری کنید. کد خود را تجزیه و تحلیل کنید، شناسایی کنید، و هرگونه درخواست اضافی را حذف کنید. تنظیم مجدد درخواست های شما بر این اساس می تواند منجر به بهبود عملکرد قابل توجهی شود.
مطلب مرتبط:   PyScript بتا به شما امکان می دهد پایتون را در مرورگر اجرا کنید

2. از Caching در سراسر برنامه خود استفاده کنید

کش کردن تکنیکی است که برای ذخیره داده‌هایی که به طور مکرر در دسترس هستند در یک حافظه پنهان، یک سیستم ذخیره‌سازی موقت استفاده می‌شود. به بیان ساده، زمانی که یک کلاینت داده درخواست می کند، سرور به جای پرس و جو مستقیم از پایگاه داده، ابتدا حافظه پنهان خود را بررسی می کند.

اگر داده های درخواستی را در حافظه پنهان پیدا کند، بلافاصله آن را برمی گرداند و نیاز به پردازش بیشتر یا دسترسی واقعی به پایگاه داده را دور می زند. این به طور قابل توجهی عملکرد API ها را با کاهش زمان پاسخ و به حداقل رساندن بار روی برنامه به خصوص هنگام پردازش چندین پرس و جو بهبود می بخشد.

در اینجا یک مثال کد ساده است که نحوه پیاده سازی کش را نشان می دهد.

const express = require('express');
const NodeCache = require('node-cache');

const cache = new NodeCache();
const app = express();

app.get('/api/data', (req, res) => {
  const cacheKey = 'data';
  const cachedData = cache.get(cacheKey);
  
  if (!cachedData) {
    const fetchedData = fetchDataFromDatabase();
    cache.set(cacheKey, fetchedData);
    cachedData = fetchedData;
  }

  res.json(cachedData);
});

function fetchDataFromDatabase() {
  // ... data fetching logic goes here ...
  return data;
}

کد بالا نشان می دهد که چگونه کش با استفاده از کتابخانه گره کش کار می کند. در ابتدا، بررسی می کند که آیا داده های درخواستی قبلاً در حافظه پنهان ذخیره شده اند یا خیر. اگر داده وجود نداشته باشد، تابع را برای واکشی داده ها از پایگاه داده فعال می کند، سپس داده های واکشی شده را در حافظه پنهان ذخیره می کند. در نهایت، داده های درخواستی را به عنوان پاسخ JSON به مشتری برمی گرداند.

مطلب مرتبط:   نحوه پیاده سازی کنترل دسترسی مبتنی بر نقش در Express.js REST API با استفاده از Passport.js و JWT

3. فشرده سازی HTTP را فعال کنید

فشرده‌سازی HTTP تکنیکی است که می‌توانید از آن برای کاهش اندازه داده‌های منتقل شده بین مشتری و سرور استفاده کنید. این شامل فشرده سازی پاسخ های API در سمت سرور و از حالت فشرده سازی آنها در سمت مشتری است.

با فعال کردن فشرده سازی HTTP، اندازه بارهای پاسخ می تواند به طور قابل توجهی کاهش یابد و منجر به زمان پاسخ سریع تر شود.

در اینجا یک مثال کد است که نشان می دهد چگونه فشرده سازی HTTP را با استفاده از میان افزار فشرده سازی فعال کنید.

express = require('express');
const compression = require('compression');

const app = express();
app.use(compression());

app.get('/api/data', (req, res) => {
  // Handle your API logic
});

این قطعه کد از میان افزار برای فشرده سازی پاسخ های API قبل از بازگرداندن آنها به مشتری استفاده می کند.

4. پردازش موازی را با استفاده از Promise.all اجرا کنید

پردازش موازی با استفاده از روش Promise.all تکنیکی است که برای بهبود عملکرد API ها با اجرای چندین کار ناهمزمان به طور همزمان استفاده می شود.

Promise.all با استفاده از قدرت وعده های جاوا اسکریپت به شما این امکان را می دهد که مجموعه ای از وعده ها را به طور همزمان اجرا کنید، نه اینکه منتظر بمانید تا هر وعده به طور متوالی حل شود.

این تکنیک به ویژه زمانی مفید است که وظایف مستقلی دارید که می توانند به طور همزمان اجرا شوند، مانند ایجاد چندین درخواست API مرتبط به نقاط پایانی مختلف. با اجرای موازی این وظایف، می توانید زمان اجرای کلی را به میزان قابل توجهی کاهش دهید و پاسخگویی API خود را بهبود ببخشید.

در اینجا یک مثال کد ساده است که نحوه پیاده سازی پردازش موازی با استفاده از Promise.all را نشان می دهد.

const express = require('express');
const axios = require('axios');

const app = express();

app.get('/api/data', async (req, res) => {
  try {
    const request1 = axios.get('https://api.example.com/endpoint1');
    const request2 = axios.get('https://api.example.com/endpoint2');
    const request3 = axios.get('https://api.example.com/endpoint3');

    const [response1, response2, response3] = await Promise.all([
      request1,
      request2,
      request3
    ]);

    // Process the responses as needed
  } catch (error) {
    res.status(500).json({ error: 'error' });
  }
});

در این مثال، کد درخواست های API را به سه نقطه پایانی مختلف ارسال می کند. با استفاده از تابع Promise.all، با ارسال آرایه‌ای از وعده‌ها، کد منتظر می‌ماند تا همه آن‌ها قبل از بازگرداندن پاسخ‌ها در یک آرایه تمام شوند.

مطلب مرتبط:   MapReduce چگونه در یک سیستم فایل داده بزرگ کار می کند؟

وقتی همه پاسخ ها را دریافت کردید، می توانید آنها را در صورت نیاز پردازش کنید. با این حال، باید مراقب این رویکرد باشید و از استفاده بیش از حد خودداری کنید، زیرا ممکن است سرور را بیش از حد بارگذاری کند و باعث گلوگاه پاسخ API شود.

5. از Database Connection Pooling استفاده کنید

ادغام اتصال پایگاه داده روشی است که شامل ایجاد مجموعه ای از اتصالات پایگاه داده قابل استفاده مجدد برای رسیدگی به درخواست های متعدد مشتری به طور موثر است.

به جای ایجاد یک اتصال جدید برای هر درخواست، برنامه از اتصالات موجود از استخر مجددا استفاده می کند و هزینه سربار ایجاد اتصالات جدید را کاهش می دهد و در نتیجه اجرای پرس و جو سریعتر و کارآمدتر می شود.

در اینجا یک نمونه کد کوتاه وجود دارد که نحوه استفاده از ادغام اتصال پایگاه داده با Mongoose را در برنامه Express.js نشان می دهد.

const mongoose = require('mongoose');
const { connection } = require('mongoose');

const connectionOptions = {
  poolSize: 10,
  useNewUrlParser: true,
  useUnifiedTopology: true
};

mongoose.connect('mongodb://localhost/mydatabase', connectionOptions);

در این مثال، ویژگی اتصال Pool size روی 10 تنظیم شده است – این حداکثر تعداد اتصالات در استخر را مشخص می کند.

با تنظیم این پیکربندی، API می‌تواند از اتصالات استفاده مجدد کند و در نتیجه عملکرد API را با کاهش سربار ایجاد اتصالات جدید برای هر درخواست بهبود می‌بخشد.

اولویت بندی عملکرد API برای سود

چندین مرحله وجود دارد که می توانید برای بهینه سازی عملکرد API های Express.js خود بردارید. API ها نقش مهمی ایفا می کنند، بنابراین ضروری است که روی عملکرد آنها تمرکز کنید تا موفقیت کلی نرم افزار خود را تضمین کنید.