I did a lot of research into the Audio API awhile back. The main problem I found with the Audio API is the fact that any time an Audio element is declared, it will download the Audio file, regardless if that file had been downloaded before. This means that if you use
new Audio('file.mp3').play(), this will cause an HTTP request to the audio file every time. Even if you use
audio.cloneNode().play, it will download the file every time. Since the sound you want is a sound effect, it will probably play many times throughout the game. The longer the game runs, the more HTTP requests you will make to the server.
Since you want to have overlapping sound effects, you must have multiple Audio elements. A solution I came up with was to create the minimal amount of Audio elements you need (the maximum number of sounds that can overlap at any given time), and then just reuse the elements when you can. This will save on HTTP requests in the long run and be the most conservative for performance. I still don't know if this is the best solution, but I haven't run into any other solutions that take into account the HTTP request problem.