Why is my FTP upload so slow with lots of files?
FTP opens a fresh data connection for every file. FTP by Zaweba sends several files at once on separate connections, which cuts the waiting.

An FTP upload of many small files is slow mainly because of the work around each file rather than the data in it. Every file needs its own data connection to be opened, used and closed, and those round trips add up to far more time than the bytes themselves. FTP by Zaweba tackles it by sending several files side by side, each on its own connection, so those waits overlap instead of queuing.
Understanding why this happens makes it much easier to decide what to change.
Where the time goes
Picture a site with 3,000 files averaging 10 KB. That's only about 30 MB, which a home connection could send in seconds as one file. Sent one at a time over FTP, it can take many minutes.
The reason is how FTP is built. Commands travel over one control connection, but each file travels over a separate data connection. For each file the client asks for a data connection, waits for the server to answer, opens it, sends the file, closes it and waits for the server to confirm. Each of those steps costs a round trip to the server. If a round trip is a tenth of a second, a few of them per file soon outweigh the actual sending.
Secure connections add a little more, because each new connection has its own handshake. And busy shared hosts can be slow to answer at all, which stretches every step.
Why big files don't suffer the same way
A single 300 MB video pays that start-up cost once and then spends nearly all its time sending data, so it moves at close to your full upload speed. That's why the same site can feel quick with one large file and painfully slow with a folder of icons. It isn't the amount of data; it's the number of files.
What actually helps
Sending several files at once is the main fix. FTP by Zaweba runs uploads and downloads side by side, each on its own connection, with the number set in File > Options > Transfers from 1 to 10 (3 by default). With five connections, five files are going through their start-up waits at the same moment.
Your host sets the ceiling. Many shared plans limit connections per account and refuse extra ones with a 421 error. When that happens, the app carries on with the connections it has, says so in the log, and uses that number from then on, so a high setting won't break anything.
Sending fewer files helps just as much. Put Newer to Server uploads only files that are newer than the server's or missing there, and Put Recent to Server lists only files you changed lately without scanning the server first. Each site's Exclude box keeps whole folders out of every transfer: development folders like node_modules, *.log files and caches are often thousands of small files the live site never needs.
Things that won't help much
A faster broadband package does little for this particular problem if the delay is in round trips rather than bandwidth. Nor does compressing files on your PC, unless you're prepared to unpack them on the server, which plain FTP can't do for you.
SFTP isn't automatically slower or faster here. It runs over a single connection rather than FTP's separate data connections, but the number of files still matters. The same parallel transfers apply whichever protocol the site uses.
The short version
Lots of small files make FTP slow because each one carries a fixed cost. In FTP by Zaweba, raise the number of files at once, send only what has changed, and exclude what doesn't belong on the server. Those three together usually turn a long wait into a short one.