ಕನ್ನಡ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಗಾಗಿ ವೆಬ್ ವರ್ಕರ್ಸ್‌ನ ಸಾಮರ್ಥ್ಯವನ್ನು ಅನ್ವೇಷಿಸಿ. ಮಲ್ಟಿ-ಥ್ರೆಡಿಂಗ್ ಬಳಸಿ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯಿಸುವಿಕೆಯನ್ನು ಹೇಗೆ ಸುಧಾರಿಸುವುದು ಎಂದು ತಿಳಿಯಿರಿ.

ವೆಬ್ ವರ್ಕರ್ಸ್: ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಬಿಡುಗಡೆ ಮಾಡುವುದು

ಇಂದಿನ ವೆಬ್ ಅಭಿವೃದ್ಧಿ ಕ್ಷೇತ್ರದಲ್ಲಿ, ಸ್ಪಂದಿಸುವ ಮತ್ತು ಕಾರ್ಯಕ್ಷಮಕ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ರಚಿಸುವುದು ಅತ್ಯಗತ್ಯ. ಬಳಕೆದಾರರು ತಡೆರಹಿತ ಸಂವಹನ ಮತ್ತು ತ್ವರಿತ ಲೋಡಿಂಗ್ ಸಮಯವನ್ನು ನಿರೀಕ್ಷಿಸುತ್ತಾರೆ. ಆದಾಗ್ಯೂ, ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್, ಏಕ-ಥ್ರೆಡ್ ಆಗಿರುವುದರಿಂದ, ಕೆಲವೊಮ್ಮೆ ಬಳಕೆದಾರ ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಫ್ರೀಜ್ ಮಾಡದೆಯೇ ಕಂಪ್ಯೂಟೇಶನಲ್ ತೀವ್ರ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಲು ಹೆಣಗಾಡಬೇಕಾಗಬಹುದು. ಇಲ್ಲಿ ವೆಬ್ ವರ್ಕರ್ಸ್ ರಕ್ಷಣೆಗೆ ಬರುತ್ತವೆ, ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್‌ಗಳಲ್ಲಿ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಒಂದು ಮಾರ್ಗವನ್ನು ನೀಡುತ್ತದೆ, ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.

ವೆಬ್ ವರ್ಕರ್ಸ್ ಎಂದರೇನು?

ವೆಬ್ ವರ್ಕರ್ಸ್ ವೆಬ್ ವಿಷಯವು ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್‌ಗಳಲ್ಲಿ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಚಲಾಯಿಸಲು ಒಂದು ಸರಳ ವಿಧಾನವಾಗಿದೆ. ಅವು UI ಅನ್ನು ನಿರ್ಬಂಧಿಸದೆ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ನ ಮುಖ್ಯ ಕಾರ್ಯಗತಗೊಳಿಸುವ ಥ್ರೆಡ್‌ನೊಂದಿಗೆ ಸಮಾನಾಂತರವಾಗಿ ಕಾರ್ಯಗಳನ್ನು ನಿರ್ವಹಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಇಮೇಜ್ ಪ್ರೊಸೆಸಿಂಗ್, ಡೇಟಾ ವಿಶ್ಲೇಷಣೆ ಅಥವಾ ಸಂಕೀರ್ಣ ಲೆಕ್ಕಾಚಾರಗಳಂತಹ ಕಂಪ್ಯೂಟೇಶನಲ್ ತೀವ್ರ ಕಾರ್ಯಗಳಿಗೆ ಇದು ವಿಶೇಷವಾಗಿ ಉಪಯುಕ್ತವಾಗಿದೆ.

