Строка против скорости обработки массива в javascript и php, и можно ли передать массив в php без каких-либо манипуляций? - PullRequest
2 голосов
/ 09 сентября 2011

несколько вопросов о строках и массивах для обработки текста.

Можно ли передать массив js [] в php как массив, не преобразовывая его в строку или не используя JSON?Просто передайте его как обычный массив без манипуляций.

В php и JS (или любом другом языке), в общем, какой формат быстрее для обработки или поиска текста (для очень больших массивов или текстовых строк).Пример:

string = abc,def,dfa,afds,xyz,afds,xxx

array = {"abc","xyz","xxx"}

Что быстрее использовать для поиска, чтобы определить наличие / совпадение xyz?

Что быстрее использовать для определения позиции индекса xyz?

Который имеет меньший объем памяти / использование?

TIA.

Редактировать: ответ на пункт 1, я думаю, нет, но для пункта 2, пожалуйста, поймите, что я спрашиваю, потому что яЯ имею дело с программой, которая делает одновременные вызовы AJAX, которые требуют обработки очень больших массивов или текстовых строк.Удобство интерфейса зависит от скорости возвращаемых вызовов ajax.Мне пришлось отказаться от исходного кода из-за этой проблемы.

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Что касается вопроса 1, можете ли вы передать собственный массив Javascript в PHP, ответ - нет.
Мало того, что Javascript-массивы и PHP-массивы несовместимы (это структуры данных двух разных языков), единственное сообщениемежду (на стороне клиента) Javascript и PHP через HTTP, который знает только строки.Не числа, не логические значения, не объекты, не массивы, а только строки.

Что касается вопроса 2, скорость зависит от многих факторов, включая алгоритм поиска и длину строки / массива.Если ваша структура данных является массивом, используйте его как массив, а не как строку.Читаемость и ремонтопригодность в первую очередь, оптимизация скорости только при необходимости.И вам придется еще немного расширить границы, прежде чем вы столкнетесь с проблемами производительности, ваши короткие примеры достаточно быстры в любом случае.


Вот созданный мной тестовый пример, который может ответить на ваш вопрос: http://jsperf.com/string-search-speed
Это действительно зависит от вашей цели.Поиск в строке означает, что вам нужно исключить возможность совпадения подстроки, для которой вам в значительной степени нужен RegEx.Если это не беспокоит.С другой стороны, встраивание всего в объект происходит на несколько порядков быстрее, но не позволит вам хранить одну и ту же строку дважды.Будь то беспокойство или нет, я не знаю.Обязательно запускайте эти тесты в самых разных браузерах, поскольку скорость отдельных тестов в разных движках Javascript сильно различается.

И чем больше я играю с этим, тем яснее становится отсутствие ответа.Все тесты почти одинаково хорошо зарекомендовали себя в Chrome (безопасно для поиска объектов, который играет в другой лиге).Opera, похоже, имеет чрезвычайно оптимизированную реализацию str.search, которая находится на одном уровне с поиском объектов.В Safari все тесты Regex ужасно медленные, но поиск объектов - самый быстрый в любом браузере.str.indexOf в Firefox - это круто, ручное зацикливание массива не так уж и много.

Итак, опять нет абсолютного ответа (если вы не используете объекты, которые всегда быстрее). Делай то, что имеет смысл!

0 голосов
/ 09 сентября 2011

почему вы говорите "без использования JSON"?JSON это именно то, что вы ищете.вы превращаете массив в строку JSON, передаете его в PHP, а затем PHP анализирует JSON обратно в объект массива.

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

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