Background Task তৈরি করা

Background Process এবং Task Scheduling - ইলেকট্রন  (Electron) - Web Development

271

ইলেকট্রন অ্যাপ্লিকেশনে background tasks তৈরি করা একটি গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপের ব্যাকগ্রাউন্ডে কিছু কাজ চালানোর জন্য ব্যবহৃত হয়। এগুলো সাধারণত অ্যাপের প্রধান UI তে ব্যাঘাত না ঘটিয়ে এক্সটার্নাল বা ব্যাকগ্রাউন্ড কাজগুলো চালানোর জন্য ব্যবহৃত হয়, যেমন ডেটা ফেচিং, ফাইল প্রসেসিং, বা কোনো দীর্ঘ-running প্রসেস।

Electron অ্যাপ্লিকেশনে ব্যাকগ্রাউন্ড টাস্ক তৈরি করতে Main Process ব্যবহার করা হয়। এটি setTimeout, setInterval, Promise এবং অন্যান্য অ্যাসিঙ্ক্রোনাস ফাংশনগুলির মাধ্যমে ব্যাকগ্রাউন্ড কাজ সম্পাদন করতে পারে।

নিচে ব্যাকগ্রাউন্ড টাস্ক তৈরি করার কয়েকটি পদ্ধতি এবং উদাহরণ দেওয়া হলো।


১. Main Process এ ব্যাকগ্রাউন্ড টাস্ক তৈরি করা

Main Process এ ব্যাকগ্রাউন্ড টাস্ক চালানোর জন্য আপনি সাধারণত setInterval() বা setTimeout() ব্যবহার করতে পারেন। এই ফাংশনগুলি ব্যাকগ্রাউন্ডে কোড চালাতে সহায়ক।

উদাহরণ: setInterval() ব্যবহার করে ব্যাকগ্রাউন্ড টাস্ক

const { app, BrowserWindow, ipcMain } = require('electron');

let mainWindow;
let backgroundTaskInterval;

app.on('ready', () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });

  mainWindow.loadFile('index.html');

  // ব্যাকগ্রাউন্ড টাস্ক শুরু করা
  backgroundTaskInterval = setInterval(() => {
    console.log("ব্যাকগ্রাউন্ড টাস্ক চলছে...");
    mainWindow.webContents.send('background-task', 'ব্যাকগ্রাউন্ড টাস্ক চলছে...');
  }, 5000); // প্রতি 5 সেকেন্ড পর পর টাস্ক চালাবে

  // অ্যাপ বন্ধ হলে ব্যাকগ্রাউন্ড টাস্ক বন্ধ করা
  app.on('before-quit', () => {
    clearInterval(backgroundTaskInterval);  // ব্যাকগ্রাউন্ড টাস্ক বন্ধ করা
    console.log('ব্যাকগ্রাউন্ড টাস্ক বন্ধ');
  });
});

এই কোডে, setInterval() ব্যবহার করা হয়েছে ব্যাকগ্রাউন্ডে প্রতি 5 সেকেন্ড পর পর একটি টাস্ক চালানোর জন্য, যা কনসোলে "ব্যাকগ্রাউন্ড টাস্ক চলছে..." মেসেজ দেখাবে এবং Renderer Process-এ মেসেজ পাঠাবে।


২. Renderer Process এ ব্যাকগ্রাউন্ড টাস্ক থেকে ডেটা গ্রহণ করা

Renderer Process-এ সেই ব্যাকগ্রাউন্ড টাস্কের ডেটা গ্রহণ করতে ipcRenderer ব্যবহৃত হবে।

