浏览器背后:一座从不打烊的城市
JavaScript 老大的叠盘子游戏
执行大厅刚换上一摞新盘子,递归函数就抱着盘子冲了进来:“再加一层!”盘子越堆越高,事件大厅在门外急得直拍门——最上面那只到底什么时候才能拿走?
按下回车的那一刻,浏览器背后的城市便亮了起来。URL 背起行囊,TCP 开车运货,HTTP 在手术室拆装报文,JavaScript 老大则在执行大厅忙得团团转。今天,这座城市里又发生了什么?
浏览器背后:一座从不打烊的城市
执行大厅刚换上一摞新盘子,递归函数就抱着盘子冲了进来:“再加一层!”盘子越堆越高,事件大厅在门外急得直拍门——最上面那只到底什么时候才能拿走?
浏览器背后:一座从不打烊的城市
函数早已执行结束,临时工作室却死活关不掉。清理员刚碰门把手,警报立刻响起:“该环境仍可访问,禁止清理!”到底哪把钥匙还没交回来?
浏览器背后:一座从不打烊的城市
一段 while 循环转得头晕,HTML 解析器还在电话里催命。任务队列、微任务队列轮番塞活,JavaScript 老大只能在两个大厅反复横跳:“来,下一个!”
浏览器背后:一座从不打烊的城市
数字、字符串、null、对象挤进同一个小盆,刚见面就吵翻了。加号一落下,到底相加还是拼接?JavaScript 老大的类型转换器开始冒烟……
浏览器背后:一座从不打烊的城市
“警告!内存即将溢出!”变量大厅已经挤到半只脚悬空,JavaScript 老大冲进门就开始点名:“说吧,你是什么垃圾?”这次又轮到哪批变量消失?
浏览器背后:一座从不打烊的城市
缓存、长连接、管道化轮番上阵,请求还是不够快。HTTP 和 TCP 决定偷偷开个新部门,结果实验一炮而红,连 Firefox 都找上门了……
浏览器背后:一座从不打烊的城市
缓存刚抢完风头,TCP 就在总结大会上举手:“请求加速怎么没叫上我?”长连接顺利上岗,管道化却很快撞了墙……
浏览器背后:一座从不打烊的城市
HTTP 手术室门口,URL 已经排队绕了一圈。相同资源送了一遍又一遍,浏览器终于坐不住了:“能不能快一点?”一场缓存改造就此开工。
浏览器背后:一座从不打烊的城市
早上 6 点,浏览器早高峰准时开场。GET、POST、请求头、响应体挤进 HTTP 手术室,TCP 还时不时“duang”地砸来一个包——今天又是忙碌的一天。
浏览器背后:一座从不打烊的城市
实习第二天,工作台突然贴出“今日保养”。老司机背着手走过来:“机器歇了,你手动给我过一遍。”三次握手、四次挥手……实习生的冷汗下来了。
浏览器背后:一座从不打烊的城市
TCP 部门来了个实习生,一上班就追着老司机问:握手为什么非要三次?数据怎么发才靠谱?关个连接怎么比打开还麻烦?今天这杯咖啡怕是喝不安稳咯。
浏览器背后:一座从不打烊的城市
URL 都出发去服务器了,hash 却被浏览器一把拽了下来:“你不能去!”凭什么?更扎心的是,等了半天,却只被安排去找一个元素……