модуль кеша нативного сценария не работает в соответствии с примером - PullRequest
0 голосов
/ 08 января 2019

Используя пример, представленный на сайте nativescript.org Я создал страницу для тестирования компонента кэша изображений. ТНС-ядро-модули / щ / изображений кэш

cache.push () работает нормально. Каждый раз, когда я использую cache.get (url), объект возвращает ноль. Я никогда не могу получить кэшированные изображения.

При завершении нажатия кажется, что изображение можно извлечь из кэша, но, похоже, оно не сохраняется.

Это происходит как на эмуляторе, так и на реальном подключенном устройстве Android.

Я попытался создать пустое приложение javascript для hellow-world с нуля. tns create --template tns-template-hello-world для тестирования образца и имеет ту же проблему.

    const cache = new Cache();
cache.placeholder = fromFile("~/images/logo.png");
cache.maxRequests = 5;

// set the placeholder while the desired image is donwloaded
viewModel.set("imageSource", cache.placeholder);

// Enable download while not scrolling
cache.enableDownload();

let cachedImageSource;
const url = "https://avatars1.githubusercontent.com/u/7392261?v=4";
// Try to read the image from the cache
const image = cache.get(url);

if (image) {
    // If present -- use it.
    cachedImageSource = imageSource.fromNativeSource(image);
    viewModel.set("imageSource", cachedImageSource);
} else {
    // If not present -- request its download + put it in the cache.
    cache.push({
        key: url,
        url: url,
        completed: (image, key) => {
            if (url === key) {
                cachedImageSource = fromNativeSource(image);
                viewModel.set("imageSource", cachedImageSource); // set the downloaded iamge
            }
        }
    });
}

// Disable download while scrolling
cache.disableDownload();

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Как сказал Маной, кеш изображений находится в кеше памяти, и ожидается, что при начальной загрузке он получит ноль. Однако, как только изображение будет загружено, вы сможете найти его без проблем.

Для вашего удобства я извлек тестовое приложение cuteness.io здесь . В приложении image-cache используется для загрузки миниатюр с заполнителями для каждого элемента в просмотре списка. В этой строке видно, что cache.get вернет null при начальной загрузке, но после прокрутки элементов списка вниз и вверх последовательная загрузка вернет ссылку на собственное изображение ( см. Эту строку ). Обратите внимание, что мы не закрываем приложение и что кэш изображений используется в модели представления для загрузки свойства thumbnail - в контексте элемента управления ListView это будет означать, что метод получения будет запускаться каждый раз при визуализации ячейки ( прокрутка вверх и вниз запускает рециркуляцию и рендеринг ячеек, что вызывает привязку).

0 голосов
/ 08 января 2019

Модуль image-cache не имеет постоянного хранилища. Изображения здесь никогда не записываются на диск, он просто кэширует изображение в памяти только для текущего сеанса, а когда ваше приложение закрыто, оно потеряет все загруженные изображения.

Или, если очередь достигает максимального выделенного объема памяти (то есть 1/8 от общего объема памяти вашего устройства), то самое старое изображение в очереди будет помечено для сбора мусора. В этом случае, если вы снова запросите изображение, его необходимо будет загрузить снова.

Если я правильно понял, вы пытаетесь кэшировать изображение в постоянном хранилище, поэтому его не нужно загружать снова при последующих запусках приложения. Вы можете сделать это вручную, загрузив изображение с помощью модуля Http и запишите его в файл. У нас также есть несколько плагинов для той же цели: nativescript-web-image-cache или nativescript-image-cache-it здесь мало назвать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...