我会尽量在这里尽可能地透彻。缓存通过PHP/AJAX/JSON/jQuery加载的动态图像
我正在使用的应用程序使管理员能够创建文件夹,然后将照片上传到该文件夹中。该显示与Pinterest相似,它将所有照片加载到一个屏幕上拼贴。当你在那里只有5到6张照片时,它是完美的,但这很少会发生。一旦你开始在那里获得更多的照片,它开始变得更慢。另一件事是,无论何时删除图片或重新输入该文件夹,整个显示都必须重新加载。我需要一些缓存这些图像的方法。
这里是我的脚本的逻辑:
在dashboard.php
,有两个JavaScript包括:homepageActions.js
和fileManager.js
。 homepageActions.js
有一个document.ready()
脚本,它调用一个javascript函数showFiles()
。
所以基本上,要更简洁一些,只要文档加载,功能showFiles()
被调用。该功能如下所示:
function showFiles(directoryName) {
$.ajax({
url: 'displayRecords.php',
type: 'post',
data: ({directoryName:directoryName}),
dataType: 'json',
success: function(data) {
constructTable(data);
$(document).find("a[rel*='lightbox']").lightBox();
}
});
}
此功能具有传递给它的文件夹路径。从那里开始,AJAX脚本调用一个查看该文件夹的PHP脚本,并获取该文件夹中所有目录和图像的列表。然后构造一个JSON字符串,其中包含最初传入的文件夹中每个子文件夹和图像的详细信息。一旦该脚本成功返回,将调用另一个函数constructTable(data)
,该函数将JSON字符串传递给该函数。
这里是事情开始有点毛茸茸的地方。
constructTable()
函数有大约240行代码,我不会在这里包含它,因为它很难遵循。总而言之,该函数解析JSON字符串,确定哪些条目是目录,哪些条目是文件。它从中创建两个数组:一组文件夹和一组文件。
首先我处理所有的文件夹,并相应地显示它们。这部分是好的,我不担心。
然后,我开始浏览图像。对于每个图像,我基本上都是围绕它编写大量的代码。每个图像周围都有div,链接和其他HTML标记。但长话短说,我有一个for ... next循环,它查看每个文件路径(从JSON中收集),然后构造一长串HTML,然后使用jQuery将其附加到DIV中。因此,最终的最终看起来是这样的:
for (var a = 0; a < numPhotos; a++) {
photoCode += "<div id='outside-container-"+a+"'>";
photoCode += "<a rel='lightbox' class='photo-link' href='"++"'>";
photoCode += "<img src='http://" + rootURL + "/uploads/"+fileNameArray[a] + "' width='200' class='photo-thumb'/></a>";
photoCode += "</div>";
$("#column1").append(photoCode);
}
现在 - 正如我以前说过,当只有一对夫妇的文件夹中的照片,这是没有问题的。但是,当我们开始进入更高的数字时,它就成了一个问题。所以 - 据说,有什么方法可以将这些照片存储到浏览器缓存中,以便在初始加载后更快地加载这些照片?
是JavaScript进程变慢或图像加载? – 2012-03-21 18:53:13
@拉斐尔 - 我觉得这个过程变慢了。例如,当我点击一个文件夹时,要加载照片显示,我必须一个接一个地观看照片。这些照片正好在那里出现,所以它不像我正在观看缓慢的照片加载进程......但是,等待100张照片加载,每张照片都需要大约一秒钟的时间,这是不可取的。我已经考虑采取稍微不同的方法,并在我的仪表板。php文件,创建几百个空图像标签,然后通过js填充src属性 - 但我不确定这是最好的方法。 – 2012-03-21 20:29:57
我不相信这是你的JavaScript变得缓慢,因为你的代码不是太重......检查我的答案 – 2012-03-21 21:12:13