Сейчас заработало намного шустрее чем раньше. Сказывается session_write_close() и добавление памяти на сервер. Поскольку повышение нагрузки на сервер не планируется, то такое решение устроит. Спасибо за совет и отдельное спасибо за ab. Не знал про неё.
1. ab не получится прогнать, т.к. сервер, куда делаются перезапросы требует аутентификации kerberos (забыл предупредить, что у меня включено делегирование).
4. Про блокировки сессий почитал. Отключил session_write_close(). Стало видно, что некоторые запросы стали ставиться в параллель, но в количестве 2-4 шт. Я сейчас тестирую всего лишь под 16 пользователями по 9 запроов с каждого. Но всё равно за 5 минут не успевают пройти все запросы.
Ещё момент - вспомогательный сервер работает под ssl - вполне себе приличная нагрузка на проц. Да и мой тоже под ssl работает. Попробую покопать в этом направлении тоже. Смотрел нагрузку - все ядра забиваются под 100%. Буду копать тут.
helycopternicht: Дам вам небольшую вводную. Надеюсь, что вы знакомы с JSON? По сути абстракций они очень похожи, только есть нюансы, которые их различают - в json нельзя задать атрибуты как в XML, в JSON нет встроенного метода, чтобы определить родителя у потомка, а в XML есть.
Очень важно понимать зачем нужно XSLT. С помощью XSLT можно сделать преобразование XML->другой формат (не любой, иногда только с потерей данных)->(CSV, XML, text и др).
Реализация XSLT бывает ущербной. XSLT это своеобразный JavaScript для XML. Например, в браузерах XSLT очень слабый, даже replace текста выглядит настолько чудовищно, что не верится, но если делать XSLT преобразования в Java, то там XSLT можно расширить своими функциями, которых изначально нет в XSLT. Т.е. вы можете зарегистрировать в XSLT функцию Java и вызывать её, например, для того же replace текста.
Так что вы удачно стали интересоваться XML в контексте Java. В этом случае возможностей больше.
Никита Полевой: Я сейчас перерыл профайлер и не нашёл того, что обещал, но КЛЯНУСЬ я это видел! ))) Но год назад. Может они уже исправили эту ситуацию? потому что у меня из-за этого были дикие утечки памяти! Я потом стал применять не суммирование строк, а контакенацию строк в массиве. ["str1", "str2","str3", ..., "strN"].concat()
Если найду инфу - обязательно отпишусь!
Nurshat: Да. Вам нужно почитать, как разбирается xml. В XML нет просто текста. Есть набор "текстовых" потомков, даже если они не обрамлены тегами, но перемешаны с обычными тегами. Т.е. в вашем случае в массиве children будут div, text, div, text, img, text. HTML частный случай XML, поэтому надо пользоваться методами разбора XML. plaintext - это просто "выдирание" только текста из всех потомков, фактически просто удаление всего, что находится в угловых скобках. Остальное вам и предъявляется как plaintext.
Александр: Сорри, наверно невнимательно прочитал. Я тоже сначал подумал, что речь о макросах типа С++, но потом увидел лисп и меня переклинило на автокадовский лисп, потом мысли улетели на оффис и... вот результат. Плохой ассоциативный ряд. Но про макросы из вопросов я тоже в курсе. ))) Просто ещё один способ влияния на исходный код программы. Что-то вроде программирования языка программирования.
mak_ufo: >> все объекты xhr одинаковые
Не xhr одинаковые, а это один объект. Его свойство status меняется во время загрузки данных и генерирует событие onreadystatechange (В комменте Почему ответ от сервера приходит 3 раза? об этом и было написано) . А onload срабатывает всего один раз.
mak_ufo: Стоп. Пропустил ваш ответ "при событии xhr.onload = () => {} на клиенте всё выводится один раз, кстати". А где выдаётся три раза? Или вы уже решили проблему?
mak_ufo: Эээ. fiddler, конечно, не работает. А проксирование - работает. Если под рукой есть машина с windows - поставьте на ней fiddler и откройте на ней удалённый доступ:
После этого пропишите в вашем браузере в linux прокси на windows-комп и порт 8888 (внешний порт для доступа к fiddler). Профит. Проверьте количество запросов ещё раз.