If you don't defer a script, then the Engine.getUptime() is sample accurate down to +-8 samples because in its default setting which can be changed by the macro HISE_EVENT_RASTER, HISE rounds every sample position for events (notes and timers) to 8 samples to apply SSE optimizations and downsample the modulation control rate. This introduces a "jitter" of 90 nanoseconds at 44kHz, so it should be neglible.
If you defer a script, the Engine.getUptime() function will return the exact value that the audio thread is currently using, which can be any value in the future because you don't know exactly when the deferred callback is executed, and in the case of offline rendering this can have drastic effects.
So bottom line, whenever you need "musical" timing, don't defer the script. This function is rather for stuff like "update a button on the GUI if you press a note" type of applications.