Hacker News new | ask | show | jobs
by hejsna 4664 days ago
Nice article and I agree with most of it - it's very hard to find a framework that strikes a good balance between lean and full-featured. But I don't think the answer is writing everything yourself, either. Rolling your own framework is a lot of work and you're not even guaranteed to wind up with something better than what's out there. Some people believe jQuery is bloated and create their own framework with a mix-and-match from microjs.com. Great! But it's super painful to work with, because at some point you realize "oh, i need to deep-copy this object" or "this should slide down - oh wait" and suddenly you're re-inventing wheels all over the place. With your own subtle browser bugs, Unicode issues, and keyboard problems. Ugh. Especially when you're going to replace things like socket.io, mentioned in the article.

But I'm on board with the general concept here and I'm not sold on Ember or Angular - they don't seem to speed up development or prevent bugs as much as they should, per kb downloaded to the client. Sometimes all you need is plain-old jQuery code, with a well thought out and structured API.

1 comments

Thanks. One thing to note that I didn't write my own framework. I just found my own way of structuring things. Apart from a custom event library there is virtually no framework code.
Okay. I admit that we needed to bang our heads with the custom communication library which we use in place of socket.io. But our solution is more than 10 times smaller!! There is a crazy amount of clutter in socket.io, believe me. And it didn't scale for us. And most importantly we didn't want to use the proprietary syntax that goes inside a websocket channel since something as clean as JSON-RPC exists.
Did you look at SockJS? It is far more mature than Socket.IO imo. Follows the websocket spec, does not resort to flash for fallback, supports more fallback methods, and later when websockets are fully supported native you just replace "SockJS" with "Websocket" in your code and drop the library.