Q22 · Web3 场景优化
连接钱包(MetaMask 等)这一步,前端怎么做得既快又不影响整体性能?
⚡ 速记答案(30 秒)
- 不要一进页面就强制弹钱包连接:首屏优先渲染内容,连接钱包按需触发
- 检测钱包注入时:避免在 window.onload 前后做一堆同步检测,尽量放异步流程
- 状态持久化:记住上次连接的钱包类型,下一次快速恢复连接
- 连接组件 / 逻辑按需加载,避免成为首屏性能瓶颈
📖 详细讲解
钱包连接优化策略
1. 延迟加载
• 钱包相关代码懒加载
• 不在首屏阻塞加载
2. 快速恢复
• 记住上次连接的钱包
• 页面刷新后自动重连
3. 状态管理
• 连接状态全局共享
• 避免多次初始化
4. 用户体验
• 不强制首屏连接
• 提供清晰的连接反馈
• 处理连接超时
实现要点
// 懒加载钱包连接模块
const connectWallet = async () => {
const { WalletConnector } = await import('./wallet');
return WalletConnector.connect();
};💻 代码示例
钱包连接状态持久化
const WALLET_KEY = 'last_connected_wallet';
// 保存上次连接的钱包类型
function saveLastWallet(walletType: string) {
localStorage.setItem(WALLET_KEY, walletType);
}
// 尝试自动重连
async function tryAutoConnect() {
const lastWallet = localStorage.getItem(WALLET_KEY);
if (!lastWallet) return null;
// 检查钱包是否已解锁(不会弹出授权框)
if (window.ethereum?.isConnected?.()) {
try {
const accounts = await window.ethereum.request({
method: 'eth_accounts', // 不是 eth_requestAccounts
});
if (accounts.length > 0) {
return accounts[0];
}
} catch {
// 静默失败
}
}
return null;
}面试技巧:回答性能问题时,先说指标和标准,再讲优化手段,最后结合实际项目经验。