为了提高页面性能,我需要预加载我需要在底页运行的脚本.
我想控制脚本何时被解析,编译和执行.
我必须避免脚本标记,因为它是常见渲染引擎(geeko等)的阻止程序.
我无法使用defer属性加载它,因为我需要控制脚本执行的时间.此外,异步属性不是可能的.
样品:
<html><head>
//preload scripts ie: a.js without use the script
</head><body> ..... all my nice html here
//execute here a.js
</body></html>
Run Code Online (Sandbox Code Playgroud)
这允许我最大化我的页面的渲染性能,因为浏览器将开始下载脚本内容,并且它将同时呈现页面并行.最后,我可以添加脚本标记,以便浏览器解析,编译和执行代码.
我能做到的唯一方法是使用隐藏的图像标记.(这是斯托扬的简化版)
即
<html><head>
<img src="a.js" style=display:none;>
</head><body> ..... all my nice html here
<script src="a.js">
</body></html>
Run Code Online (Sandbox Code Playgroud)
我没有发现使用这种技术的任何问题,但有没有人知道更好的方法来做到这一点?有没有meta预取?
我正在使用requirejs,所以我试图预加载模块代码而不执行它,因为这段代码依赖于DOM元素.
我的页面有一个标签:
<script id='header' src='/Templates/Shared/Header.tmpl.html' type='text/html'></script>
Firebug告诉我Firefox 5正在请求此资源.在HTML选项卡上,我可以导航到script元素并看到它包含/Template/Shared/Header.tmpl.html的内容.
但是,jQuery坚持脚本标记为空.$('#header').html()返回一个空字符串.我不明白为什么.
是的,我可以使用$ .get()加载文件并使用$('#header').html(data)来设置内容.然后我可以按照我的预期使用它.这显然会产生第二个请求,我想避免.
我有一个外部文件(让我们说foo.js)
function baz() {}
Run Code Online (Sandbox Code Playgroud)
然后在我的HTML中,我使用脚本标记导入它:
<script type="text/javascript" src="foo.js"></script>
Run Code Online (Sandbox Code Playgroud)
我希望能够从脚本标记内部获取JS的字符串.我尝试过jquery的html(),以及innerHTML和innerText属性,但它们都返回空字符串.
注意:我正在尝试避免使用AJAX,因为我的服务器速度很慢,并且即使使用缓存也会减小网页的大小.
编辑:我想要获取的字符串将包含javascript文件中的数据,而不是其URL:
getJsData(document.querySelector('script[src="foo.js"]')) == 'function baz() {}'
Run Code Online (Sandbox Code Playgroud) 我想<script>
在html中获取标记的内容:
我可以<script>test</script>
使用jquery 获取内容$("script").html()
.
但如何获得内容
<script src='something.js'></script>
?
javascript ×3
jquery ×3
html ×2
browser ×1
firebug ×1
firefox ×1
header ×1
performance ×1
requirejs ×1