Бэк так же можно собирать сборщиками, у того же webpack есть
пресет настроек под ноду.
Насчет оптимизации, тот же terser.js, который включается при production билде по умолчанию, помимо сжатия делает ряд оптимизаций кода. Но для ноды работающей длительное время они могут оказаться менее значимыми, так как JIT v8 так же делает свои оптимизации, и многократно запускаемые функции наверняка будут им оптимизированы. Однако при возможности прогнать код через дополнительную оптимизацию, лучше это сделать.
Насчет ejs, шаблоны нужно компилировать в js. В случае ноды это можно делать как при сборке, так и на старте приложения. Главное чтоб не происходило компиляции во время обработки запроса.
Оптимизация картинок и css должна происходить при сборке клиентского кода, к ноде они вообще никакого отношения не имеют. Нода вообще не должна о них знать, максимум пути после сборки, чтобы вставить их в шаблон, хотя и это по хорошему решается сборкой. Отдаваться статика должна Nginx или аналогами.