LINUX.ORG.RU

Как лучше грузить большой объём json данных в браузер?

 ,


0

1

Наздел $subj. Сейчас данные грузятся прямо через Jquery.ajax и во время загрузки блокируется страница. Может грузить данные с помощью скрытого iframe? Или в iframe оно тоже блокировать будет? Данных бывает очень много (несколько метров).

Страница не должна блокироваться, только если вручную не сделать async: false. А еще JSON хорошо жмется gzip'ом.

Black_Roland ★★★★ ()
Последнее исправление: Black_Roland (всего исправлений: 1)

что за браузер? посмотри в timeline - где именно затрачено время. возможно блокировка - работа парсера JSON.

dib2 ★★★★ ()
Ответ на: комментарий от Black_Roland

Да я знаю, что реализовано топорно: скрипт ждёт загрузки и потом начинает обработку. Короче: тут вообще менять надо всё, что связано с загрузкой данных. Этим придётся заняться.

BeerSeller ★★★★ ()
Ответ на: комментарий от dib2

firefox, chrome (вендовый у юзверей и linux версия у меня ), ie. Сейчас посмотрю.

BeerSeller ★★★★ ()

Мне кажется проблему нужно решать в корне, зачем нужно нескольок метров json данных на одной странице? отсюда и ноги проблемы растут, разделите их. Никто столько не грузит, даже в супер-пупер сложных приложениях.

umren ★★★★★ ()

Может, имеет смысл сделать начальную болванку страницы, в которой будет написано, что «мы вот-вот сейчас загрузимся, секундочку...»?

Сделай ее максимально легкой + оптимизируй по рекомендациям в PageSpeed Insights (есть такое расширение для Chrome).

Если тебе надо сейчас же что-то вывести пользователю полезное, то для дополнительной скорости ты можешь даже прямо внутрь HTML зашить первоначальный кусок JSON, завернув его в функцию, типа:

<script type="text/javascript">
myApp.loadItems({
  "items": [
      {
          "title": "Товар 1",
          "price": 9.99
      },
      // ...
      {
          "title": "Товар 5",
          "price": 0.99
      }
  ]
});
</script>
noomorph ()

Да, и браузер не очень любит, когда слишком много данных выводится на страницу. Он становится крайне неотзывчивым тогда...

Если и нужно на клиенте держать большие объемы данных, то, возможно, есть смысл складировать их в какой-нибудь IndexedDB по мере поступления, а к ней делать по месту запросы.

noomorph ()

Вопрос решён.

Точнее составлен «план» решения. Просто передаваемые данные сильно избыточные.
1. В каждой строке используются имена полей. Заменю на массив так, как список полей и так есть отдельно.
2. Каждое суммовое поле идёт в двух вариантах (не отформатированное и отформатированное). Уберу формотированное поле и запилю форматирование на стороне браузера.

Пример: Имеется 3 поля: CUNO=123 CUNM=«рога и копыта» AMMONT=12309.1
Вот так эта строк выглядит сейчас:

{
  "CUNO":123,
  "CUNM":"рога и копыта",
  "AMMONT":"12 309.10",
  "AMMOUNT$NUM":12309.1
}

[br]
Вот так планирую реализовать:
[123,"рога и копыта",12309.1]
BeerSeller ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.