Я не думаю, что производительность - это главный вопрос здесь, это больше о ваших намерениях. Второй лучше, потому что вы вызываете меньше функций.
Если вы планируете использовать сопоставленный наблюдаемый поток в других частях вашего приложения, вам следует использовать первый, например:
const sourceKeys$ = source$.pipe(
map(s => s.someKey)
);
sourceKeys.subscribe(someValue => {
workWithData(someValue)
})
Если вам не понадобится sourceKeys$
в качестве наблюдаемого вы можете выполнять все побочные эффекты и операции с данными в блоке subscribe
.