已优化，仍有些BUG