Sorry I should add this precision: Broadcasting a transaction to a node that has already received this transaction.
In other word, inefficiencies.
I'm not sure what you are talking about. Do you mean that if a node sees a new transaction or block, it immediately relays it to other peers?
As far as I'm aware that's not quite true. The only thing a node does when receiving new tx/block is send an
inv message containing its hash. After that, a peer can request a tx/block using a
getdata message if it doesn't already have it.
A node receives tx only when it asks for it.