উদাহরণ: Renderer Process (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Background Task Example</title>
</head>
<body>
  <h1>Electron Background Task Example</h1>
  <p id="taskStatus">ব্যাকগ্রাউন্ড টাস্ক চলছে না।</p>

  <script>
    const { ipcRenderer } = require('electron');

    // Main Process থেকে ব্যাকগ্রাউন্ড টাস্কের ডেটা গ্রহণ করা
    ipcRenderer.on('background-task', (event, message) => {
      document.getElementById('taskStatus').textContent = message;
    });
  </script>
</body>
</html>

এখানে, ipcRenderer.on('background-task') ইভেন্ট ব্যবহার করে Main Process থেকে পাঠানো মেসেজ গ্রহণ করা হচ্ছে এবং Renderer Process-এ সেই মেসেজ প্রদর্শন করা হচ্ছে।


৩. ব্যাকগ্রাউন্ড টাস্কে Promises এবং async/await ব্যবহার করা

ব্যাকগ্রাউন্ড টাস্কের কাজ সিঙ্ক্রোনাস (synchronous) বা অ্যাসিঙ্ক্রোনাস (asynchronous) হতে পারে। অ্যাসিঙ্ক্রোনাস কাজের জন্য আপনি Promises এবং async/await ব্যবহার করতে পারেন।

উদাহরণ: async/await ব্যবহার করে ব্যাকগ্রাউন্ড টাস্ক

const { app, BrowserWindow, ipcMain } = require('electron');

let mainWindow;

app.on('ready', () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });

  mainWindow.loadFile('index.html');

  // অ্যাসিঙ্ক্রোনাস ব্যাকগ্রাউন্ড টাস্ক
  async function backgroundTask() {
    console.log("ব্যাকগ্রাউন্ড টাস্ক শুরু");
    let result = await new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve("ব্যাকগ্রাউন্ড টাস্ক সম্পন্ন");
      }, 5000); // 5 সেকেন্ড পরে টাস্ক সম্পন্ন
    });

    // Main Process থেকে Renderer Process-এ ফলাফল পাঠানো
    mainWindow.webContents.send('background-task', result);
  }

  // ব্যাকগ্রাউন্ড টাস্ক চালানো
  backgroundTask();
});

এখানে, async/await ব্যবহার করে ব্যাকগ্রাউন্ড টাস্ক তৈরি করা হয়েছে। Promise ব্যবহার করে একটি 5 সেকেন্ডের বিরতি রেখে টাস্ক সম্পন্ন হবে এবং Renderer Process-এ ফলাফল পাঠানো হবে।


৪. ব্যাকগ্রাউন্ড টাস্কের জন্য Web Worker ব্যবহার করা

একটি বড় ব্যাকগ্রাউন্ড টাস্ক চলানোর জন্য Web Worker ব্যবহার করা যেতে পারে। এটি মূল UI থ্রেড থেকে আলাদা একটি থ্রেডে কাজ করে, যা অ্যাপের পারফরম্যান্সে কোনো প্রভাব ফেলবে না। তবে, ElectronWeb Worker মূলত Renderer Process-এ ব্যবহৃত হয় এবং Main Process এর সাথে যোগাযোগের জন্য IPC ব্যবহার করা হয়।

উদাহরণ: Web Worker ব্যবহার করা

Main Process (main.js)

const { app, BrowserWindow, ipcMain } = require('electron');

let mainWindow;

app.on('ready', () => {
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  });

  mainWindow.loadFile('index.html');

  // Web Worker তে কাজ পাঠানো
  ipcMain.on('start-worker', (event) => {
    mainWindow.webContents.executeJavaScript(`
      const worker = new Worker('worker.js');
      worker.onmessage = function(e) {
        console.log('Worker says:', e.data);
        worker.terminate(); // কাজ শেষ হলে থামান
      };
      worker.postMessage('Start worker task');
    `);
  });
});

Renderer Process (worker.js)

onmessage = function(e) {
  console.log('Received from Main:', e.data);
  // দীর্ঘ-running কাজ বা গণনা
  setTimeout(() => {
    postMessage('Worker task complete');
  }, 3000); // 3 সেকেন্ড পরে কাজ শেষ
};

সারাংশ

  • Main Process-এ setInterval(), setTimeout(), Promises, এবং async/await ব্যবহার করে ব্যাকগ্রাউন্ড টাস্ক তৈরি করা যায়।
  • ipcMain এবং ipcRenderer ব্যবহার করে Main Process এবং Renderer Process এর মধ্যে ডেটা আদান-প্রদান করা হয়।
  • Web Worker ব্যবহার করে দীর্ঘ-running ব্যাকগ্রাউন্ড টাস্কগুলো আলাদা থ্রেডে সম্পাদন করা যায়, যা মূল UI থ্রেডকে ব্যাহত না করে কাজ করতে সাহায্য করে।

এভাবে, আপনি Electron অ্যাপ্লিকেশনে কার্যকরী ব্যাকগ্রাউন্ড টাস্ক তৈরি করে ইউজার ইন্টারফেসের পারফরম্যান্স উন্নত করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...