I don’t understand how the whole script works, neither which is the pourpose, but if you say that the big speed bottleneck is getting the normals, I suppose you are talking about the CollectNormals() function.
Perhaps you can get the render normal instead? This would be about 15 times faster and there is no need for the Edit Normals modifier. But as I said, I am not sure if this is what you need.
fn CollectNormals tmesh faces =
(
normals = #()
getfacernormals = meshop.getfacernormals
for j in faces do join normals (getfacernormals tmesh j)
return normals
)
If I could understand the whole thing perhaps I could help a bit more.