Conventional interrupt handlers are no better than a polled loop in minimizing latency. Worse, interrupts are slow. When handling very fast data the interrupt structure just might not be able to keep up. After all, a vectored interrupt requires an acknowledge cycle to get the interrupt source, several PUSHes to stack a return address and other context information, and an indirect read from memory. All of this takes time - sometimes quite a few microseconds.
Some processors support several types of interrupts.
While the Z80 is usually used in its most useful vectored configuration, it does have an oddball mode left over from its 8008 heritage. On an interrupt, external hardware can jam an instruction into the execution stream. This mode bypasses all conventional interrupt processing. The following code takes advantage of a jammed NOP instruction. Latency is just the processor's raw interrupt latency, which is usually only one or two machine cycles.