Можно запускать, просто файл с сессией лочится при первом доступе. Можно либо использовать session_write_close();, но тогда могу возникать проблемы с целостностью данных, либо использовать другой хэндлер для сэссий, например, базу.
У Вас массив увеличивается с каждой итерацией цикла.
Под словом стриминг я имел в виду потоковую обработку данных. Т.е. используете выбранные из БД данные сразу же, и на следующем шаге цикла заменяете их.
Код .closest('div') тоже не особо устойчив к изменению в вёрстке.
В любом случае лучше дать id / class общему контейнеру и ссылкам, тогда можно будет написать устойчивый к изменению в вёрстке код.
Берешь и делаешь. Не получилось — читаешь, думаешь и дальше делаешь.