The default node renderer will fully re-render a node whenever its attributes change (because it’s rendered with a simple toDOM function that might do anything with those attributes). But if you register a node view for the node whose attributes are expected to change, you can register custom update logic with the update method, which updates the existing node in-place. (Do read the docs closely on when to return false from update, it has a bit of an error-prone interface.)
A simple node view shouldn’t be slower to create than a standard node. It’s only when you start including non-trivial amounts of extra DOM structure in your node views that you have to worry about performance.