![][1]Если вы не знаете, что такое LINQ, и зачем он сдался на PHP, смотрите [предыдущую статью по YaLinqo][2]. С остальными продолжаем. Сразу предупреждаю: если вы считаете, что итераторы — это ненужная штука, которую зачем-то притащили в PHP, что производительность из-за всех этих новомодных штучек с анонимными функциями зверски проседает, что нужно вымерять каждую микросекунду, что ничего лучше старого-доброго for не придумано — то проходите мимо. Библиотека и статья не для вас. С остальными продолжаем. LINQ — это замечательно, но насколько проседает производительность от его использования? Если сравнивать с голыми циклами, то скорость меньше раз в 3-5. Если сравнивать с функциями для массивов, которым передаются анонимные функции, то раза в 2-4. Так как предполагается, что с помощью библиотеки обрабатываются небольшие массивы данных, а сложная обработка данных находится за пределами скрипта (в базе данных, в стороннем веб-сервисе), то на деле в масштабах всего скрипта потери небольшие. Главное — читаемость. Так как со времени создания моей библиотеки [YaLinqo][3] на свет появилось ещё два конкурента, которые действительно являются LINQ (то есть поддерживают ленивые вычисления и прочие базовые возможности), то возникают позывы библиотеки сравнить. Самое простое и логичное — сравнить функциональность и производительность. По крайней мере это не будет избиением младенцев, как в [прошлом сравнении][4]. (А также появление конкурентов наконец-то мотивировало меня выложить [документацию YaLinqo онлайн][5].) _Дисклеймер:_ это тесты «на коленке». Они не дают оценить все потери в производительности. В частности, я совершенно не рассматриваю потребление памяти. Отчасти потому что я не знаю, как это нормально сделать. Если что, [pull requests are welcome][6], что называется. [Даёшь скорости!][7]
[1]:
http://habrastorage.org/getpro/habr/post_images/a88/804/a0d/a88804a0d87bfaf21b6817ade48e772b.png
[2]:
http://habrahabr.ru/post/229763/
[3]:
https://github.com/Athari/YaLinqo
[4]:
http://habrahabr.ru/post/147612/
[5]:
http://athari.github.io/YaLinqo
[6]:
https://github.com/Athari/YaLinqoPerf
[7]:
http://habrahabr.ru/post/259155/#habracut