Подтвердить что ты не робот

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 и обратно почти мгновенно (несколько миллисекунд).

4b9b3361

Ответ 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);