Чем кодировка символов Юникода UTF-16 лучше UTF-8, если последняя позволяет кодировать символы в 3 байта, а первая в 4?
Выходит, что UTF-8 более ресурсоемкая
Ничем не лучше. UTF-16 - атавизм тех времён, когда в Unicode существовала только нулевая плоскость (коды символов 0x0000-0xFFFF) и для записи кодов всех символов хватало двух байт. Тогда UTF-16 казалась удачным выбором и потому эта кодировка оказалась встроена и в Windows, и в Java, и в JavaScript... Вот создатели PHP вовремя одумались и работа над PHP 6 со встроенной UTF-16 была прекращена.
Но с появлением символов с кодами от 0x10000 и больше, стало понятно, что UTF-16 - крайне неудачная кодировка, не имеющая никаких преимуществ ни по скорости, ни по объёму данных. Но отказаться от UTF-16 сейчас уже очень сложно - слишком много кода за эти годы написано.
В UTF-16 символы с кодами 0x0000-0xFFFF всегда занимают 2 байта, а символы с кодами от 0x10000 и больше - 4 байта.
В UTF-8 символы с кодами 0x00-0x7F занимают 1 байт, 0x080-0x7FF - 2 байта, 0x0800-0xFFFF - 3 байта, от 0x10000 и больше - 4 байта. Так что нет, по занимаемому объёму UFT-8 в среднем не хуже, чем UTF-16. Но при этом обработка символов в UTF-8 проще, чем в UTF-16.