Phonegap:图片库加载速度非常慢

时间:2012-09-24 18:19:12

标签: javascript android jquery cordova android-sdcard

我正在从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);
});
}

当我从SD卡中读取太多图像时出现问题。  当我单击图库视图时,加载图像需要花费大量时间。  有没有办法让它更具响应性并提高性能?

1 个答案:

答案 0 :(得分:1)

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();
   }
}

我没有测试过这段代码。如果您发现错误,可能需要对其进行少量修改。