R Shiny中如何延迟加载JS文件?defer属性设置与有效性疑问
在R Shiny中使用defer属性加载JS脚本的问题解答
1. 如何渲染不带=TRUE的defer属性
要让Shiny生成仅含defer关键字的script标签,有两种常用方法:
方法一:使用空字符串赋值
在tags$script中将defer设为空字符串,Shiny会自动渲染成无值的布尔属性:tags$script(src = "myscript.js", defer = "")渲染后结果:
<script src="myscript.js" defer></script>方法二:直接编写HTML标签
用HTML()函数直接定义完整的script标签,完全自定义属性:HTML('<script src="myscript.js" defer></script>')
2. defer="TRUE"是否影响功能
不会影响功能。HTML的布尔属性规则是:只要属性存在,无论其值是什么(哪怕是"false"或"TRUE"),浏览器都会将其视为true。因此defer="TRUE"和仅写defer的效果完全一致,都能触发脚本的延迟加载行为。
3. defer在Shiny应用中是否有效
defer在Shiny中是有效的,但需要注意几个关键点:
- 仅对外部脚本生效:defer属性只作用于带
src的外部JS文件,内联脚本无法通过defer延迟执行。 - 不阻塞页面渲染:带有defer的脚本会在DOM解析完成后、
DOMContentLoaded事件触发前执行,不会阻碍Shiny页面的初始渲染,确实能提升启动速度。 - 注意脚本依赖:如果你的自定义脚本依赖Shiny的内置JS对象(比如
Shiny全局对象),需要确保脚本在Shiny初始化完成后执行。可以在脚本中监听Shiny的连接事件:$(document).on('shiny:connected', function() { // 这里写依赖Shiny的代码 });
内容的提问来源于stack exchange,提问作者mkranj
相关产品推荐
相关产品推荐

