Лучшая практика для загрузки большого текстового файла с использованием jQuery get () - PullRequest
5 голосов
/ 26 февраля 2011

В настоящее время я сохраняю результаты get в строке, поскольку открываемый файл представляет собой обычный текстовый файл размером от 3 до 20 МБ.

Затем я анализирую эту строку и изменяю ее так, чтобы конецрезультат может быть выведен в формате html.

Я просто ищу проверку работоспособности, чтобы увидеть, является ли загрузка таким способом лучшим способом?

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

Спасибо

Ответы [ 2 ]

9 голосов
/ 26 февраля 2011

есть ли способ загрузить порцию целевого текстового файла, проанализировать порцию, запросить другую порцию и т. Д.

Чтобы извлечь часть (или порцию) ресурсаиспользуйте заголовок HTTP Range .Большинство веб-серверов правильно соблюдают этот заголовок.

пример HTTP-запроса:

GET /resource/url/path HTTP/1.1\r\n
User-agent: whatever\r\n
Host: www.example.com\r\n
Range: bytes=0-3200\r\n\r\n

Обновление:

В jQuery v1.5 и более поздних версиях вы можете указать jQuery отправлять дополнительный HTTP-запросЗаголовки для отдельного вызова ajax, например:

    $.ajax({type: "GET",
            url: url,
            headers : { "Range" : 'bytes=0-3200' },
            ....

Если вы не хотите изменять каждый вызов $.ajax(), Stofke говорит, что вы можете использовать «beforeSend» fn.Примерно так:

  $.ajaxSetup({ beforeSend : function(xhr) {
        xhr.setRequestHeader("Range", "bytes=0-3200" );
  }});      

Используя $.ajaxSetup(), вам потребуется изменить заголовок диапазона для каждого дополнительного вызова.

Я не знаю, как заставить jQuery автоматически загружать ресурс по частям.Я полагаю, вам придется делать это самостоятельно с помощью setTimeout () или чего-то еще, в success () вызова ajax.Каждый раз, когда вы получаете ответ, вызывайте setTimeout () и выполняйте следующий вызов ajax.Ваш резидентный браузер Javascript должен будет отслеживать, какие части файла вы уже получили, и какую часть (байтовый индекс) вы хотите получить следующей.

Еще один способ сделать это - сделать ajax-вызовы только тогда, когда ваше приложение готово к этому.Вместо того чтобы ждать успеха () от вызова ajax, просто сделайте вызов ajax после того, как вы закончили обработку результатов первого поиска диапазона.

Также: для поддержки арифметических целей перед выполнением первого GET вы можете использовать вызов HEAD, чтобы узнать длину ресурса, которая сообщит вам максимальный индекс в диапазоне, который вы можете использовать.

0 голосов
/ 26 февраля 2011

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

Из документации JQuery:

метод .load () , в отличие от $ .get (), позволяет нам указать часть удаленного документа для вставки . Это достигается с помощью специального синтаксиса для параметра url. Если в строку включен один или несколько пробельных символов, предполагается, что часть строки, следующая за первым пробелом, является селектором jQuery, определяющим загружаемый контент.

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

$('#result').load('ajax/test.html #container');

Когда этот метод выполняется, он извлекает содержимое ajax / test.html, но затем jQuery анализирует возвращенный документ, чтобы найти элемент с идентификатором контейнера. Этот элемент вместе с его содержимым вставляется в элемент с идентификатором результата, а остальная часть извлеченного документа отбрасывается.

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