POST тысячи vars против длинной строки JSON: что предпочтительнее?
Мне нужно вывести значения таблицы около 200x50 (rows, cols) из jQuery в PHP. Два варианта:
1) Отправьте его как массив с 10 000 vars (увеличивая php.ini max_input_vars).
2) Сериализовать массив в строку JSON, ПОСЛАТЬ его как строку и декодировать обратно в PHP на стороне сервера.
Что предпочтительнее? Любые потенциальные проблемы с опцией 1?
Спасибо
PS. Обновление. После тестирования обоих зелий на больших входных таблицах размером до 250x50 ячеек выглядит так: 1-й вариант намного быстрее: 1-2 сек против 17-20 секунд для строки JSON.
Узким местом является время передачи данных на сервер, поскольку транзакции от объекта к JSON и обратно почти мгновенно (несколько миллисекунд).
Ответы
Ответ 1
Я посылаю запросы PUT на наш сервер с бинарными данными в теле, вероятно, сопоставимыми с 10k текстовыми записями, и передача выполняется очень быстро. Я бы, наверное, задался вопросом, что там происходит, может ли что-то ввести вас в заблуждение в моменты передачи одного против другого. Например, post vars могут рассматривать "передачу" как разные фазы запроса. Или, может быть, если вы добавили много постороннего багажа в структуру json с именами строк или столбцов или что-то еще?
Если это оказалось правдой, и каждый метод имеет эквивалентную производительность - я лично пошлю со структурированным JSON в теле, потому что он кажется более чистым и более легким для просмотра/отладки по сравнению с путями имен кодированных почтовых переменных.
Кроме того - я понятия не имею, что делает ваше приложение, поэтому ваш подход может быть полностью уместным. Но я мог бы разобраться в том, можно ли отправлять данные по мере необходимости, а не отправлять всю таблицу сразу. (Меня раздражает, когда люди не отвечают на мой вопрос и пытаются дать мне альтернативный метод для того, чтобы делать что-то, поэтому возьмите этот последний бит с солью! Но кажется необычным, что человек коснулся записей 10k - требуя их все отправляют на сервер одновременно)
Ответ 2
Вы уже ответили на свой вопрос.
Существует разумный компромисс между производительностью и качеством кода, который должен использоваться при разработке программного обеспечения.
Итак, Json поддерживается с обеих сторон (Javascript и PHP), и обеспечивает лучший штрих в вашем коде.
Ответ 3
Я думаю, что есть много факторов. На какой среде вы работаете, сервер и клиент находятся на одном ПК?
Вы должны делать это каждый день или час?
Существуют ли другие проекты на одном сервере, чтобы они могли реагировать медленнее? Через один-два месяца у вас будет больше 10 тысяч варов?
Если вы публикуете данные, как в первом варианте, так как Javascript
быстрее, чем PHP
, вы можете несколько раз потерять некоторые данные.
Если вы можете сделать это асинхронно, найдите RabitMQ
это сервер обмена сообщениями, который работает с персоналом, когда сервер готов (он тоже быстро работает!)
http://www.rabbitmq.com/
Ответ 4
Сериализуйте его в строку JSON, но используйте json_encode() и json_decode(), поскольку она выполняется намного быстрее. Поместите переменные в объект, а затем сериализуйте его.
Кроме того, javascript должен делать больше работы, так как это будет делать клиенту, что не помещает сервер под такую большую нагрузку.
Ответ 5
Я бы предложил вариант варианта №1. Кодировщики и декодеры JSON, как известно, ошибочны и имеют межплатформенные проблемы, но публикация тысяч переменных может быть проблемой. Вместо этого вы можете передать все ваши переменные post в качестве одной переменной post-x-www-form-urlencoded, а затем декодировать их на PHP с помощью parse_str().
JavaScript:
data = "data="+escape("v[0][0]="+escape(v[0][0]));
PHP:
parse_str($_POST['data'],$data);