Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.07.2013, 19:39
Новичок на форуме
Отправить личное сообщение для ValMal Посмотреть профиль Найти все сообщения от ValMal
 
Регистрация: 18.07.2013
Сообщений: 5

Внешний сценарий по выбору пользователя
есть огромный массив (380 000 строк по 3 элемента в каждой - фактически 3 массива). Знаю про PHP и пр., понимаю, что можно раскидать по разным HTML и перезагружать страницы... НО НЕОБХОДИМО реализовать именно средствами JS.

Как вариант: <select> - меню, где каждая строка - выбор первой... второй... третьей... и т.д. сотни элементов массива.. пользователь выбирает необходимый набор данных, ТОЛЬКО ОНИ (часть массива) подгружаются из внешнего файла JS. Понимаю, что файлов JS на сервере будет мильон пятьсот и еще половина вагона... массив дробится и генерируется в файлы автоматически, так что это не проблема. Проблема в том, чтоб прописать подгрузку внешних сценариев не всех разом (20 мб в тестовом формате), а только того файла, который выбран пользователем.

Другими словами: если нажата кнопка1, то подружать сценарий1, если нажата кнопка2, то к сценарию1 не обращаемся, сразу подгружаем сценарий2. Если нажата кнопка 500, то обращаемся к сценарий500, не затрагивая (именно НЕ ЗАТРАГИВАЯ) остальных сценариев если они до этого не были подгружены.

сам пробовал думать, искать... нифигачит
Ответить с цитированием
  #2 (permalink)  
Старый 18.07.2013, 19:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Так массив или скрипт? Я не понял нифига. И можете пояснить зачем вам передавать клиенту такие большие объемы данных?
Ответить с цитированием
  #3 (permalink)  
Старый 18.07.2013, 19:49
Новичок на форуме
Отправить личное сообщение для ValMal Посмотреть профиль Найти все сообщения от ValMal
 
Регистрация: 18.07.2013
Сообщений: 5

В том и цель - чтоб не передавать клиенту лишние данные, а давать только 100 элементов (допустим). Нажал на вторую кнопку - следующие 100 элементов... и т.д. МАССИВ размещен во внешних JS файлах, раздроблен по 100 элементов.

Библиотека..... каталог книг разбит по алфавиту. Нажимаем "А" - подгружаются только данные из файла A.JS. Нажимаем "B" - подгружаются данные из B.JS (кроме массива в файлах находятся в т.ч. уникальные скрипты, но это к вопросу отношения не имеет, после выборочной подгрузки файлов JS решится "автоматом")
Ответить с цитированием
  #4 (permalink)  
Старый 18.07.2013, 21:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну JS для этого не очень подходит. Я бы упаковывал массив в JSON и обязательно устанавливал заголовки для кэширования. И обязательно жать gzip'ом. Так можно добиться быстрой загрузки. Подгружать естесственно XMLHttpRequest'ом.
Ответить с цитированием
  #5 (permalink)  
Старый 18.07.2013, 22:05
Новичок на форуме
Отправить личное сообщение для ValMal Посмотреть профиль Найти все сообщения от ValMal
 
Регистрация: 18.07.2013
Сообщений: 5

"20 мб в текстовом формате" - без PHP эти данные надо считать... JSON хорош для кодирования на основе уже полученных данных. При использовании PHP клиент получает "выборку", а не весь объем, поэтому было бы сладко, НО повторю вопрос - СРЕДСТВАМИ JS, а следовательно задача ПОЛУЧЕНИЯ данных через JSON решена не будет.
Ответить с цитированием
  #6 (permalink)  
Старый 18.07.2013, 22:24
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А причем тут PHP? Ок, файлы формируются единожды статически. Ну прекрасно, в чем сложность?
Ответить с цитированием
  #7 (permalink)  
Старый 18.07.2013, 22:32
Новичок на форуме
Отправить личное сообщение для ValMal Посмотреть профиль Найти все сообщения от ValMal
 
Регистрация: 18.07.2013
Сообщений: 5

Сообщение от danik.js Посмотреть сообщение
А причем тут PHP? Ок, файлы формируются единожды статически. Ну прекрасно, в чем сложность?
Файлы формируются статически. Сложность в том, что не надо передавать весь объем, надо передать только часть данных. PHP при том, что с его помощью можно сформировать укороченный массив - через запрос к серверу. JSON упакует этот усеченный массив раза в 1,5... НО какой смысл упаковывать через JSON ВЕСЬ массив для последующей обработки JS??? Или я в танке, или одно из двух - НЕ нужна оптимизация передачи всего массива, нужна поэтапная загрузка, когда сам пользователь выбирает для себя с какой областью ему работать - без загрузки всего массива.

Решение "через жобор" сочинил, отрабатываю (если получится) - с использованием iframe, но чет смущабельное оно... Хотелось бы чего-нить более удобоваримого
Ответить с цитированием
  #8 (permalink)  
Старый 18.07.2013, 22:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ну так что мешает разбить массив на файлы a.json, b.json и т.д? А гзип как раз лучше настроить средствами вебсервера.
Ответить с цитированием
  #9 (permalink)  
Старый 18.07.2013, 23:04
Новичок на форуме
Отправить личное сообщение для ValMal Посмотреть профиль Найти все сообщения от ValMal
 
Регистрация: 18.07.2013
Сообщений: 5

массив записан
a[1]="546";b[1]="5675";c[1]="fhtf"

что даст его запись через JSON???
{"a[1]":"546","b[1]:5675","c[1]":"fhtf"}

очевидно, что вторая строка (JSON) длинее, чем то-же самое, записанное через JS. Можно избавиться от [] для укорачивания строк, но это-же можно сделать и в JS файлах, так что существенной разницы нет. Более того, если получится передать часть данных, можно БЕЗ переменных отдавать только структурированную последовательность "нао", "пног", "ер", подразумевая обработку строки на стороне клиента (для массива из 100 строк такая обработка будет занимать хз насколько мелкие доли секунды).

ОК, если так импонирует JSON (на мой взгляд, лишний для данного случая) - как без ифрейма забрать данные из определенного файла, не трогая остальные... а потом, изменив состояние <select> - забрать данные из другого файла (не суть, JS или JSON)?

Через файлы с .JS - не прокатывает, хотя и хотелось бы(((
Ответить с цитированием
  #10 (permalink)  
Старый 18.07.2013, 23:37
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Ок, кавычки. На каждый ключ две ковычки. Сто ключей - двести кавычек - 200 байт. Включаем gzip - и двести байт ловко ужимаются в байт пять-шесть, не знаю. Ужас, правда?
Можно конечно и по топорному сделать, если есть желание. Не столь важно.
А подгрузка делается элементарно.
// фикс для IE8
XMLHttpRequest.prototype.DONE = 4;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
    if (this.readyState == this.DONE) {
      if (this.status !== 200) {
          alert('Ошибка , статус:' + this.status);
          return;
      }
      var data = JSON.parse(this.responseText);
      alert(JSON.stringify(data));
    }
}

xhr.open('GET', '/catalog/a.json');
xhr.send(null);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Валидация пользователя по IP-адресу lazerru Общие вопросы Javascript 1 03.04.2013 12:40
внешний файл badfoks Общие вопросы Javascript 13 14.10.2012 15:05
Простой сценарий определения текущего времени у меня в браузере почему-то не работает WitaliG Общие вопросы Javascript 2 02.08.2010 22:05