上周四凌晨两点,我电脑的散热风扇突然开始响。不是常规的那种低鸣,是持续的高频噪音。
我打开活动监视器。Chrome 占了 6.3 GB 内存。二十三个标签页里,有一个从 10 月 6 号就开着——一个后台管理页面,我从那天起就没关,只是把它折进窗口组里,忘了。
关掉它。风扇在十秒内降下来。
这件事让我想了两天。网站开太久,到底有没有影响。答案不是"有"或"没有",是"分几层"。
第一层:浏览器那端
前端的影响最直接,也最容易被忽略。一个页面开久了,内存是只涨不跌的。JavaScript 的垃圾回收只回收没人引用的对象;定时器、事件监听、WebSocket 心跳、缓存的 DOM 节点,只要还在被引用,就一直占着。
我做过一次粗糙的测量。同一个数据看板页面,刚打开时内存 180 MB,挂四个小时后是 610 MB,挂十二小时后是 1.4 GB。中间没有任何操作。它自己在长。
这不是页面写坏了。这是长时间运行的常态。前端框架的响应式依赖、组件树、路由缓存,都会随停留时间累积。
页面本身也会变慢。不是立刻,是慢得让你察觉不到,直到你刷新一次,才觉得"怎么这么快"。
第二层:服务端那端
服务端的影响取决于会话怎么管。用户开着不动,服务器未必在干活。
真正有问题的是长连接和内存里的会话表。一个 WebSocket 连接挂着不动,占一条 fd;十万个这样的连接,就是十万条 fd 和对应的内存。连接池里的空闲连接太久不回收,数据库那头的连接数会慢慢堆上去。
我见过的真实数字:某次线上排查,一个会话表从上午 9 点到晚上 8 点涨到 47 万条,其中 31 万条的 last_active 超过 6 小时。没人清。内存曲线是一个缓慢的斜坡,不是台阶。
长会话不会立刻杀死服务。它只是慢慢地把余量吃掉。
这和"网站开太久有没有影响"是同一个问题的两面。你端上开着的页面,和服务器上挂着的会话,是同一根绳的两头。
第三层:内容那端
还有一个更隐蔽的层面:页面上的内容会过期。
一个开着的列表页,两小时前加载的数据,可能已经不准了。价格变了,库存变了,某条状态被撤回。你以为你看到的是现在,其实是两小时前。没有报错,没有提示,就是悄悄地对不上。
我朋友林嘉做电商运营,去年双十一踩过这个坑。她的后台订单页从早上 8 点开到下午 3 点,中间没刷新,手动处理了三百多单。后来对账,有 11 单的状态她按旧数据操作,返工到凌晨。
她说:"我以为页面是活的。"
页面不是活的。它只是停在那儿。
我的看法
说实话,这个问题被问反了。
大家问"网站开太久有影响吗",其实想问的是"我需不需要管它"。我的答案是:多数时候不需要,但在三种情况下必须管——长时间开着的后台管理页、挂着长连接的实时页面、依赖定时刷新的数据页。
至于普通阅读页面、视频页面、聊天窗口,开着就开着。浏览器会替你兜底,代价是几 GB 内存和一点风扇声。
真正该养成习惯的,不是"定时关页面",是"知道哪个页面在偷偷长大"。前者靠记性,后者靠观察。记性会忘,观察不会。
如果你也在整理这类细碎的经验,可以看看 日本女性wwe纪录片推荐 里我记的另一段观察,和 董悦悦星空 那篇的节奏一样,都是慢慢写下来的。
有次在 gkk34.com 上翻到一个老帖子,讲的就是浏览器内存泄漏的排查方法,写得比我细。另外 嫩草嫩草草嫩草嫩草草蝴蝶 那篇讲会话回收的,也值得对照着看。
还有几处零散的记录,散在 xxw18com 和 91快活影院-进入探花 里,不成体系,但都是实测出来的数字。