ಇದನ್ನು ಈ ರೀತಿ ಯೋಚಿಸಿ: ನಿಮ್ಮಲ್ಲಿ ಮುಖ್ಯ ಬಾಣಸಿಗ (ಮುಖ್ಯ ಥ್ರೆಡ್) ಒಂದು ಊಟವನ್ನು (ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್) ತಯಾರಿಸುತ್ತಿದ್ದಾರೆ. ಬಾಣಸಿಗ ಎಲ್ಲವನ್ನೂ ತಾವೇ ಮಾಡಬೇಕಾದರೆ, ಅದು ಬಹಳ ಸಮಯ ತೆಗೆದುಕೊಳ್ಳಬಹುದು ಮತ್ತು ಗ್ರಾಹಕರು (ಬಳಕೆದಾರರು) ತಾಳ್ಮೆ ಕಳೆದುಕೊಳ್ಳಬಹುದು. ವೆಬ್ ವರ್ಕರ್ಸ್ ನಿರ್ದಿಷ್ಟ ಕಾರ್ಯಗಳನ್ನು (ಹಿನ್ನೆಲೆ ಪ್ರಕ್ರಿಯೆ) ಸ್ವತಂತ್ರವಾಗಿ ನಿರ್ವಹಿಸಬಲ್ಲ ಸಹಾಯಕ ಬಾಣಸಿಗರಂತೆ, ಮುಖ್ಯ ಬಾಣಸಿಗ ಊಟದ ತಯಾರಿಕೆಯ ಪ್ರಮುಖ ಅಂಶಗಳ ಮೇಲೆ ಗಮನಹರಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ (UI ರೆಂಡರಿಂಗ್ ಮತ್ತು ಬಳಕೆದಾರರ ಸಂವಹನ).

ನೀವು ವೆಬ್ ವರ್ಕರ್ಸ್ ಅನ್ನು ಏಕೆ ಬಳಸಬೇಕು?

ವೆಬ್ ವರ್ಕರ್ಸ್ ಅನ್ನು ಬಳಸುವುದರಿಂದ ಪ್ರಮುಖ ಪ್ರಯೋಜನವೆಂದರೆ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಸುಧಾರಿಸುವುದು. ಕಂಪ್ಯೂಟೇಶನಲ್ ತೀವ್ರ ಕಾರ್ಯಗಳನ್ನು ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್‌ಗಳಿಗೆ ವರ್ಗಾಯಿಸುವ ಮೂಲಕ, ಮುಖ್ಯ ಥ್ರೆಡ್ ನಿರ್ಬಂಧಿಸುವುದನ್ನು ನೀವು ತಡೆಯಬಹುದು, UI ದ್ರವ ಮತ್ತು ಬಳಕೆದಾರರ ಸಂವಹನಗಳಿಗೆ ಸ್ಪಂದಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. ಕೆಲವು ಪ್ರಮುಖ ಅನುಕೂಲಗಳು ಇಲ್ಲಿವೆ:

ವೆಬ್ ವರ್ಕರ್ಸ್‌ನ ಬಳಕೆಯ ಪ್ರಕರಣಗಳು

ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಯಿಂದ ಪ್ರಯೋಜನ ಪಡೆಯುವ ವ್ಯಾಪಕ ಶ್ರೇಣಿಯ ಕಾರ್ಯಗಳಿಗೆ ವೆಬ್ ವರ್ಕರ್ಸ್ ಸೂಕ್ತವಾಗಿದೆ. ಕೆಲವು ಸಾಮಾನ್ಯ ಬಳಕೆಯ ಪ್ರಕರಣಗಳು ಇಲ್ಲಿವೆ:

ವೆಬ್ ವರ್ಕರ್ಸ್ ಹೇಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ

ವೆಬ್ ವರ್ಕರ್ಸ್ ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಿಂದ ಪ್ರತ್ಯೇಕ ಜಾಗತಿಕ ವ್ಯಾಪ್ತಿಯಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ, ಅಂದರೆ ಅವು DOM ಅಥವಾ ಇತರ ಥ್ರೆಡ್-ಸುರಕ್ಷಿತವಲ್ಲದ ಸಂಪನ್ಮೂಲಗಳಿಗೆ ನೇರ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ. ಮುಖ್ಯ ಥ್ರೆಡ್ ಮತ್ತು ವೆಬ್ ವರ್ಕರ್ಸ್ ನಡುವಿನ ಸಂವಹನವು ಸಂದೇಶ ರವಾನೆಯ ಮೂಲಕ ಸಾಧಿಸಲ್ಪಡುತ್ತದೆ.

ವೆಬ್ ವರ್ಕರ್ ಅನ್ನು ರಚಿಸುವುದು

