Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Phonegap:图像库加载速度非常慢_Javascript_Android_Jquery_Cordova_Android Sdcard - Fatal编程技术网

Javascript Phonegap:图像库加载速度非常慢

Javascript Phonegap:图像库加载速度非常慢,javascript,android,jquery,cordova,android-sdcard,Javascript,Android,Jquery,Cordova,Android Sdcard,我正在从sd卡读取图像,并将其显示在phonegap应用程序的多媒体资料中。 我有两个文件夹,我正在阅读其中的内容。一个是同步文件夹和非同步文件夹。 代码如下: listGalleryContents(synchedsdcardfolder, function() { listGalleryContents(unsynchedsdcardfolder, function() { showGalleryPage(); }); }); function l

我正在从sd卡读取图像,并将其显示在phonegap应用程序的多媒体资料中。 我有两个文件夹,我正在阅读其中的内容。一个是同步文件夹和非同步文件夹。 代码如下:

 listGalleryContents(synchedsdcardfolder, function() {
    listGalleryContents(unsynchedsdcardfolder, function() {
        showGalleryPage();
    });
 });




function listGalleryContents(directoryEntry, onComplete) {
var directoryReader = directoryEntry.createReader();
directoryReader.readEntries(function(entries) { // success get files and folders
    for(var i=0; i<entries.length; ++i) {
        if(entries[i].name.indexOf(".") > 0 && entries[i].isFile) {
            imagesArray.push(entries[i].fullPath);
        }
    }
    onComplete();
} , function(error){ 
    alert("Error: = " + error.code);
});
}
listGalleryContents(SynchedsCardFolder,函数(){
listGalleryContents(未同步的SDCardFolder,函数(){
showGalleryPage();
});
});
函数listGalleryContents(目录条目,onComplete){
var directoryReader=directoryEntry.createReader();
readEntries(函数(条目){//success获取文件和文件夹
对于(var i=0;i 0&&entries[i].isFile){
imagesArray.push(条目[i].fullPath);
}
}
onComplete();
},函数(错误){
警报(“错误:=”+错误代码);
});
}
当我有太多的图像无法从sd卡读取时,问题就出现了。 当我点击gallery view时,加载图像会花费很多时间。
有没有办法让它更具响应性并提高性能

Javascript是单线程的,因此回调将在阻止UI的同一主线程中触发。尝试将代码更改为:

listGalleryContents(synchedsdcardfolder, loadUnSyncedFolder);

function loadUnSynchedFolder() {
   setTimeout(function() {
       listGalleryContents(unsynchedsdcardfolder, allFoldersLoaded);
   }, 0);
}

function allFoldersLoaded() {
   setTimeout(showGalleryPage, 0);
}

function listGalleryContents(directoryEntry, onComplete) {
var successCallback = onComplete;
var directoryReader = directoryEntry.createReader();
directoryReader.readEntries(
     function(entries) { readSuccess(entries, successCallback); } , 
     function(error){ 
        alert("Error: = " + error.code);
     });
}

function readSuccess(entries, onComplete) { // success get files and folders
    var i = 0, length = entries.length; 
    for(; i < length ; ++i) { // why are you using ++i and not i++ ??
        if(entries[i].name.indexOf(".") > 0 && entries[i].isFile) {
            imagesArray.push(entries[i].fullPath);
        }
    }
    onComplete();
   }
}
listGalleryContents(SynchedsCardFolder、loadUnSyncedFolder);
函数LoadUnsynchronizedFolder(){
setTimeout(函数(){
listGalleryContents(未同步的SDCardFolder、allFoldersLoaded);
}, 0);
}
函数allFoldersLoaded(){
设置超时(showGalleryPage,0);
}
函数listGalleryContents(目录条目,onComplete){
var successCallback=onComplete;
var directoryReader=directoryEntry.createReader();
directoryReader.readEntries(
函数(entries){readSuccess(entries,successCallback);},
函数(错误){
警报(“错误:=”+错误代码);
});
}
函数readSuccess(entries,onComplete){//success获取文件和文件夹
变量i=0,长度=entries.length;
对于(;i0&&entries[i].isFile){
imagesArray.push(条目[i].fullPath);
}
}
onComplete();
}
}

我尚未测试此代码。如果您看到错误,您可能需要对其进行轻微修改。

非常感谢。性能似乎有了很大提高。我有一些疑问。问题1:我们能否在listGalleryContents()中设置超时;类似于线程的东西,因此我使用一些值填充imagesArray并调用onComplete();然后其余的填充在后台发生?查询2:设置setTimeout(function(),0)有什么用处;在LoadUnsynchronizedFolder()和allFoldersLoaded()中,因为其中只调用了一个方法。是否该控件返回allFoldersLoaded(),但不会调用showGalleryPage();?ThanksI将首先回答您的“查询2”:setTimeout(function(){},0)允许浏览器在“可以”时执行排队操作,并且不会强制它在特定时间内执行。至于您的“查询1”:避免闭包是一种很好的做法,这就是为什么我将成功处理程序放入自己的函数中。成功处理程序将在最常见的情况下被调用,这就是为什么我将错误处理程序闭包(内联)保持原样。非常感谢。我实现了这个,并与我的客户分享了它。由于存在一些延迟,他不满意:(.我可以做些什么吗?没有等待时间。我将我的图库视图拆分为多个页面,在一个页面中显示一定数量的图像。当我单击“下一步”转到下一个图库页面时,它有时会在大约6秒钟内没有响应,因为它将等待填充imagesArray。你认为我可以这样做吗有什么办法让它更有效率吗?谢谢