延迟加载javascript
lazy loading javascript
本文关键字:javascript 延迟加载 更新时间:2023-09-26
延迟加载和按需加载这三种方式的基本区别是什么?为什么?
脚本1:$.getScript = function(url, callback, cache){
$.ajax({
type: "GET",
url: url,
success: callback,
dataType: "script",
cache: cache
});
};
script2:
function require(file, callback) {
var script = document.getElementsByTagName('script')[0],
newjs = document.createElement('script');
// IE
newjs.onreadystatechange = function () {
if (newjs.readyState === 'loaded' || newjs.readyState === 'complete') {
callback();
}
};
// others
newjs.onload = function () {
callback();
};
newjs.src = file;
script.parentNode.insertBefore(newjs, script);
}
document.getElementById('id').onclick = function () {
require('ondemand.js', function () {
extraFunction('loaded from the parent page');
document.body.appendChild(document.createTextNode('done!'));
});
};
script3:
$L = function (c, d) {
for (var b = c.length, e = b, f = function () {
if (!(this.readyState
&& this.readyState !== "complete"
&& this.readyState !== "loaded")) {
this.onload = this.onreadystatechange = null;
--e || d()
}
}, g = document.getElementsByTagName("head")[0], i = function (h) {
var a = document.createElement("script");
a.async = true;
a.src = h;
a.onload = a.onreadystatechange = f;
g.appendChild(a)
}; b;) i(c[--b])
};
- 使用ajax加载脚本。更具体地说,它使用XHR来加载一些js并使其对浏览器可用。没有阻塞完成。它仍然执行同源策略。
- 修改头文件,通过创建
<script/>
元素注入一个新的.js文件。这也不会在页面加载时阻止浏览器。 - 与#2做同样的事情,但它似乎支持一系列脚本。它还将async设置为true,这不会导致阻塞。for循环更令人困惑,因为它创建了更多的匿名方法。
-
似乎检索脚本与XmlHttpRequest和
eval()
它。如果脚本不是托管在相同的协议/域/端口上,这将不起作用。 -
3。似乎两者都做同样的事情:它们创建
<script src="the script url"></script>
元素,将onload
事件绑定在其上并将其插入页面上。脚本加载后由浏览器执行,并触发onload
事件。
- 通过ajax获取脚本,
eval()
的内容 - 将
script
元素插入head
元素,并在加载完成后报告 - 与(2)相同,但接受脚本url数组,并且编写得更复杂
(2)和(3)都使用onreadystatechange
钩子,这可能与较旧的浏览器(例如,Firefox 3)不兼容。
(1)可能是最健壮的,因为它只需要XHR。但是,如果在以这种方式加载的代码中出现错误,浏览器的控制台可能不是很有帮助,因为错误只是发生在"eval'd code"中,而不是在特定的文件/行中。也就是说,延迟加载通常是一个优化的事情,所以你可以只包括脚本正常,或与任何其他两种方法,在调试。
你应该试试这个叫做head.js的新库
他们有一些有趣的想法和api ..希望能有所帮助。或者您可以做的是使用正常的XHR请求来获取脚本文件名,并使用像这样的方法插入到dom中。我还添加了removeScript部分。
addScript = function(file)
{
var headID = document.getElementsByTagName("head")[0];
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = file;
headID.appendChild(newScript);
};
removeScript = function(file)
{
var headID = document.getElementsByTagName("head")[0].children;
for(var i in headID)
if(headID[i].tagName == "SCRIPT")
if(headID[i].getAttribute('src') == file)
headID[i].parentNode.removeChild(headID[i]);
}
如果你使用像jquery这样的库,你不需要担心任何事情,你可以从服务器获取HTML或脚本标记,并使用。HTML () API将其插入到dom
相关文章:
- 使用Twitter引导程序's Scrollspy到延迟加载(滚动加载)异步JavaScript
- Javascript客户端从ASP.NET MVC后端延迟加载模型
- 如何包含多个JS文件-延迟加载javascript
- 在 JavaScript 中延迟加载,Jquery 'ready()' 在加载 JQuery 之前运行
- Javascript (Mobile) - 使用 jquery 延迟加载图像
- Javascript - 预加载的图像渲染延迟(仅限第一次)
- 延迟加载由 appendChild() 在 javascript/leaflet 中附加的图像
- 余烬.为真正的大应用程序延迟加载模板和 JavaScript
- 多个延迟加载实例 |Javascript
- 如何在javascript/html中延迟加载标签
- 延迟加载Javascript以加速我的Joomla
- 使用 JavaScript 将图像添加到页面,该页面也使用延迟加载类型功能
- JavaScript 延迟加载渐进式增强方式
- 延迟加载Symfony 1.4中的JavaScript
- 延迟加载Javascript
- 延迟加载javascript
- Javascript:DataTables.net,延迟加载取代分页
- 基本无限滚动/延迟加载博客文章与纯JavaScript
- 延迟加载带有优雅降级的图像(JavaScript)
- Javascript通过id延迟加载图像