一次加载完整网站的所有图像和脚本?

时间:2017-02-11 05:05:25

标签: javascript jquery html

无论如何都要加载所有图片和脚本,而不是从当前网页加载,而是在第一次加载时加载整个网站,以便全部缓存。

我知道这可能不是最佳做法,但会派上用场。

2 个答案:

答案 0 :(得分:1)

前言

首先,这是个坏主意。这将使您的页面加载速度低于其所需的速度,浪费您的服务器资源和带宽,而这些内容是您网站的访问者甚至可能不需要的(即他们只加载一页)。不过,如果这真的是你想要的,那就让我们这样做:

脚本

我们可以使用Javascript动态加载脚本:

SELECT my_func(1, 2, 3)
  • SELECT * FROM my_func(1, 2, 3); 中,我们定义了从文件到我们要加载的脚本的路径;
  • 然后我们遍历var scriptUrls = ["a.js","b.js","c.js"]; for (i=0;i<scriptUrls.length;i++) { var script = document.createElement("script"); script.src = scriptUrls[i]; document.head.appendChild(script); } ;
  • 中的每个项目
  • 我们使用scriptUrls创建一个新的DOM元素 - 这会生成一个新的scriptUrls元素 - 并将其指定为变量document.createElement("script")的值;
  • 我们将<script>(来源)属性设置为script;
  • 中当前网址的值
  • 然后我们使用src方法将脚本元素添加到HTML文档的scriptUrls<head>)。

这就是我们加载脚本所需的全部内容。

图片

可以使用Javascript以类似的方式加载图像,但有一些区别:

document.head
  • .appendChild在空数组中,我们可以在加载时存储图像对象。您仍然可以使用常规方法var imgs = []; var imgUrls = ["a.png","b.jpg","c.gif"]; for (i=0;i<imgUrls.length;i++) { imgs.push(new Image()); imgs[i].src = imgUrls[i] } 在页面上使用它们;这只是一个临时的事情,允许他们正确加载;
  • imgs只是您要加载的所有图片的网址数组;
  • 现在,我们遍历<img src="...">;
  • imgUrls创建一个新的Image对象(https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/Image)。我们将其添加到imgUrls数组new Image();
  • 的末尾
  • 现在,我们将图片的来源imgsimgs.push设置为src数组中的当前项目(imgs[i].src)。

这就是我们加载图片所需的一切。

注意

你会把它作为头部的第一个脚本。就像把所有这些代码放在一个JS文件(即imgUrls)中并包含它(imgUrls[i])。

答案 1 :(得分:0)

是的,但它并不漂亮或不高效。

您需要做的就是在第一页上包含每个脚本,链接,参考,图片,CSS和诸如此类的东西。例如:

<!DOCTYPE html>
<html>
<head>
  <script src="script_for_page_1" />
  <script src="script_for_page_2" />
  <script src="script_for_page_3" />
</head>
<body>
  <img src="image_from_page_one" style="opacity: 0" />
  <img src="image_from_page_one" style="opacity: 0" />
  <img src="image_from_page_one" style="opacity: 0" />
  <img src="image_from_page_two" style="opacity: 0" />
  <img src="image_from_page_two" style="opacity: 0" />
  <img src="image_from_page_two" style="opacity: 0" />
  <img src="image_from_page_two" style="opacity: 0" />
  <img src="image_from_page_three" style="opacity: 0" />
</body>
</html>