没有它,他们会因为糟糕的用户体验而感到恼火,永远不会回来。
示例:想象一下,已经创建了一个出色的 AI 写作助手,为编写引人入胜的故事提供有用的建议:
export function AssistantUI() { const [suggestions, setSuggestions] = useState(''); const [loading, setLoading] = useState(false); const handleChange = async (event: any) => { const value = event.target.value; setLoading(true); const res = await fetch( 'https://api.writer.example.com/suggestions', { method: 'POST', body: JSON.stringify({ text: value }), } ); const json = await res.json(); setSuggestions(json.suggestions); setLoading(false); }; return ( <div className="flex flex-col justify-center flex-wrap content-start"> <textarea onChange={handleChange} className="mt-2 mb-4" cols={40} rows={10} /> {/* ... */} </div> ); }但不幸的是,存在一个严重的问题 - 你能发现吗?
export function AssistantUI() { const [suggestions, setSuggestions] = useState(''); const [loading, setLoading] = useState(false); const timeout = useRef<NodeJS.Timeout | null>(null); const handleChange = async (event: any) => { const value = event.target.value; setLoading(true); // 重新启动延迟 clearTimeout(timeout.current!); // 在获取数据前延迟1秒 timeout.current = setTimeout(async () => { const res = await fetch( 'https://api.writer.example.com/suggestion', { method: 'POST', body: JSON.stringify({ text: value }), } ); const json = await res.json(); setSuggestions(json.suggestions); setLoading(false); }, 1000); }; return ( <div className="flex flex-col justify-center flex-wrap content-start"> <textarea onChange={handleChange} className="mt-2 mb-4" cols={40} rows={10} /> {/* ... */} </div> ); }现在 AI 在给出建议前会等待 1 秒!
let silenceTimeout; let silenceDelay = 1000; // 堆代码 duidaima.com function debounceReplyToOpponent() { clearTimeout(silenceTimeout); silenceTimeout = setTimeout(() => { reply('Your fallacious premises have no basis in reality'); }, silenceDelay); }你损失了数千美元
const timeout = useRef<NodeJS.Timeout | null>(null); const ignoring = useRef<boolean>(false); const handleChange = async (event: any) => { if (plan === 'free') { // 仍在忽略,所以返回 if (ignoring.current) return; // 开始忽略 20 秒 ignoring.current = true; setTimeout(() => { ignoring.current = false; }, 20 * 1000); } debounce(); const value = event.target.value; setLoading(true); const res = await fetch( 'https://api.writer.example.com/suggestion', { method: 'POST', body: JSON.stringify({ text: value }), } ); const json = await res.json(); setSuggestions(json.suggestions); setLoading(false); };在获取他们的最后一个建议后,你将忽略免费用户 20 秒。
2.激励免费用户升级以获得无限建议。