代码之家  ›  专栏  ›  技术社区  ›  namrathu1

Phonegap:图片库加载非常缓慢

  •  0
  • namrathu1  · 技术社区  · 12 年前

    我正在读取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 回复  |  直到 12 年前
        1
  •  1
  •   praneetloke    12 年前

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

    我还没有测试过这个代码。如果您看到错误,您可能需要对其进行小的修改。