Przekonaliście mnie, rzeczywiście ten zapis SmokaAnaloga wygląda prościej, czytelniej
Chociaż osobiście nie lubię pisać tego typu konstrukcji, gdzie wykonuje się coś niepotrzebnie mnóstwo razy (jak to przypisanie separatora w pętli), to jednak w typowych zastosowaniach nie ma to żadnego znaczenia i dla uproszczenia kodu jest OK. Działa dobrze i jest łatwe w czytaniu i to mnie przekonało.
Natomiast jeśli chodzi o czas wykonania czy zużycie pamięci:
1.
Jeśli echo ma wypluć niewielkie ilości niedługich łańcuchów, to czas wykonania czy pamięciożerność w ogóle się nie liczy

Dla tak małych liczb, są to rzeczy zupełnie bez znaczenia i pomijalne i nie ma nawet się co zastanawiać nad tym czy coś się wykona szybciej albo zajmie mniej RAMu, bo są to nieistotne różnice. Gdybanie o tym, co jest szybsze od czego nie jest profilowaniem i często ma się nijak do rzeczywistości. W ogóle rozmyślanie o tym i używanie jako argumentów, że jakieś rozwiązanie jest lepsze od innego, jest w takim przypadku (małych ilości przetwarzanych elementów) bez sensu.
Co to są "niewielkie ilości"? Zależy

Ale w praktyce, ile takich elementów wyświetlisz? 100? 500? Więcej się zwykle nie daje, bo to utrudnia przeglądanie strony - do tego jest paginacja albo filtrowanie. Nawet dla 500 kilkuset znakowych łańcuchów nie ma praktycznego znaczenia, który sposób zastosujesz. No chyba, że piszesz w PHP aplikację na najnowszy zegarek Bonda z wbudowanym mikroserwerem www z 1 MB RAMu dla PHPa, wówczas to co innego... ;P
A teraz zagadka: przy jakiej ilości elementów w tablicy będzie różnica wykonania rzędu 100 ms? Zależy od serwera

ale mogę strzelać, że będą to ilości 100000+ (o ile oczywiście nie sprawdzamy na zegarku Bonda z prockiem 400 MHz...

) Poza tym, takie rzeczy to się sprawdza w realnym środowisku wykonawczym podczas profilowania i optymalizuje tylko wtedy, gdy w ogóle ma jakiekolwiek istotne znaczenie.
2.
Jeśli echo nie jest buforowane, to im więcej operacji echo, tym dłużej to trwa i prosty test pokazuje, że dla dużych ilości echo, lepiej jest zgromadzić stringi w tablicy i wypluć jednym echo implode, bo trwa to sumarycznie krócej. Oczywiście, można też gromadzić w tymczasowym stringu i wypluć go na koniec w całości. A najszybciej (i zużywa najmniej RAMu) jest stosować echo przy włączonym buforowaniu.