ವೆಬ್ ವರ್ಕರ್ ಅನ್ನು ರಚಿಸಲು, ನೀವು ವರ್ಕರ್ ಸ್ಕ್ರಿಪ್ಟ್‌ನ ಮಾರ್ಗವನ್ನು ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ರವಾನಿಸುವ ಮೂಲಕ ಹೊಸ Worker ವಸ್ತುವನ್ನು ಪ್ರಾರಂಭಿಸಿ:

const worker = new Worker('worker.js');

worker.js ಎನ್ನುವುದು ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಕಾರ್ಯಗತಗೊಳಿಸಬೇಕಾದ ಕೋಡ್ ಅನ್ನು ಒಳಗೊಂಡಿರುವ ಪ್ರತ್ಯೇಕ ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಫೈಲ್ ಆಗಿದೆ.

ವೆಬ್ ವರ್ಕರ್‌ನೊಂದಿಗೆ ಸಂವಹನ

ಮುಖ್ಯ ಥ್ರೆಡ್ ಮತ್ತು ವೆಬ್ ವರ್ಕರ್ ನಡುವಿನ ಸಂವಹನವನ್ನು postMessage() ವಿಧಾನ ಮತ್ತು onmessage ಈವೆಂಟ್ ಹ್ಯಾಂಡ್ಲರ್ ಬಳಸಿ ಮಾಡಲಾಗುತ್ತದೆ.

ವೆಬ್ ವರ್ಕರ್‌ಗೆ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲಾಗುತ್ತಿದೆ:

worker.postMessage({ task: 'calculateSum', numbers: [1, 2, 3, 4, 5] });

ವೆಬ್ ವರ್ಕರ್‌ನಲ್ಲಿ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸಲಾಗುತ್ತಿದೆ:

self.onmessage = function(event) {
  const data = event.data;
  if (data.task === 'calculateSum') {
    const sum = data.numbers.reduce((a, b) => a + b, 0);
    self.postMessage({ result: sum });
  }
};

ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸಲಾಗುತ್ತಿದೆ:

worker.onmessage = function(event) {
  const data = event.data;
  console.log('Result from worker:', data.result);
};

ವೆಬ್ ವರ್ಕರ್ ಅನ್ನು ಕೊನೆಗೊಳಿಸುವುದು

ನೀವು ವೆಬ್ ವರ್ಕರ್‌ನೊಂದಿಗೆ ಮುಗಿಸಿದಾಗ, ಸಂಪನ್ಮೂಲಗಳನ್ನು ಬಿಡುಗಡೆ ಮಾಡಲು ಅದನ್ನು ಕೊನೆಗೊಳಿಸುವುದು ಮುಖ್ಯ. ನೀವು terminate() ವಿಧಾನವನ್ನು ಬಳಸಿಕೊಂಡು ಇದನ್ನು ಮಾಡಬಹುದು:

worker.terminate();

ವೆಬ್ ವರ್ಕರ್ಸ್ ವಿಧಗಳು

ವಿವಿಧ ರೀತಿಯ ವೆಬ್ ವರ್ಕರ್ಸ್ ಇವೆ, ಪ್ರತಿಯೊಂದೂ ತನ್ನದೇ ಆದ ನಿರ್ದಿಷ್ಟ ಬಳಕೆಯ ಪ್ರಕರಣವನ್ನು ಹೊಂದಿದೆ:

