https://gist.github.com/snower/8ad4c30b56e2ae4eede0b37b20fb1bd3
详细也可看 https://segmentfault.com/a/1190000041190907