Чтение файлов с CD с использованием HTML5, webkitdirectory занимает больше времени по сравнению с чтением локальных файлов

У меня есть веб-приложение, которое позволяет пользователю загружать файлы DICOM и Non-DICOM в свою учетную запись. Я использую JavaScript, HTML5, Webkitdirectory, Chrome и Datatable для заполнения выбранных файлов в пользовательском интерфейсе. Проблема, с которой я сталкиваюсь, -

При выборе файлов с их локального компьютера следующий код работает довольно быстро, и выбранные файлы сразу же заполняются в пользовательском интерфейсе, но при выборе того же количества файлов с компакт-диска требуется время для рендеринга в пользовательском интерфейсе. Вот пример -

Для компакт-диска с 20 исследованиями DICOM + 2 исследования, не относящимися к DICOM, и примерно 2241 образом требуется около 5-6 минут для первого заполнения списка в пользовательском интерфейсе. Если я попытаюсь выбрать ту же папку на компакт-диске, список будет заполнен примерно через 60 секунд, если он был заполнен один раз в течение того же сеанса.

Но если я использую тот же набор файлов с локальной машины, то заполнение пользовательского интерфейса занимает примерно 6 -7 секунд.

Вот мой код, который выполняется для каждого файла DICOM -

var fileReader = new FileReader();
fileReader.onload = function(evt){
    console.log("Completed Reading");
    var arrayBuffer = fileReader.result;

    var byteArray = new Uint8Array(arrayBuffer);
    _parseDicom(byteArray);
    try {
        if (fileReader.readyState !== 2) {
            fileReader.abort();
        }
    }
    catch (err) {
        console.log('error occured: '+err);
    }
}
var blob = f.slice(0, 50000);
console.log("Starting to Read");
fileReader.readAsArrayBuffer(blob);

После анализа вопроса, который я придумал,

  • Основная вещь, которую я предполагаю, заключается в том, что ОС требуется время, чтобы смонтировать компакт-диск в свою память, поскольку это внешний привод. Это займет меньше времени, если мы получим доступ во второй раз, потому что содержимое CD уже смонтировано.

  • Время между "началом чтения" и "завершенным чтением" относительно больше при чтении файлов с компакт-диска, чем с локальной машины.

  • Я также попытался найти файл DICOMDIR, который является индексом всех учебных файлов, содержащихся на диске, и включен именно по этой причине: чтобы избежать продолжительного сканирования диска. Но я не нашел ни стандарта, ни способа проанализировать файл DICOMDIR в JavaScript

Есть ли способ уменьшить время, необходимое для чтения файлов с компакт-диска?

ОБНОВЛЕНИЕ -

Теперь я могу получить файловую структуру DICOMDIR в JavaScript с помощью dicomParser - https://github.com/chafey/dicomParser

var fr = new FileReader();
fr.onload = function(evt){
    var byteArray = new Uint8Array(fr.result);
    try {
        var dataSet = dicomParser.parseDicom(byteArray);
        _searchDicom(dataSet, f);
    } catch (err) {
        if (typeof err.dataSet != 'undefined') {
            _searchDicom(err.dataSet, f);
        }
    }
}
var blob = f.slice(0, 1000000); 
fr.readAsArrayBuffer(blob);

function _searchDicom(dataset,f) {
    var data = dataset.elements.x00041220.items;
    if(data) {
    data.forEach(function (e) {
        if (e.dataSet.string('x00041430') === 'PATIENT') {
            console.log("Patient Name - "+e.dataSet.string('x00100010'));
        }
        else if (e.dataSet.string('x00041430') === 'STUDY') {}
        else if (e.dataSet.string('x00041430') === 'SERIES') {}
        else if (e.dataSet.string('x00041430') === 'IMAGE') {}              
    });
    }
}

Структура объекта похожа на то, что отображается на - https://rawgit.com/chafey/dicomParser/master/examples/dumpWithDataDictionary/index.html
когда мы загружаем любой файл DICOMDIR.

Проблема здесь в том, что я не могу собрать всех пациентов, исследования, серии или изображения одновременно. Единственное решение, которое я нашел, - это выполнить итерацию и проверить, является ли это объект пациента, исследования, серии или изображения.

Есть ли какой-либо метод / стандарт для получения лучшего способа?

0 ответов

Другие вопросы по тегам