FYI, we have just updated the pool software to reduce the number of empty blocks. The effectiveness is yet to be evaluated, but I think it should help a lot.
Since this announcement, there have been 6 empty blocks added to the chain. None of which came from f2pool.
BW.com - 2 of their 11 blocks were empty
AntPool - 4 of their 21 blocks were empty
f2pool - 0 of their 14 blocks were empty
So, at least on the surface in the past 16 and a half hours or so, whatever f2pool did appears to have greatly reduced their empty blocks. It still doesn't excuse the SPV mining... but at least in this short timeframe it appears to be a step in the right direction.
We have two empty blocks in the past few hours. Investigation has revealed that:
For block 388239, which was found at 23:23:45Z, was due to the previous block by AntPool failed to send out their block in time. Our nodes did not receive the complete block data of 388238 until 17 seconds later, or 23:24:02Z;
For block 388252, which was found at 00:33:02Z, was due to our extreme luck. We found this block only 1 second after the previous block by bitclubpool.
http://poolbench.antminer.link/ has more timing data. You can see there are only four records for AntPool’s block 388238 (poor block propagation). And the time difference between 388251 and 388252 is very small.