缓存通过PHP/AJAX/JSON/jQuery加载的动态图像
我在这里会尽量彻底 我正在使用的应用程序使管理员能够创建文件夹,然后将照片上载到该文件夹中。该显示器类似于Pinterest,它在一个屏幕上加载拼贴中的所有照片。当你只有5-6张照片在里面的时候,它工作得很完美,但这种情况很少发生。一旦你开始得到更多的照片在那里,它开始变得越来越慢。另一件事是,无论何时删除图片或重新输入该文件夹,都必须重新加载整个显示。我需要一些缓存这些图像的方法 以下是我脚本的逻辑: 在缓存通过PHP/AJAX/JSON/jQuery加载的动态图像,php,javascript,jquery,json,caching,Php,Javascript,Jquery,Json,Caching,我在这里会尽量彻底 我正在使用的应用程序使管理员能够创建文件夹,然后将照片上载到该文件夹中。该显示器类似于Pinterest,它在一个屏幕上加载拼贴中的所有照片。当你只有5-6张照片在里面的时候,它工作得很完美,但这种情况很少发生。一旦你开始得到更多的照片在那里,它开始变得越来越慢。另一件事是,无论何时删除图片或重新输入该文件夹,都必须重新加载整个显示。我需要一些缓存这些图像的方法 以下是我脚本的逻辑: 在dashboard.php上,有两个javascript包括:homepageAction
dashboard.php
上,有两个javascript包括:homepageActions.js
和fileManager.js
homepageActions.js
有一个调用javascript函数的document.ready()
脚本,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();
}
});
}
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);
}
此函数具有传入的文件夹路径。从那里,AJAX脚本调用一个PHP脚本,该脚本在该文件夹中查找,并获取该文件夹中所有目录和图像的列表。然后它构造一个JSON字符串,其中包含最初传入的文件夹中每个子文件夹和图像的详细信息。一旦该脚本成功返回,将调用另一个函数,constructTable(data)
,该函数将JSON字符串传递给该函数
这就是事情开始变得有点棘手的地方
constructTable()
函数中有大约240行代码,我这里不包括这些代码,因为它很难理解。总之,这个函数解析JSON字符串,找出哪些条目是目录,哪些条目是文件。它从中创建两个数组:文件夹数组和文件数组
首先,我处理所有文件夹,并相应地显示它们。这部分很好,我不担心
然而,在那之后,我开始浏览图片。对于每个图像,我基本上都在围绕它编写大量代码。每个图像周围都有div、链接和其他HTML标记。但长话短说,我有一个for…next循环,它查看每个文件路径(从JSON收集),我构造了一个长的HTML字符串,然后使用jQuery将其附加到一个DIV中。因此它最终看起来像这样:
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();
}
});
}
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);
}
for(var a=0;a
现在-正如我之前所说,当文件夹中只有几张照片时,这没有问题。然而,当我们开始进入更高的数字时,这就成了一个问题。那么-既然如此,有没有办法将这些照片存储到浏览器缓存中,以便在初始加载后更快地加载它们?您可以使用名为的脚本来改进缓存行为。它可以动态生成缩略图,还可以在服务器和浏览器中缓存图像。从项目网站: 可以缓存缩略图以减少服务器负载。可以单独缓存任意源图像的多个大小。修改(本地)源图像时,缩略图会自动更新
因此,如果您认为问题可能是由缩略图创建、图片缓存和类似操作引起的,请尝试一下。我在这方面取得了很大的成绩。所以。。这个问题不仅仅有一个原因,让我们向他们解释:]
- 移除回路李>
- 用循环中的代码构建一个函数;此函数应接收元素的列表和索引李>
- 在新函数中,您将只处理接收到的索引的元素,然后再次调用该函数(如递归),增加索引并使用
函数(这将破坏同步性)setTimeout
是javascript进程变慢了还是图像加载变慢了?@Rafael-我觉得是p