Click here to see demo and get code (scroll to bottom of that page for downloads) or download code from github
Stephan Talking is under 5k compressed.
Works on FF, WebKit - sorry no IE, not even IE10. If IE ever implements Web Audio API - we will release Web Audio API version of this.
Note, this doesn't really do Text-To-Speech - since Text usually means a language like English. Translating written languages into phonetics is a lot of effort. Stephan Talking doesn't bother, what it needs is pure phonetic input which you must provide - we call it stephantalk - luckily its pretty easy. Leave IPA for the scientists (or drinking).
Stephan Talking doesn't make much of an attempt to sound human - it's goal is to produce (kinda) intelligible speech, do it quickly and from a small code footprint.
Besides, don't you know overly anthropomorphic machines are creepy: http://en.wikipedia.org/wiki/Uncanny_valley, whereas robots that are proud to be robots are cool: http://www.youtube.com/watch?v=IEp6ca9Ppks.
Some other options:
speak.js - pure js, but huge lib
jTalk - makes calls to a server that does the heavy lifting (and BTW you need to run that server and app)
chrome.tts - makes calls to a server, but google runs those (is that good or bad?)
It should be noted that sound in general should be used cautiously. When I browse a site, I, like most other users believe that sound is under my control, not the app's. Surprising me with sound might make me a disgruntled user.
And for developers with too much free time - extending and improving the code is encouraged. Phonemes are simple and easily accessible. Translators can easily be added. Shoot, dig deep, tweak the wave generation algorithm if you want.