useScriptTriggerIdleTimeout
useScriptTriggerIdleTimeout 函数的 API 文档。
创建一个触发器,在 Nuxt 准备就绪后,经过空闲超时后加载脚本。这对于非关键脚本非常有用,可以延迟加载以进一步减少对初始页面性能的影响。
函数签名
function useScriptTriggerIdleTimeout(options: IdleTimeoutScriptTriggerOptions): Promise<boolean>
参数
export interface IdleTimeoutScriptTriggerOptions {
/**
* 在加载脚本之前等待的超时时间(毫秒)。
*/
timeout: number
}
返回值
返回一个 Promise,当超时完成且应加载脚本时,解析为 true,如果触发器被取消,则解析为 false。
Nuxt 配置用法
为了方便起见,您可以直接在 nuxt.config 中使用此触发器,而不需要显式调用组合函数:
export default defineNuxtConfig({
scripts: {
registry: {
googleAnalytics: [{
id: 'GA_MEASUREMENT_ID'
}, {
trigger: { idleTimeout: 3000 } // Nuxt 准备后 3 秒加载
}]
}
}
})
export default defineNuxtConfig({
scripts: {
globals: {
chatWidget: ['https://widget.example.com/chat.js', {
trigger: { idleTimeout: 5000 } // Nuxt 准备后 5 秒加载
}]
}
}
})
示例
基本用法
在 Nuxt 准备就绪后 5 秒加载脚本:
const script = useScript({
src: 'https://example.com/analytics.js',
}, {
trigger: useScriptTriggerIdleTimeout({ timeout: 5000 })
})
延迟加载分析脚本
非常适合不需要立即加载的分析脚本:
<script setup lang="ts">
// 在 3 秒延迟后加载 Google Analytics
const { $script } = useScriptGoogleAnalytics({
id: 'GA_MEASUREMENT_ID'
}, {
trigger: useScriptTriggerIdleTimeout({ timeout: 3000 })
})
// 脚本加载完成后追踪事件
watch($script.status, (status) => {
if (status === 'loaded') {
// 现在可以使用分析功能
gtag('event', 'page_view')
}
})
</script>
渐进增强
延迟加载增强脚本以优先保证关键资源:
<script setup lang="ts">
// 10 秒后加载聊天窗口脚本
const chatScript = useScript({
src: 'https://widget.intercom.io/widget/abc123'
}, {
trigger: useScriptTriggerIdleTimeout({ timeout: 10000 })
})
// 5 秒后加载搜索增强脚本
const searchScript = useScript({
src: 'https://cdn.example.com/search-enhancement.js'
}, {
trigger: useScriptTriggerIdleTimeout({ timeout: 5000 })
})
</script>
最佳实践
- 使用合适的超时时间:分析脚本建议 3-5 秒,窗口小部件建议 5-10 秒,非必要功能更长时间
- 考虑用户行为:高互动页面使用较短超时,内容为主页面使用较长超时
- 监控性能:确保延迟加载确实改善了核心网页指标(Core Web Vitals)
- 结合其他触发器使用:与交互触发器结合,获得最佳用户体验