基本完成，但是速度太慢还可以优化