First of all we need to understand how work factorio fluid engine ("work" is a euphemism but let's do this):
Each entity have a fluidbox, and "ports" some connections. Each connection could be 3 type "input", "output" or both, we need this to understand that consumer like chemical plant and assembler are in input connections, pump are in output, and pipes and storage tanks are in input/output mode, so what's imply this?
Each fluidbox (that have more fluid of one neighbor) will share liquids to the output or input/output connections, but with what equation?
OFF = total fluid inside fluidbox sender
IFF = total fluid inside fluidbox that receive the input
Throughput = |OFF-IFF|/2 <-- the difference from the two fluidboxes
This means that throughput of something is related to the actual max that the OFF can store inside, and release it.
For get the best throughput from an entity must be "full" or his connections must have a "full throughput" for give the "max throughput", so if u provide two pipes with one duct, the duct must have a throughput in input equal to the max throughput of two pipes, otherwise u got a bottle neck.
For prove this theory try to fill a storage tank with a pump, in one case with a full storage tank connected to the pump, in the second case with a pipe that is before the full storage tank, and u will see that if the pump have a bigger fluidbox behind give a bigger throughput.
Potentially, ducts have the throughput of 4 pipes because have a max fluidbox 4 time bigger and the pump of ducts is 4 time powerful.
About the problem of length, factorio fluid engine force player to build a short fluid network, because if u will think a moment about that equation u will understand that more is the fluidboxes more is the time needed to share fluids, less is the difference between entity, minor is the throughput, and if we suppose a situation where consumer request > throughput, no accumulations or stable fluid quantity inside -> low throughput.
Ducts help alot when normal pipes haven't a good flow in situation like, many consumer, many pipes, for avoid spaghetti of pipes.
PS: place pump in a section of the network will give a "better" flow because the fluid can't go back, so returning to the equation, the nodes beyond the pump have more fluid because will not share it with other before and bla bla...