এই লেখায় যা আছে
- ১. কনসোল ব্যবহার এবং কোড পেস্ট করার নিয়ম
- ২. কনসোল জাভাস্ক্রিপ্ট সলিউশন (Auto-scroll)
- স্ক্রোল মেকানিজমের প্রযুক্তিগত প্রভাব
- ৩. Web Worker সলিউশন
- ৪. ব্রাউজারের ব্যাকগ্রাউন্ড আচরণ (অত্যন্ত গুরুত্বপূর্ণ)
- ৫. ব্রাউজার সেটিংস কনফিগারেশন
- ৬. Chromium কমান্ড-লাইন ফ্ল্যাগস
- ৭. ম্যাকওএস ফোরগ্রাউন্ড অটোমেশন
- ৮. উইন্ডোজ ফোরগ্রাউন্ড অটোমেশন (PowerShell)
- ৯. সমাধানের Ranking এবং চূড়ান্ত সিদ্ধান্ত
- চূড়ান্ত রিকমেন্ডেশন
- ১০. ভেরিফিকেশন বা যাচাইকরণ
- বাস্তব প্রয়োগ: একটি উদাহরণ
- সাধারণ ভুল ও সমাধান
- মূল শিক্ষা
- প্রায়শই জিজ্ঞাসিত প্রশ্ন
কেস স্টাডি এক নজরে
- চ্যালেঞ্জ: ব্রাউজার ব্যাটারি ও রিসোর্স বাঁচাতে ব্যাকগ্রাউন্ড ট্যাবের টাইমার ও কাজ ধীর বা বন্ধ করে দেয়; ফলে দীর্ঘ চলা কাজ মাঝপথে থেমে যায়।
- সমাধান: ব্রাউজারের থ্রটলিং আচরণ বুঝে Web Worker, ব্রাউজার সেটিংস ও প্রয়োজনে কমান্ড-লাইন ফ্ল্যাগ ব্যবহার।
- ফলাফল: দীর্ঘ সময় চলা ব্রাউজার-ভিত্তিক কাজ ব্যাকগ্রাউন্ডেও নির্ভরযোগ্যভাবে চলে।
- কার জন্য: কারিগরি দক্ষ ব্যবহারকারী
- প্রয়োজনীয় সময়: ১৫–৩০ মিনিট
যেকোনো দীর্ঘস্থায়ী ব্রাউজার প্রসেসকে ব্যাকগ্রাউন্ডে সচল রাখা বেশ চ্যালেঞ্জিং, কারণ আধুনিক ব্রাউজারগুলো মেমরি এবং ব্যাটারি বাঁচাতে নিষ্ক্রিয় ট্যাবাগুলোকে ফ্রিজ বা সাসপেন্ড করে দেয়। নিচে ধাপে ধাপে এই সমস্যার প্রযুক্তিগত সমাধান এবং সীমাবদ্ধতাগুলো আলোচনা করা হলো।
১. কনসোল ব্যবহার এবং কোড পেস্ট করার নিয়ম
১. যে ওয়েবপেইজটি সচল রাখতে চান, সেখানে গিয়ে কীবোর্ডে F12 বা Ctrl+Shift+J (Mac-এ Cmd+Option+J) চেপে DevTools খুলুন। ২. Console ট্যাবে ক্লিক করুন। ৩. আধুনিক ব্রাউজারে নিরাপত্তা জনিত কারণে সরাসরি কোড পেস্ট করা যায় না। কনসোলে যদি কোনো ওয়ার্নিং দেখেন, তবে প্রথমে টাইপ করুন:
allow pasting
এবং Enter চাপুন। ৪. এরপর নিচের কোডটি কপি করে কনসোলে পেস্ট করে Enter চাপুন।
২. কনসোল জাভাস্ক্রিপ্ট সলিউশন (Auto-scroll)
এই স্ক্রিপ্টটি প্রতি ৩০ সেকেন্ডে ১ পিক্সেল স্ক্রোল করে সাথে সাথে আগের জায়গায় ফিরে আসবে, যা ব্রাউজারকে কিছুটা অ্যাক্টিভ রাখার চেষ্টা করে।
window.keepAlive = (function() {
let timerId = null;
let count = 0;
let lastRun = null;
function doAction() {
count++;
lastRun = new Date();
// Save current scroll position
const startX = window.scrollX;
const startY = window.scrollY;
// Minimal scroll to trigger activity
window.scrollBy(0, 1);
// Immediately restore position
window.scrollTo(startX, startY);
}
return {
start: function() {
if (timerId) {
console.warn("[keepAlive] Already running!");
return;
}
console.log("[keepAlive] Started.");
// Execute every 30 seconds
timerId = setInterval(doAction, 30000);
doAction(); // Run once immediately
},
stop: function() {
if (timerId) {
clearInterval(timerId);
timerId = null;
console.log("[keepAlive] Stopped.");
} else {
console.log("[keepAlive] Not running.");
}
},
status: function() {
console.log(`=== keepAlive Status ===`);
console.log(`State: ${timerId ? "RUNNING" : "STOPPED"}`);
console.log(`Execution Count: ${count}`);
console.log(`Last Run: ${lastRun ? lastRun.toLocaleTimeString() : "Never"}`);
console.log(`Visibility State: ${document.visibilityState}`);
console.log(`Document Hidden: ${document.hidden}`);
console.log(`========================`);
}
};
})();
কন্ট্রোল কমান্ডসমূহ:
- চালু করতে: কনসোলে লিখুন:
keepAlive.start()
- বন্ধ করতে: লিখুন:
keepAlive.stop()
- স্ট্যাটাস দেখতে: লিখুন:
keepAlive.status()
স্ক্রোল মেকানিজমের প্রযুক্তিগত প্রভাব
- এটি কি সম্পূর্ণ Harmless? না। যদিও ব্যবহারকারী চোখে কোনো পরিবর্তন দেখবেন না, কিন্তু এটি DOM-এ
scrollইভেন্ট ট্রিগার করে। ওয়েবসাইটের নিজস্ব কোনো স্ক্রোল লিসেনার থাকলে:
window.addEventListener("scroll")
সেটি ফায়ার হবে।
- এটি কি থ্রটলিং আটকাতে পারে? আংশিক। কিছু ওয়েবসাইটের "Idle timer" বা নিষ্ক্রিয়তা ধরার স্ক্রিপ্টকে এটি বোকা বানাতে পারে, কিন্তু ব্রাউজারের নিজস্ব ব্যাকগ্রাউন্ড থ্রটলিং এটি দিয়ে পুরোপুরি আটকানো সম্ভব নয়।
৩. Web Worker সলিউশন
সাধারণ setInterval ব্যাকগ্রাউন্ড ট্যাবে থ্রটলড (ধীর) হয়ে যায়। একটি Web Worker মূল থ্রেডের বাইরে কাজ করে বলে এর টাইমারগুলো তুলনামূলক বেশি নির্ভরযোগ্য।
window.workerKeepAlive = (function() {
let worker = null;
let count = 0;
let lastRun = null;
const workerCode = `
let timer = null;
self.onmessage = function(e) {
if (e.data === "start") {
if(timer) return;
timer = setInterval(() => self.postMessage("tick"), 30000);
} else if (e.data === "stop") {
clearInterval(timer);
timer = null;
}
};
`;
return {
start: function() {
if (worker) {
console.warn("[workerKeepAlive] Already running!");
return;
}
const blob = new Blob([workerCode], { type: "application/javascript" });
worker = new Worker(URL.createObjectURL(blob));
worker.onmessage = function(e) {
if (e.data === "tick") {
count++;
lastRun = new Date();
const x = window.scrollX, y = window.scrollY;
window.scrollBy(0, 1);
window.scrollTo(x, y);
}
};
worker.postMessage("start");
console.log("[workerKeepAlive] Worker Started.");
},
stop: function() {
if(worker) {
worker.postMessage("stop");
worker.terminate();
worker = null;
console.log("[workerKeepAlive] Worker Stopped.");
}
},
status: function() {
console.log(`Worker State: ${worker ? "RUNNING" : "STOPPED"} | Executions: ${count}`);
}
}
})();
Worker কন্ট্রোল কমান্ডসমূহ:
- চালু করতে:
workerKeepAlive.start()
- বন্ধ করতে:
workerKeepAlive.stop()
- স্ট্যাটাস দেখতে:
workerKeepAlive.status()
- সীমাবদ্ধতা: Web Worker টাইমারকে ঠিকমতো চালালেও, ব্রাউজার যদি মেমরি বাঁচাতে পুরো রেন্ডারার প্রসেসকে (Renderer Process) ফ্রিজ করে দেয়, তখন Worker-ও কাজ করা বন্ধ করে দেবে।
৪. ব্রাউজারের ব্যাকগ্রাউন্ড আচরণ (অত্যন্ত গুরুত্বপূর্ণ)
ব্রাউজার বিভিন্ন অবস্থায় ট্যাবের সাথে ভিন্ন ভিন্ন আচরণ করে:
- Background Timer Throttling: আপনি যখন অন্য অ্যাপে যান, ব্রাউজার ১-৫ মিনিট পর ব্যাকগ্রাউন্ড ট্যাবের জাভাস্ক্রিপ্ট টাইমারগুলোকে (যেমন
setInterval) থ্রটল করে। অর্থাৎ, ৩০ সেকেন্ডের টাইমার হয়তো প্রতি ১ মিনিট বা আরও দেরিতে চলবে। - Renderer Backgrounding & Occlusion: ব্রাউজারের উইন্ডো যদি অন্য অ্যাপ দিয়ে পুরোপুরি ঢাকা (Occluded) থাকে বা মিনিমাইজ করা থাকে, তবে ব্রাউজার স্ক্রিন রেন্ডারিং পুরোপুরি বন্ধ করে দেয় (যেমন
requestAnimationFrameকাজ করবে না)। - Tab Freezing: ৫-১০ মিনিট পর ব্রাউজার পুরো ট্যাবটিকে ফ্রিজ করে দিতে পারে। তখন কোনো জাভাস্ক্রিপ্ট কাজ করবে না।
- Tab Discarding (Memory Saver): পিসিতে র্যামের সংকট দেখা দিলে ব্রাউজার পুরো প্রসেসটিকে মেমরি থেকে মুছে ফেলে। ট্যাবে ফিরে গেলে পেইজটি রিলোড হয়।
- OS Sleep: কম্পিউটার স্লিপ মোডে গেলে ইন্টারনেট কানেকশন এবং সব প্রসেস তাৎক্ষণিকভাবে বন্ধ হয়ে যায়। জাভাস্ক্রিপ্ট এর উপর কোনো নিয়ন্ত্রণ রাখে না।
৫. ব্রাউজার সেটিংস কনফিগারেশন
ব্রাউজারের বিল্ট-ইন মেমরি সেভার বন্ধ করা সবচেয়ে কার্যকর প্রাথমিক পদক্ষেপ।
Chrome-এর ক্ষেত্রে: ১. অ্যাড্রেস বারে যান:
chrome://settings/performance
২. Memory Saver অপশনটি বন্ধ (Off) করুন। ৩. অথবা, নির্দিষ্ট ওয়েবসাইটের জন্য "Always keep these sites active" অপশনে গিয়ে সাইটের URL অ্যাড করুন।
Brave-এর ক্ষেত্রে: ১. অ্যাড্রেস বারে যান:
brave://settings/system
২. Performance সেকশন থেকে Memory Saver অপশনটি বন্ধ করুন।
৬. Chromium কমান্ড-লাইন ফ্ল্যাগস
কমান্ড-লাইন ফ্ল্যাগ ব্রাউজারের কোর বিহেভিয়ার পরিবর্তন করতে পারে:
- ব্যাকগ্রাউন্ড ট্যাবের টাইমার ডিলে হওয়া প্রতিরোধ করতে:
--disable-background-timer-throttling
- রেন্ডারার প্রসেসকে সর্বদা হাই প্রাইয়োরিটিতে রাখতে:
--disable-renderer-backgrounding
- উইন্ডো অন্য অ্যাপ দ্বারা ঢাকা থাকলেও তাকে ফোরগ্রাউন্ড হিসেবে বিবেচনা করতে:
--disable-backgrounding-occluded-windows
সতর্কতা (Existing Process Issue): ব্রাউজার আগে থেকে চালু থাকলে এই ফ্ল্যাগগুলো কাজ করবে না। আপনাকে অবশ্যই ব্রাউজারটি পুরোপুরি বন্ধ করতে হবে, অথবা নতুন একটি প্রোফাইল ডিরেক্টরি (--user-data-dir) ব্যবহার করে ব্রাউজার লঞ্চ করতে হবে।
macOS Launch Commands (Terminal):
- Chrome:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-background-timer-throttling --disable-renderer-backgrounding --disable-backgrounding-occluded-windows --user-data-dir="/tmp/chrome_dev"
- Brave:
/Applications/Brave\ Browser.app/Contents/MacOS/Brave\ Browser --disable-background-timer-throttling --disable-renderer-backgrounding --disable-backgrounding-occluded-windows --user-data-dir="/tmp/brave_dev"
Windows Launch Commands (Command Prompt):
- Chrome:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-background-timer-throttling --disable-renderer-backgrounding --disable-backgrounding-occluded-windows --user-data-dir="%TEMP%\chrome_dev"
- Brave:
"C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe" --disable-background-timer-throttling --disable-renderer-backgrounding --disable-backgrounding-occluded-windows --user-data-dir="%TEMP%\brave_dev"
৭. ম্যাকওএস ফোরগ্রাউন্ড অটোমেশন
যদি ওয়েবসাইটটির জন্য ব্রাউজার উইন্ডো ফোকাসে থাকা বাধ্যতামূলক হয়, তবে এই Bash + AppleScript সলিউশনটি ব্যবহার করুন। এটি প্রতি ১০ সেকেন্ডে ক্রোমকে ফোরগ্রাউন্ডে আনবে।
- সতর্কতা: এটি আপনি অন্য যে অ্যাপে কাজ করছেন, সেখান থেকে ফোকাস চুরি (steal focus) করবে।
- পারমিশন: Terminal-কে
System Settings → Privacy & Security → Accessibility / Automation-এ গিয়ে অনুমতি দিতে হবে।
#!/bin/bash
# Save as keep_focused.sh and run with: bash keep_focused.sh
echo "Starting focus loop. Press Ctrl+C to stop."
while true; do
osascript -e '
tell application "System Events"
if exists (processes where name is "Google Chrome") then
tell application "Google Chrome" to activate
end if
end tell'
sleep 10
done
(Brave-এর জন্য "Google Chrome" এর জায়গায় "Brave Browser" লিখুন)
৮. উইন্ডোজ ফোরগ্রাউন্ড অটোমেশন (PowerShell)
উইন্ডোজে AppActivate বা SetForegroundWindow সবসময় কাজ করে না, কারণ উইন্ডোজের Foreground Lock Timeout অন্য অ্যাপে টাইপ করার সময় ফোকাস পরিবর্তন আটকে দেয়। তবে নিচের স্ক্রিপ্টটি ফোকাস আনার চেষ্টা করবে।
# Save as KeepFocused.ps1 and run in PowerShell. Press Ctrl+C to stop.
$code = @"
using System;
using System.Runtime.InteropServices;
public class WinAPI {
[DllImport("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
}
"@
Add-Type -TypeDefinition $code
Write-Host "Starting focus loop for Chrome. Press Ctrl+C to stop."
while ($true) {
$process = Get-Process chrome -ErrorAction SilentlyContinue | Where-Object {$_.MainWindowTitle -ne ""} | Select-Object -First 1
if ($process) {
[WinAPI]::ShowWindow($process.MainWindowHandle, 9) # 9 = Restore
[WinAPI]::SetForegroundWindow($process.MainWindowHandle)
}
Start-Sleep -Seconds 10
}
৯. সমাধানের Ranking এবং চূড়ান্ত সিদ্ধান্ত
সবচেয়ে নির্ভরযোগ্য থেকে সবচেয়ে কম নির্ভরযোগ্য পদ্ধতির তালিকা:
| Ranking | পদ্ধতি | কার্যকারিতা ও ইউজার এক্সপেরিয়েন্স |
|---|---|---|
| ১ | Server-side processing | সর্বোত্তম। ব্রাউজারের উপর নির্ভরশীল না হয়ে প্রসেস সার্ভারে চলা উচিত। |
| ২ | Chromium launch flags + Separate Window | সবচেয়ে প্র্যাক্টিক্যাল। --user-data-dir দিয়ে আলাদা উইন্ডো খুলে সেটি স্ক্রিনের এক কোণায় (মিনিমাইজ না করে) খোলা রাখা। |
| ৩ | Memory Saver disabled + Site exclusion | ভালো। chrome://settings/performance-এ সাইটটি অ্যাড করে উইন্ডো খোলা রাখা। |
| ৪ | Web Worker Timer | মাঝারি। সাধারণ ট্যাবে এটি মূল থ্রেডের চেয়ে ভালো কাজ করে। |
| ৫ | Console JavaScript (keepAlive) | দুর্বল। থ্রটলিং হলে টাইমার কাজ করবে না, তবে ওয়েবসাইটের নিজস্ব idle-tracker থাকলে তা আটকাবে। |
| ৬ | Forced Foreground Automation | জঘন্য ইউজার এক্সপেরিয়েন্স। আপনি অন্য অ্যাপে কাজই করতে পারবেন না কারণ ১০ সেকেন্ড পর পর ব্রাউজার স্ক্রিনে চলে আসবে। |
চূড়ান্ত রিকমেন্ডেশন
আপনি যদি একই পিসিতে অন্য কাজ করতে চান, তবে সবচেয়ে ভালো উপায় হলো ব্রাউজারটিকে মিনিমাইজ না করে বা অন্য উইন্ডো দিয়ে পুরোপুরি না ঢেকে স্ক্রিনের কোনো এক প্রান্তে খোলা রাখা এবং ব্রাউজারের Memory Saver বন্ধ করে রাখা। সাথে Web Worker স্ক্রিপ্টটি ব্যবহার করা।
১০. ভেরিফিকেশন বা যাচাইকরণ
আপনার কনফিগারেশন ঠিকমতো কাজ করছে কি না তা এভাবে যাচাই করুন:
- কনসোলে রান করুন:
keepAlive.start()
- প্রথম এক্সিকিউশনের সময় নোট করুন।
- অন্য অ্যাপ্লিকেশনে কাজ শুরু করুন এবং উইন্ডোটি ঢেকে দিন বা মিনিমাইজ করুন।
- ১০ মিনিট পর ব্রাউজারে ফিরে আসুন।
- কনসোলে রান করুন:
keepAlive.status()
- হিসাব মেলান: ১০ মিনিটে (৬০০ সেকেন্ড) প্রতি ৩০ সেকেন্ড পর পর হিসেবে এক্সিকিউশন কাউন্ট ২০-এর কাছাকাছি হওয়া উচিত। যদি দেখেন কাউন্ট মাত্র ২-৩ টি দেখাচ্ছে বা লাস্ট রান অনেক আগের, তবে বুঝতে হবে ব্রাউজার থ্রটলিং করছে এবং আপনাকে কমান্ড-লাইন ফ্ল্যাগ ব্যবহার করতে হবে।
বাস্তব প্রয়োগ: একটি উদাহরণ
(দৃষ্টান্তমূলক উদাহরণ) ধরা যাক, একজন ব্যবহারকারী ব্রাউজারে একটি দীর্ঘ রূপান্তরের কাজ চালিয়ে অন্য ট্যাবে কাজ করতে চান, কিন্তু ফিরে এসে দেখেন কাজ থেমে আছে। তিনি বুঝলেন ব্যাকগ্রাউন্ড ট্যাবে সাধারণ টাইমার ধীর হয়ে যায়। Web Worker-ভিত্তিক সমাধান ব্যবহার করায় কাজটি এবার ব্যাকগ্রাউন্ডেও চলতে থাকে। তবে তিনি মনে রাখেন — এসব কৌশল শুধু নিজের কম্পিউটারে, নিজের কাজের জন্য প্রয়োগ করা উচিত।
সাধারণ ভুল ও সমাধান
| ভুল | কেন সমস্যা | সমাধান |
|---|---|---|
| ব্রাউজার চালু থাকা অবস্থায় ফ্ল্যাগ দেওয়া | ফ্ল্যাগ কার্যকর হয় না | ব্রাউজার পুরোপুরি বন্ধ করে ফ্ল্যাগসহ চালু করুন |
| অপরিচিত স্ক্রিপ্ট কনসোলে পেস্ট করা | নিরাপত্তা ঝুঁকি তৈরি হয় | শুধু বোঝেন ও বিশ্বাস করেন এমন কোড চালান |
| সারাক্ষণ ফ্ল্যাগ চালু রাখা | ব্যাটারি ও রিসোর্স খরচ বাড়ে | কাজ শেষে সাধারণভাবে ব্রাউজার চালান |
মূল শিক্ষা
- থ্রটলিং ব্রাউজারের ইচ্ছাকৃত আচরণ — বুঝে সমাধান করুন।
- Web Worker সবচেয়ে পরিচ্ছন্ন সমাধান।
- কনসোলে কোড চালানোর আগে তা বুঝে নিন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
এই কৌশলগুলো কি মোবাইল ব্রাউজারে কাজ করে?
মূলত ডেস্কটপ ব্রাউজারের জন্য; মোবাইলে ব্যাকগ্রাউন্ড আচরণ অনেক বেশি সীমাবদ্ধ।
এতে কি কম্পিউটারের ক্ষতি হয়?
না, তবে দীর্ঘক্ষণ চালু রাখলে ব্যাটারি ও বিদ্যুৎ খরচ বাড়ে।
লেখাটা ভালো লাগলে একটা ভালোবাসা দিয়ে যান
