how are you measuring that - by watching the messages pass by in the debug output?
While I suspect nodejs is not true real-time, i'd bet what you are seeing is the debug window stuttering.
To test this theory, I did some quite rudamentory test code & this is the results...
{
"firstMsgTime":1572268888410,
"lastMsgTime":1572268913832,
"min":199,
"max":204,
"count":128,
"average":200.0703248977659,
"msSinceLast":200
}
As you can see, the quickest delay was 199ms and the longest delay was 204ms. The msgs were emitted on average every 200.07ms
The updated flow is below - try it yourself (the results can be found in the context data
tab on the side-bar.
NOTE Interestingly, I did see some occasional high delays (+500ms) between 2 messages when watching the debug. However, with the debug node turned off the results shown in the context data tab were very consistent.
Updated flow with min/max/average/count etc
[{"id":"2ff489d3.ea8f96","type":"inject","z":"6d7db396.221eac","name":"","topic":"","payload":"This is a test string consisiting on blah blah blah","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":110,"y":100,"wires":[["21941de9.e7d532"]]},{"id":"3509253f.42adfa","type":"split","z":"6d7db396.221eac","name":"","splt":"1","spltType":"len","arraySplt":1,"arraySpltType":"len","stream":false,"addname":"","x":378,"y":100,"wires":[["989ebb05.2d9678"]]},{"id":"989ebb05.2d9678","type":"delay","z":"6d7db396.221eac","name":"rate limit 0.2s","pauseType":"rate","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"0.2","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":530,"y":100,"wires":[["1f692b66.de5e35"]]},{"id":"1f692b66.de5e35","type":"function","z":"6d7db396.221eac","name":"","func":"var p = msg.payload;\nvar l = flow.get(\"line\");\nvar newLine = l + p\nflow.set(\"line\",newLine);\nmsg.payload = newLine;\n\nvar now = Date.now();\nmsg.timestamp = now;\n\nvar record = flow.get(\"record\");\nrecord.count += 1;\nif(!record.firstMsgTime){\n record.firstMsgTime = now;\n msg.msSinceLast = now - record.lastMsgTime;\n record.average = msg.msSinceLast\n} else {\n msg.msSinceLast = msg.timestamp - record.lastMsgTime;\n if(record.min > msg.msSinceLast) \n record.min = msg.msSinceLast; \n if(record.max < msg.msSinceLast) \n record.max = msg.msSinceLast; \n record.msSinceLast = msg.msSinceLast;\n record.average = ((record.average + msg.msSinceLast) / 2.0)\n}\nmsg.msAverage = record.average;\nmsg.min = record.min;\nmsg.max = record.max;\nmsg.count = record.count;\nrecord.lastMsgTime = now;\nflow.set(\"record\",record);\n\nreturn msg;","outputs":1,"noerr":0,"x":550,"y":140,"wires":[["ca79e89b.51fc18"]]},{"id":"ca79e89b.51fc18","type":"debug","z":"6d7db396.221eac","name":"","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":570,"y":180,"wires":[]},{"id":"21941de9.e7d532","type":"function","z":"6d7db396.221eac","name":"","func":"\nflow.set(\"line\",\" \");\nflow.set(\"record\",{firstMsgTime: null, lastMsgTime: Date.now(), min: 9999999, max: -1, count: 0, average: 0})\nreturn msg;","outputs":1,"noerr":0,"x":250,"y":100,"wires":[["3509253f.42adfa"]]}]