કાર્યક્ષમ ડેટા સ્ટ્રીમિંગ માટે જાવાસ્ક્રિપ્ટ અસિંક જનરેટર્સની શક્તિને અનલોક કરો. તેઓ કેવી રીતે અસિંક્રોનસ પ્રોગ્રામિંગને સરળ બનાવે છે, મોટા ડેટાસેટ્સને હેન્ડલ કરે છે અને એપ્લિકેશનની પ્રતિભાવમાં સુધારો કરે છે તે જાણો.
જાવાસ્ક્રિપ્ટ અસિંક જનરેટર્સ: ડેટા સ્ટ્રીમિંગમાં ક્રાંતિ
વેબ ડેવલપમેન્ટના સતત વિકસતા પરિદ્રશ્યમાં, અસિંક્રોનસ ઓપરેશન્સને કુશળતાપૂર્વક હેન્ડલ કરવું અત્યંત મહત્વપૂર્ણ છે. જાવાસ્ક્રિપ્ટ અસિંક જનરેટર્સ ડેટા સ્ટ્રીમિંગ, મોટા ડેટાસેટ્સ પર પ્રક્રિયા કરવા અને પ્રતિભાવશીલ એપ્લિકેશન્સ બનાવવા માટે એક શક્તિશાળી અને ઉત્કૃષ્ટ ઉકેલ પૂરો પાડે છે. આ વ્યાપક માર્ગદર્શિકા અસિંક જનરેટર્સના ખ્યાલો, ફાયદાઓ અને વ્યવહારુ ઉપયોગોની શોધ કરે છે, જે તમને આ મહત્વપૂર્ણ ટેકનોલોજીમાં નિપુણતા મેળવવા માટે સશક્ત બનાવે છે.
જાવાસ્ક્રિપ્ટમાં અસિંક્રોનસ ઓપરેશન્સને સમજવું
પરંપરાગત જાવાસ્ક્રિપ્ટ કોડ સિંક્રોનસ રીતે એક્ઝિક્યુટ થાય છે, જેનો અર્થ છે કે દરેક ઓપરેશન આગલું શરૂ થાય તે પહેલાં પૂર્ણ થાય છે. જો કે, ઘણા વાસ્તવિક-વિશ્વના દૃશ્યોમાં અસિંક્રોનસ ઓપરેશન્સનો સમાવેશ થાય છે, જેમ કે API માંથી ડેટા મેળવવો, ફાઇલો વાંચવી, અથવા વપરાશકર્તા ઇનપુટને હેન્ડલ કરવું. આ ઓપરેશન્સમાં સમય લાગી શકે છે, જે સંભવિતપણે મુખ્ય થ્રેડને બ્લોક કરી શકે છે અને ખરાબ વપરાશકર્તા અનુભવ તરફ દોરી શકે છે. અસિંક્રોનસ પ્રોગ્રામિંગ તમને અન્ય કોડના એક્ઝિક્યુશનને બ્લોક કર્યા વિના ઓપરેશન શરૂ કરવાની મંજૂરી આપે છે. કોલબેક્સ, પ્રોમિસિસ, અને Async/Await અસિંક્રોનસ કાર્યોના સંચાલન માટે સામાન્ય તકનીકો છે.
જાવાસ્ક્રિપ્ટ અસિંક જનરેટર્સનો પરિચય
અસિંક જનરેટર્સ એક વિશેષ પ્રકારનું ફંક્શન છે જે અસિંક્રોનસ ઓપરેશન્સની શક્તિને જનરેટર્સની ઇટરેશન ક્ષમતાઓ સાથે જોડે છે. તેઓ તમને એક સમયે એક, અસિંક્રોનસ રીતે મૂલ્યોની શ્રેણી ઉત્પન્ન કરવાની મંજૂરી આપે છે. કલ્પના કરો કે તમે રિમોટ સર્વર પરથી ચંક્સમાં ડેટા મેળવી રહ્યા છો – સમગ્ર ડેટાસેટની રાહ જોવાને બદલે, તમે દરેક ચંક આવે ત્યારે તેની પ્રક્રિયા કરી શકો છો.
અસિંક જનરેટર્સની મુખ્ય લાક્ષણિકતાઓ:
- અસિંક્રોનસ: તેઓ
async
કીવર્ડનો ઉપયોગ કરે છે, જે તેમનેawait
નો ઉપયોગ કરીને અસિંક્રોનસ ઓપરેશન્સ કરવા દે છે. - જનરેટર્સ: તેઓ
yield
કીવર્ડનો ઉપયોગ એક્ઝિક્યુશનને થોભાવવા અને મૂલ્ય પરત કરવા માટે કરે છે, અને જ્યારે આગલું મૂલ્ય વિનંતી કરવામાં આવે ત્યારે જ્યાંથી છોડ્યું હતું ત્યાંથી ફરી શરૂ કરે છે. - અસિંક્રોનસ ઇટરેટર્સ: તેઓ એક અસિંક્રોનસ ઇટરેટર પરત કરે છે, જેનો ઉપયોગ
for await...of
લૂપનો ઉપયોગ કરીને કરી શકાય છે.
સિન્ટેક્સ અને ઉપયોગ
ચાલો આપણે અસિંક જનરેટરના સિન્ટેક્સની તપાસ કરીએ:
async function* asyncGeneratorFunction() {
// Asynchronous operations
yield value1;
yield value2;
// ...
}
// Consuming the Async Generator
async function consumeGenerator() {
for await (const value of asyncGeneratorFunction()) {
console.log(value);
}
}
consumeGenerator();
સમજૂતી:
async function*
સિન્ટેક્સ અસિંક જનરેટર ફંક્શનને વ્યાખ્યાયિત કરે છે.yield
કીવર્ડ ફંક્શનના એક્ઝિક્યુશનને થોભાવે છે અને એક મૂલ્ય પરત કરે છે.for await...of
લૂપ અસિંક જનરેટર દ્વારા ઉત્પાદિત મૂલ્યો પર ઇટરેટ કરે છે.await
કીવર્ડ ખાતરી કરે છે કે દરેક મૂલ્ય પર પ્રક્રિયા થાય તે પહેલાં તે સંપૂર્ણપણે રિઝોલ્વ થઈ ગયું છે.
અસિંક જનરેટર્સનો ઉપયોગ કરવાના ફાયદા
અસિંક જનરેટર્સ અસિંક્રોનસ ડેટા સ્ટ્રીમ્સને હેન્ડલ કરવા માટે અસંખ્ય ફાયદાઓ પ્રદાન કરે છે:
- સુધારેલ પ્રદર્શન: ડેટાને ચંક્સમાં પ્રોસેસ કરીને, અસિંક જનરેટર્સ મેમરી વપરાશ ઘટાડે છે અને એપ્લિકેશનની પ્રતિભાવક્ષમતામાં સુધારો કરે છે, ખાસ કરીને જ્યારે મોટા ડેટાસેટ્સ સાથે કામ કરતા હોય.
- વધારેલી કોડ વાંચનક્ષમતા: તેઓ અસિંક્રોનસ કોડને સરળ બનાવે છે, જેથી તેને સમજવું અને જાળવવું સરળ બને છે.
for await...of
લૂપ અસિંક્રોનસ ડેટા સ્ટ્રીમ્સનો ઉપયોગ કરવા માટે એક સ્વચ્છ અને સાહજિક રીત પ્રદાન કરે છે. - સરળ એરર હેન્ડલિંગ: અસિંક જનરેટર્સ તમને જનરેટર ફંક્શનની અંદર ભૂલોને સરળતાથી હેન્ડલ કરવાની મંજૂરી આપે છે, જે તેમને તમારી એપ્લિકેશનના અન્ય ભાગોમાં ફેલાતા અટકાવે છે.
- બેકપ્રેશર મેનેજમેન્ટ: તેઓ તમને ડેટા ઉત્પાદન અને વપરાશના દરને નિયંત્રિત કરવા સક્ષમ બનાવે છે, જે ગ્રાહકને ઝડપી ડેટા સ્ટ્રીમથી દબાઈ જતા અટકાવે છે. આ ખાસ કરીને નેટવર્ક કનેક્શન્સ અથવા મર્યાદિત બેન્ડવિડ્થવાળા ડેટા સ્રોતોના દૃશ્યોમાં મહત્વપૂર્ણ છે.
- લેઝી ઇવેલ્યુએશન: અસિંક જનરેટર્સ ફક્ત ત્યારે જ મૂલ્યો ઉત્પન્ન કરે છે જ્યારે તેમની વિનંતી કરવામાં આવે છે, જે પ્રોસેસિંગ સમય અને સંસાધનો બચાવી શકે છે જો તમારે સમગ્ર ડેટાસેટ પર પ્રક્રિયા કરવાની જરૂર ન હોય.
વ્યવહારુ ઉદાહરણો
ચાલો જોઈએ કે અસિંક જનરેટર્સનો ઉપયોગ વાસ્તવિક દુનિયામાં કેવી રીતે કરી શકાય છે તેના કેટલાક ઉદાહરણો:
1. API માંથી ડેટા સ્ટ્રીમ કરવો
પેજિનેટેડ API માંથી ડેટા મેળવવાનો વિચાર કરો. બધા પેજ ડાઉનલોડ થવાની રાહ જોવાને બદલે, તમે દરેક પેજ ઉપલબ્ધ થતાં જ તેને સ્ટ્રીમ કરવા માટે અસિંક જનરેટરનો ઉપયોગ કરી શકો છો:
async function* fetchPaginatedData(url) {
let page = 1;
while (true) {
const response = await fetch(`${url}?page=${page}`);
const data = await response.json();
if (data.length === 0) {
return; // No more data
}
for (const item of data) {
yield item;
}
page++;
}
}
async function processData() {
for await (const item of fetchPaginatedData('https://api.example.com/data')) {
console.log(item);
// Process each item here
}
}
processData();
આ ઉદાહરણ દર્શાવે છે કે પેજિનેટેડ API માંથી ડેટા કેવી રીતે મેળવવો અને દરેક આઇટમ આવે ત્યારે તેની પ્રક્રિયા કરવી, સમગ્ર ડેટાસેટ ડાઉનલોડ થવાની રાહ જોયા વિના. આ તમારી એપ્લિકેશનના અનુભવી પ્રદર્શનમાં નોંધપાત્ર સુધારો કરી શકે છે.
2. મોટી ફાઇલોને ચંક્સમાં વાંચવી
મોટી ફાઇલો સાથે કામ કરતી વખતે, સમગ્ર ફાઇલને મેમરીમાં વાંચવી બિનકાર્યક્ષમ હોઈ શકે છે. અસિંક જનરેટર્સ તમને ફાઇલને નાના ચંક્સમાં વાંચવાની મંજૂરી આપે છે, અને દરેક ચંક વાંચવામાં આવે ત્યારે તેની પ્રક્રિયા કરે છે:
const fs = require('fs');
const readline = require('readline');
async function* readLargeFile(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity, // Recognize all instances of CR LF
});
for await (const line of rl) {
yield line;
}
}
async function processFile() {
for await (const line of readLargeFile('path/to/large/file.txt')) {
console.log(line);
// Process each line here
}
}
processFile();
આ ઉદાહરણ રીડ સ્ટ્રીમ બનાવવા માટે fs
મોડ્યુલ અને ફાઇલને લાઇન-બાય-લાઇન વાંચવા માટે readline
મોડ્યુલનો ઉપયોગ કરે છે. દરેક લાઇન પછી અસિંક જનરેટર દ્વારા યીલ્ડ કરવામાં આવે છે, જે તમને ફાઇલને વ્યવસ્થિત ચંક્સમાં પ્રોસેસ કરવાની મંજૂરી આપે છે.
3. બેકપ્રેશરનો અમલ કરવો
બેકપ્રેશર એ ડેટાના ઉત્પાદન અને વપરાશના દરને નિયંત્રિત કરવાની એક પદ્ધતિ છે. જ્યારે ઉત્પાદક ગ્રાહક કરતાં વધુ ઝડપથી ડેટા ઉત્પન્ન કરી રહ્યો હોય ત્યારે આ મહત્વપૂર્ણ છે. અસિંક જનરેટર્સનો ઉપયોગ બેકપ્રેશરનો અમલ કરવા માટે કરી શકાય છે, જેમાં ગ્રાહક વધુ ડેટા માટે તૈયાર ન થાય ત્યાં સુધી જનરેટરને થોભાવવામાં આવે છે:
async function* generateData() {
for (let i = 0; i < 100; i++) {
await new Promise(resolve => setTimeout(resolve, 100)); // Simulate some work
yield i;
}
}
async function processData() {
for await (const item of generateData()) {
console.log(`Processing: ${item}`);
await new Promise(resolve => setTimeout(resolve, 500)); // Simulate slow processing
}
}
processData();
આ ઉદાહરણમાં, generateData
ફંક્શન દર 100 મિલિસેકન્ડે ડેટા ઉત્પન્ન કરનાર ડેટા સ્રોતનું અનુકરણ કરે છે. processData
ફંક્શન એક ગ્રાહકનું અનુકરણ કરે છે જેને દરેક આઇટમ પર પ્રક્રિયા કરવામાં 500 મિલિસેકન્ડ લાગે છે. processData
ફંક્શનમાં await
કીવર્ડ અસરકારક રીતે બેકપ્રેશરનો અમલ કરે છે, જે જનરેટરને ગ્રાહક હેન્ડલ કરી શકે તેના કરતાં વધુ ઝડપથી ડેટા ઉત્પન્ન કરતા અટકાવે છે.
વિવિધ ઉદ્યોગોમાં ઉપયોગના કિસ્સાઓ
અસિંક જનરેટર્સ વિવિધ ઉદ્યોગોમાં વ્યાપક ઉપયોગિતા ધરાવે છે:
- ઈ-કોમર્સ: પ્રોડક્ટ કેટલોગ સ્ટ્રીમ કરવા, ઓર્ડર્સને રીઅલ-ટાઇમમાં પ્રોસેસ કરવા, અને ભલામણોને વ્યક્તિગત કરવી. એક એવા દૃશ્યની કલ્પના કરો જ્યાં પ્રોડક્ટની ભલામણો વપરાશકર્તા બ્રાઉઝ કરે તેમ સ્ટ્રીમ કરવામાં આવે છે, બધી ભલામણોની ગણતરી થાય તેની રાહ જોવાને બદલે.
- ફાઇનાન્સ: નાણાકીય ડેટા સ્ટ્રીમ્સનું વિશ્લેષણ કરવું, બજારના વલણોનું નિરીક્ષણ કરવું, અને સોદાઓ કરવા. ઉદાહરણ તરીકે, રીઅલ-ટાઇમ સ્ટોક ક્વોટ્સ સ્ટ્રીમ કરવા અને તરત જ મૂવિંગ એવરેજની ગણતરી કરવી.
- હેલ્થકેર: મેડિકલ સેન્સર ડેટા પર પ્રક્રિયા કરવી, દર્દીના સ્વાસ્થ્યનું નિરીક્ષણ કરવું, અને દૂરસ્થ સંભાળ પૂરી પાડવી. એક વેરેબલ ઉપકરણનો વિચાર કરો જે દર્દીના મહત્વપૂર્ણ સંકેતોને ડૉક્ટરના ડેશબોર્ડ પર રીઅલ-ટાઇમમાં સ્ટ્રીમ કરે છે.
- IoT (ઇન્ટરનેટ ઓફ થિંગ્સ): સેન્સર્સમાંથી ડેટા એકત્ર કરવો અને પ્રોસેસ કરવો, ઉપકરણોને નિયંત્રિત કરવા, અને સ્માર્ટ વાતાવરણ બનાવવું. ઉદાહરણ તરીકે, સ્માર્ટ બિલ્ડિંગમાં હજારો સેન્સર્સમાંથી તાપમાનના રીડિંગ્સ એકત્રિત કરવા.
- મીડિયા અને મનોરંજન: વિડિઓ અને ઓડિયો કન્ટેન્ટ સ્ટ્રીમ કરવું, ઇન્ટરેક્ટિવ અનુભવો પહોંચાડવા, અને કન્ટેન્ટ ભલામણોને વ્યક્તિગત કરવી. એક ઉદાહરણ વપરાશકર્તાના નેટવર્ક કનેક્શનના આધારે વિડિઓ ગુણવત્તાને ગતિશીલ રીતે સમાયોજિત કરવાનું છે.
શ્રેષ્ઠ પ્રથાઓ અને વિચારણાઓ
અસિંક જનરેટર્સનો અસરકારક રીતે ઉપયોગ કરવા માટે, નીચેની શ્રેષ્ઠ પ્રથાઓ ધ્યાનમાં લો:
- એરર હેન્ડલિંગ: અસિંક જનરેટરમાં મજબૂત એરર હેન્ડલિંગનો અમલ કરો જેથી ભૂલો ગ્રાહક સુધી ફેલાતી અટકે. અપવાદોને પકડવા અને હેન્ડલ કરવા માટે
try...catch
બ્લોક્સનો ઉપયોગ કરો. - સંસાધન વ્યવસ્થાપન: અસિંક જનરેટરમાં ફાઇલ હેન્ડલ્સ અથવા નેટવર્ક કનેક્શન્સ જેવા સંસાધનોનું યોગ્ય રીતે સંચાલન કરો. ખાતરી કરો કે જ્યારે સંસાધનોની હવે જરૂર ન હોય ત્યારે તે બંધ અથવા મુક્ત કરવામાં આવે.
- બેકપ્રેશર: ગ્રાહકને ઝડપી ડેટા સ્ટ્રીમથી દબાઈ જતા અટકાવવા માટે બેકપ્રેશરનો અમલ કરો.
- ટેસ્ટિંગ: તમારા અસિંક જનરેટર્સને સંપૂર્ણપણે ટેસ્ટ કરો જેથી ખાતરી થઈ શકે કે તેઓ સાચા મૂલ્યો ઉત્પન્ન કરી રહ્યા છે અને ભૂલોને યોગ્ય રીતે હેન્ડલ કરી રહ્યા છે.
- રદ કરવું: જો ગ્રાહકને હવે ડેટાની જરૂર ન હોય તો અસિંક જનરેટરને રદ કરવા માટે એક મિકેનિઝમ પ્રદાન કરો. આ એક સિગ્નલ અથવા ફ્લેગનો ઉપયોગ કરીને પ્રાપ્ત કરી શકાય છે જેને જનરેટર સમયાંતરે તપાસે છે.
- અસિંક્રોનસ ઇટરેશન પ્રોટોકોલ: અસિંક જનરેટર્સ અને અસિંક ઇટરેટર્સ કેવી રીતે કામ કરે છે તે સમજવા માટે અસિંક્રોનસ ઇટરેશન પ્રોટોકોલથી પોતાને પરિચિત કરો.
અસિંક જનરેટર્સ વિરુદ્ધ પરંપરાગત અભિગમો
જ્યારે પ્રોમિસિસ અને Async/Await જેવા અન્ય અભિગમો અસિંક્રોનસ ઓપરેશન્સને હેન્ડલ કરી શકે છે, ત્યારે અસિંક જનરેટર્સ ડેટા સ્ટ્રીમિંગ માટે વિશિષ્ટ ફાયદાઓ પ્રદાન કરે છે:
- મેમરી કાર્યક્ષમતા: અસિંક જનરેટર્સ ડેટાને ચંક્સમાં પ્રોસેસ કરે છે, જે સમગ્ર ડેટાસેટને મેમરીમાં લોડ કરવાની તુલનામાં મેમરી વપરાશ ઘટાડે છે.
- સુધારેલી પ્રતિભાવક્ષમતા: તેઓ તમને ડેટા આવે ત્યારે તેની પ્રક્રિયા કરવાની મંજૂરી આપે છે, જે વધુ પ્રતિભાવશીલ વપરાશકર્તા અનુભવ પ્રદાન કરે છે.
- સરળ કોડ:
for await...of
લૂપ અસિંક્રોનસ ડેટા સ્ટ્રીમ્સનો ઉપયોગ કરવા માટે એક સ્વચ્છ અને સાહજિક રીત પ્રદાન કરે છે, જે અસિંક્રોનસ કોડને સરળ બનાવે છે.
જોકે, એ નોંધવું અગત્યનું છે કે અસિંક જનરેટર્સ હંમેશા શ્રેષ્ઠ ઉકેલ નથી. સરળ અસિંક્રોનસ ઓપરેશન્સ માટે કે જેમાં ડેટા સ્ટ્રીમિંગ શામેલ નથી, પ્રોમિસિસ અને Async/Await વધુ યોગ્ય હોઈ શકે છે.
અસિંક જનરેટર્સને ડિબગ કરવું
અસિંક જનરેટર્સને તેમની અસિંક્રોનસ પ્રકૃતિને કારણે ડિબગ કરવું પડકારજનક હોઈ શકે છે. અસિંક જનરેટર્સને અસરકારક રીતે ડિબગ કરવા માટે અહીં કેટલીક ટિપ્સ આપી છે:
- ડિબગરનો ઉપયોગ કરો: કોડને સ્ટેપ-થ્રુ કરવા અને વેરિયેબલ્સની તપાસ કરવા માટે જાવાસ્ક્રિપ્ટ ડિબગરનો ઉપયોગ કરો, જેમ કે તમારા બ્રાઉઝરના ડેવલપર ટૂલ્સમાં બિલ્ટ-ઇન હોય છે.
- લોગિંગ: એક્ઝિક્યુશનના પ્રવાહ અને ઉત્પાદિત મૂલ્યોને ટ્રેક કરવા માટે તમારા અસિંક જનરેટરમાં લોગિંગ સ્ટેટમેન્ટ્સ ઉમેરો.
- બ્રેકપોઇન્ટ્સ: એક્ઝિક્યુશનને થોભાવવા અને જનરેટરની સ્થિતિની તપાસ કરવા માટે અસિંક જનરેટરની અંદર બ્રેકપોઇન્ટ્સ સેટ કરો.
- Async/Await ડિબગિંગ ટૂલ્સ: અસિંક્રોનસ કોડ માટે ડિઝાઇન કરાયેલા વિશિષ્ટ ડિબગિંગ ટૂલ્સનો ઉપયોગ કરો, જે તમને પ્રોમિસિસ અને Async/Await ફંક્શન્સના એક્ઝિક્યુશન પ્રવાહની કલ્પના કરવામાં મદદ કરી શકે છે.
અસિંક જનરેટર્સનું ભવિષ્ય
અસિંક જનરેટર્સ જાવાસ્ક્રિપ્ટમાં અસિંક્રોનસ ડેટા સ્ટ્રીમ્સને હેન્ડલ કરવા માટે એક શક્તિશાળી અને બહુમુખી સાધન છે. અસિંક્રોનસ પ્રોગ્રામિંગ સતત વિકસિત થઈ રહ્યું છે, અને અસિંક જનરેટર્સ ઉચ્ચ-પ્રદર્શન, પ્રતિભાવશીલ એપ્લિકેશન્સ બનાવવામાં વધુને વધુ મહત્વપૂર્ણ ભૂમિકા ભજવવા માટે તૈયાર છે. જાવાસ્ક્રિપ્ટ અને સંબંધિત ટેકનોલોજીનો સતત વિકાસ અસિંક જનરેટર્સમાં વધુ સુધારા અને ઓપ્ટિમાઇઝેશન લાવશે, જે તેમને વધુ શક્તિશાળી અને ઉપયોગમાં સરળ બનાવશે.
નિષ્કર્ષ
જાવાસ્ક્રિપ્ટ અસિંક જનરેટર્સ ડેટા સ્ટ્રીમિંગ, મોટા ડેટાસેટ્સ પર પ્રક્રિયા કરવા અને પ્રતિભાવશીલ એપ્લિકેશન્સ બનાવવા માટે એક શક્તિશાળી અને ઉત્કૃષ્ટ ઉકેલ પૂરો પાડે છે. અસિંક જનરેટર્સના ખ્યાલો, ફાયદાઓ અને વ્યવહારુ ઉપયોગોને સમજીને, તમે તમારી અસિંક્રોનસ પ્રોગ્રામિંગ કુશળતામાં નોંધપાત્ર વધારો કરી શકો છો અને વધુ કાર્યક્ષમ અને સ્કેલેબલ એપ્લિકેશન્સ બનાવી શકો છો. APIs માંથી ડેટા સ્ટ્રીમ કરવાથી લઈને મોટી ફાઇલો પર પ્રક્રિયા કરવા સુધી, અસિંક જનરેટર્સ જટિલ અસિંક્રોનસ પડકારોનો સામનો કરવા માટે એક બહુમુખી ટૂલસેટ પ્રદાન કરે છે. અસિંક જનરેટર્સની શક્તિને અપનાવો અને તમારી જાવાસ્ક્રિપ્ટ એપ્લિકેશન્સમાં કાર્યક્ષમતા અને પ્રતિભાવક્ષમતાનું એક નવું સ્તર અનલોક કરો.