ಉದಾಹರಣೆ: ವೆಬ್ ವರ್ಕರ್ಸ್‌ನೊಂದಿಗೆ ಚಿತ್ರ ಸಂಸ್ಕರಣೆ

ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಚಿತ್ರ ಸಂಸ್ಕರಣೆಯನ್ನು ನಿರ್ವಹಿಸಲು ವೆಬ್ ವರ್ಕರ್ಸ್ ಅನ್ನು ಹೇಗೆ ಬಳಸಬಹುದು ಎಂಬುದನ್ನು ವಿವರಿಸೋಣ. ಬಳಕೆದಾರರು ಚಿತ್ರಗಳನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಲು ಮತ್ತು ಫಿಲ್ಟರ್‌ಗಳನ್ನು ಅನ್ವಯಿಸಲು ಅನುಮತಿಸುವ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ನಿಮ್ಮಲ್ಲಿದೆ ಎಂದು ಭಾವಿಸೋಣ. ಮುಖ್ಯ ಥ್ರೆಡ್‌ನಲ್ಲಿ ಸಂಕೀರ್ಣ ಫಿಲ್ಟರ್ ಅನ್ನು ಅನ್ವಯಿಸುವುದರಿಂದ UI ಫ್ರೀಜ್ ಆಗಬಹುದು, ಇದು ಕಳಪೆ ಬಳಕೆದಾರ ಅನುಭವಕ್ಕೆ ಕಾರಣವಾಗುತ್ತದೆ. ಈ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು ವೆಬ್ ವರ್ಕರ್ಸ್ ಸಹಾಯ ಮಾಡಬಹುದು.

HTML (index.html):

<input type="file" id="imageInput">
<canvas id="imageCanvas"></canvas>

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ (script.js):

const imageInput = document.getElementById('imageInput');
const imageCanvas = document.getElementById('imageCanvas');
const ctx = imageCanvas.getContext('2d');

const worker = new Worker('imageWorker.js');

imageInput.addEventListener('change', function(e) {
  const file = e.target.files[0];
  const reader = new FileReader();

  reader.onload = function(event) {
    const img = new Image();
    img.onload = function() {
      imageCanvas.width = img.width;
      imageCanvas.height = img.height;
      ctx.drawImage(img, 0, 0);
      const imageData = ctx.getImageData(0, 0, img.width, img.height);

      worker.postMessage({ imageData: imageData, width: img.width, height: img.height });
    };
    img.src = event.target.result;
  };
  reader.readAsDataURL(file);
});

worker.onmessage = function(event) {
  const processedImageData = event.data.imageData;
  ctx.putImageData(processedImageData, 0, 0);
};

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ (imageWorker.js):

self.onmessage = function(event) {
  const imageData = event.data.imageData;
  const width = event.data.width;
  const height = event.data.height;

  // Apply a grayscale filter
  for (let i = 0; i < imageData.data.length; i += 4) {
    const avg = (imageData.data[i] + imageData.data[i + 1] + imageData.data[i + 2]) / 3;
    imageData.data[i] = avg; // Red
    imageData.data[i + 1] = avg; // Green
    imageData.data[i + 2] = avg; // Blue
  }

  self.postMessage({ imageData: imageData });
};

ಈ ಉದಾಹರಣೆಯಲ್ಲಿ, ಬಳಕೆದಾರರು ಚಿತ್ರವನ್ನು ಅಪ್‌ಲೋಡ್ ಮಾಡಿದಾಗ, ಮುಖ್ಯ ಥ್ರೆಡ್ ಚಿತ್ರ ಡೇಟಾವನ್ನು ವೆಬ್ ವರ್ಕರ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ. ವೆಬ್ ವರ್ಕರ್ ಚಿತ್ರದ ಡೇಟಾಗೆ ಗ್ರೇಸ್ಕೇಲ್ ಫಿಲ್ಟರ್ ಅನ್ನು ಅನ್ವಯಿಸುತ್ತದೆ ಮತ್ತು ಸಂಸ್ಕರಿಸಿದ ಡೇಟಾವನ್ನು ಮುಖ್ಯ ಥ್ರೆಡ್‌ಗೆ ಕಳುಹಿಸುತ್ತದೆ, ಅದು ನಂತರ ಕ್ಯಾನ್ವಾಸ್ ಅನ್ನು ನವೀಕರಿಸುತ್ತದೆ. ಇದು ದೊಡ್ಡ ಚಿತ್ರಗಳು ಮತ್ತು ಹೆಚ್ಚು ಸಂಕೀರ್ಣ ಫಿಲ್ಟರ್‌ಗಳಿಗೆ ಸಹ UI ಅನ್ನು ಸ್ಪಂದಿಸುವಂತೆ ಮಾಡುತ್ತದೆ.

