我已经问了一个类似的问题,但这个问题有点不同/具体:Node.js + Socket.io:模板@服务器或浏览器?通过ajax或socket.io加载内容?
我即将开始开发社交网站(对于本地用户组),具有时间线,即时通讯/聊天,论坛,...
Node.js和socket.io(或now.js)在后端。 jQuery(也许还有backbone.js或类似的)在前端。内容通过socket.io或ajax加载,并通过url哈希导航。
有两件事我不能决定走哪条路。我希望这里有些人可以提供一些好的或不好的经验。
模板在服务器或浏览器?我不知道是否最好加载一个完整的HTML网站+时间线,论坛帖子,即时通讯/聊天的实时更新(也在HTML),或通过ajax或socket.io使用类似REST api的东西,并做客户端网站上的模板。我从来没有这样做过。你需要下载模板等,有没有人在这方面的经验?还有两种实现类似休息的API的方法:例如,请求论坛帖子,然后请求与该帖子关联的用户等等(就像服务器端MVC一样) - 或者 - 请求论坛帖子,服务器回答所有需要的信息。
通过ajax或socket.io加载内容?我明确地使用socket.io或now.js进行实时通信(IM,聊天)和pubsub(在主页上 - >订阅新的时间线更新,论坛主题 - >订阅新帖子)。但是,我是否也应该通过套接字加载HTML(或提供类似REST的API,请参阅问题1)?当人们在选项卡中打开论坛帖子时(我通常会做很多),这意味着很多套接字连接。我不确定WebSocket建立连接需要多长时间。
所以有一个4层的方法来做到这一点:通过AJAX
- HTML - 大概是不需要大量的JavaScript做模板的最稳定的方法 - 浏览器可以使用开放的HTTP连接要求东西。
- HTML通过socket.io - 必须建立websocket来加载内容(可能会更慢)
- API通过AJAX - 因为它可能需要更多的请求作为HTML通过AJAX可能会有一些HTTP头开销+你需要每个请求中的身份验证 - 我不是许多Ajax请求的朋友。
- API通过socket.io - 套接字只能被验证一次,您可以动态地请求API对象。不过,我仍然会通过HTTP为浏览器缓存加载模板和js。
我知道这是一个很大的帖子,但我现在正在辩论很多天,只是不能决定,因为一旦开始开发,切换系统将会有很多工作。这不是一个公共项目,它仅限于约10k-15k的本地人,因此绝对不能是完美的,这是一个很好的机会,以我的观点学习新事物(我完全陌生于节点,经典的PHP MVC + jquery dev在这里)。
没有静态HTML(完全基于用户的内容),除了加载所有的JavaScript进入/索引页。示例论坛:加载HTML(线程列表,帖子)并显示它们,或者通过API(线程列表作为线程对象数组,线程作为post对象数组)加载json并将它们呈现在前端。如果我选择使用API方式,我认为最好通过套接字访问API,没有标头,没有cookie。 – Eliasdx
那么如果这个内容经常发生变化,并且希望保持用户更新,我可以通过两种方式实现这一点:1)使用api从数据库中获取最后的X帖子等等2)使用Socket保持第二次更新。 IO – alessioalex