रीयल-टाइम UI पैटर्न
तुरंत प्रतिक्रिया के लिए आशावादी अपडेट लागू करें, ऑफ़लाइन होने पर स्थानीय कतार का उपयोग करें, और UI में केवल बदली हुई वस्तुओं को अपडेट करने के लिए आने वाले डेटा का अंतर निकालें।
रीयल-टाइम UI पैटर्न, CoddyKit पर Frontend Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Frontend Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Frontend Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
रीयल-टाइम का अर्थ वास्तविक अनुभव वाला यूएक्स
रीयल-टाइम केवल तेज़ होने से अधिक है — यह प्रतिक्रियाशील, पूर्वानुमेय और विलंब को सहने वाला होना चाहिए। तीन मुख्य पैटर्न हैं: आशावादी अपडेट, स्थानीय कतार और स्मार्ट अंतर-पहचान।
आशावादी अपडेट
सर्वर की पुष्टि से पहले, उपयोगकर्ता की action पर तुरंत यूआई अपडेट करें। सर्वर अस्वीकार करे तो बदलाव वापस कर दें। इससे ऐप तुरंत प्रतिक्रिया देने वाला महसूस होता है।
async function likePost(id) {
// 1. Optimistically update UI:
setLikes(l => ({ ...l, [id]: (l[id] || 0) + 1 }));
setLiked(prev => ({ ...prev, [id]: true }));
try {
await fetch(`/api/posts/${id}/like`, { method: 'POST' });
} catch (err) {
// 2. Rollback on failure:
setLikes(l => ({ ...l, [id]: (l[id] || 1) - 1 }));
setLiked(prev => ({ ...prev, [id]: false }));
toast.error('Could not like — please retry');
}
}अस्थायी ID के साथ आशावादी अपडेट
बनाए गए आइटम के लिए स्थानीय रूप से एक अस्थायी ID दें। प्रतिक्रिया आने पर उसे सर्वर की वास्तविक ID से बदल दें।
async function addComment(text) {
const tempId = `tmp-${Date.now()}`;
setComments(c => [...c, { id: tempId, text, pending: true }]);
try {
const saved = await fetch('/api/comments', {
method: 'POST',
body: JSON.stringify({ text })
}).then(r => r.json());
setComments(c => c.map(m => m.id === tempId ? saved : m));
} catch (err) {
setComments(c => c.map(m => m.id === tempId ? { ...m, error: true } : m));
}
}ऑफ़लाइन होने पर स्थानीय कतार
नेटवर्क बंद होने पर action को स्थानीय रूप से कतार में रखें और नेटवर्क लौटने पर उन्हें फिर से चलाएँ। उपयोगकर्ता काम जारी रख सकता है।
const queue = JSON.parse(localStorage.getItem('queue') || '[]');
function enqueue(action) {
queue.push(action);
localStorage.setItem('queue', JSON.stringify(queue));
trySend();
}
async function trySend() {
while (queue.length && navigator.onLine) {
const action = queue[0];
try {
await fetch(action.url, action);
queue.shift();
localStorage.setItem('queue', JSON.stringify(queue));
} catch {
break; // stop until online
}
}
}
window.addEventListener('online', trySend);आने वाले रीयल-टाइम डेटा में अंतर पहचानना
यदि सर्वर पूरी सूची भेजता है, तो उसकी तुलना current स्थिति से करें और केवल बदलावों को अपडेट करें — इससे अनावश्यक पुनः-रेंडर और एनीमेशन संबंधी गड़बड़ियाँ नहीं होतीं।
function applyServerSnapshot(newList, currentList) {
const current = new Map(currentList.map(i => [i.id, i]));
const result = newList.map(item => {
const prev = current.get(item.id);
if (!prev) return { ...item, _state: 'new' };
if (prev.updatedAt !== item.updatedAt) return { ...item, _state: 'updated' };
return prev;
});
return result;
}पैच-आधारित अपडेट
पूरे स्नैपशॉट से बेहतर: सर्वर केवल बदले हुए फ़ील्ड भेजता है। उन्हें क्रमिक रूप से लागू करें — इससे कम बैंडविड्थ लगती है और रेंडरिंग तेज़ होती है।
// Server sends: { type: 'patch', id: 42, fields: { likes: 11 } }
ws.on('message', (msg) => {
if (msg.type === 'patch') {
setPosts(posts => posts.map(p =>
p.id === msg.id ? { ...p, ...msg.fields } : p
));
}
});अधिक आवृत्ति वाले अपडेट को सीमित करना
कुछ स्ट्रीम प्रति सेकंड कई अपडेट भेजती हैं (माउस की स्थिति, स्टॉक टिक)। ब्राउज़र में झटकेदार प्रदर्शन से बचने के लिए यूआई अपडेट को लगभग 60Hz तक सीमित करें।
import { throttle } from 'lodash-es';
const applyUpdate = throttle((data) => {
setData(data);
}, 16); // ~60fps
ws.on('tick', applyUpdate);उपस्थिति संकेतक
रीयल-टाइम में दिखाएँ कि कौन ऑनलाइन है या टाइप कर रहा है। सर्वर उपस्थिति इवेंट प्रकाशित करता है; क्लाइंट अवतारों के साथ एक सूची रेंडर करता है।
ws.on('presence', ({ users }) => {
setOnlineUsers(users);
});
ws.on('typing', ({ user, isTyping }) => {
setTypingUsers(t => isTyping
? [...t.filter(u => u.id !== user.id), user]
: t.filter(u => u.id !== user.id));
});कनेक्शन स्थिति बैनर
ऑफ़लाइन होने या पुनः-कनेक्ट होने पर एक हल्का बैनर दिखाएँ। पूरी तरह पुनः-कनेक्ट होने पर उसे छिपा दें। जब उपयोगकर्ता देख सकते हैं कि क्या हो रहा है, तो वे विलंब को कहीं बेहतर ढंग से सहन करते हैं।
{!isConnected && (
<div className="connection-banner">
Reconnecting... Your changes will sync when you're back online.
</div>
)}टकराव समाधान
रीयल-टाइम ऐप्स को एक साथ किए गए टकरावपूर्ण संपादनों को संभालना चाहिए। रणनीतियाँ: अंतिम-लेखन-विजेता (सरल, लेकिन डेटा खो सकता है), वर्ज़न वेक्टर, OT (ऑपरेशनल ट्रांसफ़ॉर्मेशन), CRDTs (Yjs, Automerge)।
सहयोग के लिए CRDTs
सीआरडीटी (संघर्ष-मुक्त प्रतिकृति डेटा प्रकार) किसी केंद्रीय सर्वर के बिना रीयल-टाइम सहयोगी संपादन सक्षम करते हैं। लाइब्रेरी: Yjs, Automerge। इनका उपयोग Figma, Linear और Notion जैसी ऐप्स में किया जाता है।
प्रदर्शन: वर्चुअलाइज़्ड सूचियाँ
रीयल-टाइम फ़ीड बहुत लंबी हो सकती हैं। केवल दिखाई देने वाले आइटम रेंडर करने के लिए वर्चुअलाइज़्ड सूचियों (react-virtuoso, @tanstack/react-virtual) का उपयोग करें — कुल संख्या चाहे जितनी हो, मेमोरी और CPU स्थिर रहते हैं।
त्वरित जाँच
रीयल-टाइम यूआई में 'आशावादी अपडेट' क्या होता है?
पुनरावलोकन: रीयल-टाइम यूआई पैटर्न
आशावादी अपडेट ऐप्स को तुरंत प्रतिक्रिया देने वाला महसूस कराते हैं; विफलता पर बदलाव वापस करें। बनाए गए आइटम के लिए अस्थायी ID रखें। ऑफ़लाइन टिकाऊपन के लिए स्थानीय कतार का उपयोग करें। पुनः-रेंडर से बचने के लिए सर्वर अपडेट में अंतर पहचानें या पैच लागू करें। अधिक आवृत्ति वाली स्ट्रीम को सीमित करें। उपस्थिति (ऑनलाइन, टाइप कर रहा है) और कनेक्शन बैनर दिखाएँ। सहयोगी संपादन के लिए CRDTs (Yjs, Automerge) का उपयोग करें। लंबी रीयल-टाइम सूचियों को वर्चुअलाइज़ करें।
एआई शिक्षक के साथ HTML सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 41
- पाठ
- 163
अक्सर पूछे जाने वाले प्रश्न
क्या “रीयल-टाइम UI पैटर्न” पाठ निःशुल्क है?
हाँ—“रीयल-टाइम UI पैटर्न” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Frontend Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Frontend Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“रीयल-टाइम UI पैटर्न” में मैं क्या सीखूँगा?
तुरंत प्रतिक्रिया के लिए आशावादी अपडेट लागू करें, ऑफ़लाइन होने पर स्थानीय कतार का उपयोग करें, और UI में केवल बदली हुई वस्तुओं को अपडेट करने के लिए आने वाले डेटा का अंतर निकालें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Frontend Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Frontend Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Frontend Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“रीयल-टाइम UI पैटर्न” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Frontend Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Frontend Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- WebSocket API: open, message, close, error
- Socket.io क्लाइंट एकीकरण
- एकतरफ़ा स्ट्रीमिंग के लिए सर्वर-प्रेषित इवेंट
- रीयल-टाइम UI पैटर्न