ವೆಬ್ ವರ್ಕರ್ಸ್ ಅನ್ನು ಬಳಸಲು ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು

ವೆಬ್ ವರ್ಕರ್ಸ್ ಅನ್ನು ಪರಿಣಾಮಕಾರಿಯಾಗಿ ಬಳಸಲು, ಈ ಕೆಳಗಿನ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳನ್ನು ಪರಿಗಣಿಸಿ:

ವೆಬ್ ವರ್ಕರ್ಸ್‌ನ ಮಿತಿಗಳು

ವೆಬ್ ವರ್ಕರ್ಸ್ ಗಮನಾರ್ಹ ಪ್ರಯೋಜನಗಳನ್ನು ನೀಡುತ್ತದೆಯಾದರೂ, ಅವು ಕೆಲವು ಮಿತಿಗಳನ್ನು ಸಹ ಹೊಂದಿವೆ:

ವೆಬ್ ವರ್ಕರ್ಸ್‌ಗೆ ಪರ್ಯಾಯಗಳು

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಗೆ ವೆಬ್ ವರ್ಕರ್ಸ್ ಒಂದು ಪ್ರಬಲ ಸಾಧನವಾಗಿದ್ದರೂ, ನಿಮ್ಮ ನಿರ್ದಿಷ್ಟ ಅಗತ್ಯಗಳನ್ನು ಅವಲಂಬಿಸಿ ನೀವು ಪರಿಗಣಿಸಬಹುದಾದ ಪರ್ಯಾಯ ವಿಧಾನಗಳಿವೆ:

ತೀರ್ಮಾನ

ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್‌ನಲ್ಲಿ ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವ ಮೂಲಕ ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯಾತ್ಮಕತೆಯನ್ನು ಸುಧಾರಿಸಲು ವೆಬ್ ವರ್ಕರ್ಸ್ ಒಂದು ಅಮೂಲ್ಯ ಸಾಧನವಾಗಿದೆ. ಕಂಪ್ಯೂಟೇಶನಲ್ ತೀವ್ರ ಕಾರ್ಯಗಳನ್ನು ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್‌ಗಳಿಗೆ ವರ್ಗಾಯಿಸುವ ಮೂಲಕ, ಮುಖ್ಯ ಥ್ರೆಡ್ ನಿರ್ಬಂಧಿಸುವುದನ್ನು ನೀವು ತಡೆಯಬಹುದು, ಸುಗಮ ಮತ್ತು ಸ್ಪಂದಿಸುವ ಬಳಕೆದಾರ ಅನುಭವವನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬಹುದು. ಅವು ಕೆಲವು ಮಿತಿಗಳನ್ನು ಹೊಂದಿದ್ದರೂ, ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಉತ್ತಮಗೊಳಿಸಲು ಮತ್ತು ಹೆಚ್ಚು ಆಕರ್ಷಕ ಬಳಕೆದಾರ ಅನುಭವಗಳನ್ನು ರಚಿಸಲು ವೆಬ್ ವರ್ಕರ್ಸ್ ಒಂದು ಪ್ರಬಲ ತಂತ್ರವಾಗಿದೆ.

ವೆಬ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹೆಚ್ಚು ಸಂಕೀರ್ಣವಾಗುತ್ತಿದ್ದಂತೆ, ಸಮಾನಾಂತರ ಪ್ರಕ್ರಿಯೆಯ ಅಗತ್ಯವು ಬೆಳೆಯುತ್ತಲೇ ಇರುತ್ತದೆ. ವೆಬ್ ವರ್ಕರ್ಸ್ ಅನ್ನು ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವ ಮತ್ತು ಬಳಸಿಕೊಳ್ಳುವ ಮೂಲಕ, ಡೆವಲಪರ್‌ಗಳು ಇಂದಿನ ಬಳಕೆದಾರರ ಬೇಡಿಕೆಗಳನ್ನು ಪೂರೈಸುವ ಹೆಚ್ಚು ಕಾರ್ಯಕ್ಷಮಕ ಮತ್ತು ಸ್ಪಂದಿಸುವ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ರಚಿಸಬಹುದು.

ಮುಂದಿನ ಕಲಿಕೆ