Чтение файлов с 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.
Проблема здесь в том, что я не могу собрать всех пациентов, исследования, серии или изображения одновременно. Единственное решение, которое я нашел, - это выполнить итерацию и проверить, является ли это объект пациента, исследования, серии или изображения.
Есть ли какой-либо метод / стандарт для получения лучшего способа?