使用1.0版本压缩/socket.io/socket.io.js文件

6
今天socket.io发布了1.0版本。我刚刚更新,现在以下内容不再起作用:
io.enable('browser client minification');
io.enable('browser client etag');
io.enable('browser client gzip');

新的文档似乎还不完整,如何使用1.0版本进行代码压缩和启用gzip+etag?
4个回答

7
似乎在1.0版本中不可能实现 - 在socket.io文件夹中递归搜索诸如"gzip"、"etag"和"minif"之类的单词并没有提供任何相关结果。此外,在以前的版本中,socket.io.min.js文件靠近socket.io.js。现在已经不存在了。
也许以下解决方案并不完美,但如果您正在使用nginx(或其他Web服务器)作为节点前端,您可以手动压缩socket.io.js(例如使用Google Closure Compiler),然后将其与自己的服务器一起提供。您还可以在nginx上启用gzip和etag。

查看旧的0.9代码:https://github.com/Automattic/socket.io/blob/0.9.14/lib/static.js#L166 - Txangel

5

看这里:http://socket.io/blog/introducing-socket-io-1-0/

CDN交付

我们早期做出的最好决定之一是,实现Socket.IO服务器不仅可以让您访问实时协议,而且Socket.IO本身也会提供客户端服务。

通常,您只需要包含类似于以下代码片段:

<script src="/socket.io/socket.io.js"></script>

如果您想通过将客户端服务放置在您的用户附近来优化对其的访问,并提供最大级别的gzip压缩(感谢Google的zopfli和对缓存的适当支持),您现在可以使用我们的CDN。 它是永久免费的,并具有内置的SSL支持:

<script src="https://cdn.socket.io/socket.io-1.0.0.js"></script>

另外,如果您正在从0.9迁移:http://socket.io/docs/migrating-from-0-9/


如果您托管了一个本地的Socket IO服务,例如Etherpad,那么最近的Socket IO实例就是本地的。考虑到这一点,CDN不是一个好主意。 - John McLear

2

关于压缩:

查看版本0.9的旧代码,似乎会生成gzip进程进行压缩。我找不到任何缓存

我们没有因此在生产中注意到任何显着的减速,所以也许它在某个时候做了一些聪明的事情,但我并不惊讶他们删除了所有这些代码。

缩小文件大小之前是使用uglify的:

https://cdn.socket.io/socket.io-1.0.0.js的示例为78.5 kB,缩小版本为57.1 kB。增加了37%,但与通过它传输的数据量相比可以忽略不计。


我可以通过nginx反向代理进行gzip,但没有缩小版本:/ 谢谢你的回答。 - Daniel W.

1
我使用了CDN,但在火狐浏览器中出现了跨域问题。
实际上,这个问题是因为socket.io在火狐浏览器中使用xhr-polling传输方法启动,并立即切换到websocket,而Chrome直接使用websocket启动。 通过客户端js配置将websocket设置为第一传输方法(transport method),问题得以解决,但是对于尚未支持websocket的客户端怎么办? 所以我回到了node服务器版本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接