最新

browser

缓存 - 一个奇妙的想法

太慢了! “HTTP 你过来一下,有件事想和你商量商量!” 浏览器老大晃悠到了 HTTP 的手术室中说道。 “怎么有空过来,正忙着呢,快坐。” 说着,我放下手中的器具,抽出放在一旁的凳子。 “不了不了,我就想了解了解情况,门口还有还多 URL 等着你发送呢!” 浏览器老大叹了口气。 我一看门外,吓了一跳,门口的 URL 都已经围着我的手术室绕了一圈了。“什么情况?” 我问道。 “这个页面的 HTTP 请求有点多啊!” 浏览器又叹了口气,缓缓的说道:“你想想有什么办法能快一点?” “这我也没有办法呀,我这只有 6 个人,要不你加点?” “不行啊,浏览器空间太小了,操作系统老大不愿意在派人过来了,算了,你先忙,我想想办法!” 浏览器老大一脸的无奈。 协商 手术室外的 URL 慢慢的减少,大概过了 500ms

By Breeze

browser

TCP 实习笔记

计算历:7e3 年 af 月 5e 日。天气:晴。在 Chrome 实习的第一天。 终于摆脱学校开始在 Chrome 实习啦,真是不错的一天,网络很好,没有丢包情况出现,现实的情况也没老师说的那么糟糕嘛。 前辈的工作台也太炫酷了吧,就是不知道在 FireFox 实习的同学怎么样,IE 那的同学,估计是手动操作吧!哈哈!! 今天用这工作台发了不少报文,工作台用起来比学校里手动操作报文快了不少,但基础不能忘,今天没什么需要记录的,就复习下 TCP 报文基础吧。 TCP,Transmission Control Protocol,传输控制协议,传输层的一个协议,其目的为:在复杂网络情况下(不可靠的 IP 协议下),提供一个可靠的字节流传输通道。 可靠意味着数据的完整,也就是,在网络连通的情况下,排除一切可能的错误,

By Breeze

browser

老司机 - TCP

新人拜访 “您好,我是 TCP 服务的实习生,刚培训完,请问您就是 TCP 老司机吗?” 正坐在办公室悠闲喝着咖啡的我,差点一口喷出来,“哦哦,行,你终于来啦,看来几天前的资源申请通过了啊,老司机?” “浏览器老大这么叫你的,说你厉害,靠谱的很。” “好吧,既然来了,赶紧准备准备!这你的工作台。” 我放下手中的咖啡,走到了一个靠窗的工作台,指了指。 “好嘞。” 说着,刚来的小伙子走了过来。 工作台 “好多工具啊,这个通道是什么,这儿还有个钟?都怎么用呀?” 小伙子满脸好奇的问道。 “这样吧,从左到右,我一一给你说说。” “首先,最左边呢,是个通道,这里会蹦出应用层需要我们发送的数据。最常见的就是 HTTP 那小子的报文了。” “了解,我们的工作就是发送应用层的数据。原来不需要我们自己去拿啊!” “旁边呢就是扫描机,你需要根据实际情况把数据进行扫描,

By Breeze

browser

URL - hash 的委屈

诞生 午夜的钟声已经响了 11 次,伴随着浏览器地址栏的输入 https://breeze.red/yi-ge-url-de-zi-shu/#%E8%8B%8F%E9%86%92,一个 URL 被浏览器创建,当然 URL 的 Hash 口袋里装的就是我,正式介绍下我自己: 我是一个 Hash,就是普普通通的一个字符串,没有特定的格式,是 URL 的一部分,只是不太被人们所关注罢了。 拦截 突然间,浏览器收到了 Enter 指令,“嗡嗡嗡” 整个浏览器大厅发出阵阵警报。 “HTTP 服务已准备就绪,随时可以发送请求。” HTTP 服务自信满满的说道。 “URL 快带上你的包裹,去 HTTP 那儿吧” 浏览器老大说道。

By Breeze

browser

一个 URL 的自述

苏醒 虽说现在是凌晨 3 点,但 breeze.red 所在的服务器却收到了一个请求:https://breeze.red 。伴随着警报响起,睡梦中的服务器冷不防打了个激灵。 “快告诉我,你的传输协议是什么?” “咦?你是在问我吗?” 我回答道。 “这里只有你一个,难不成我问空气?哦这里空气是比较稀薄,你还好吧?” 服务器见我迷迷糊糊的样子问道。 “我是谁,我在哪里?” 刚睡醒的我有点失忆。 “你是一个 URL,这是我的地盘,刚被网卡送到这,都忘了吗?” “哦,对,我是一个 URL 大概 10 毫秒前被浏览器创建,并送出,终于到你这啦,这是我的传输协议 HTTP 给你。” 在经历了一次长眠后,我想起了自己的使命,去服务器要一张网页。 “好,HTTP 服务,你过来下,

By Breeze

javascript

ES6 Proxy

简单谈谈 Proxy:在目标对象之前架设一层 拦截 ,当对该对象进行 访问/赋值 时,必须先通过这层拦截,从而实现对属性进行 访问/赋值 时的过滤和改写。 一个简单的例子 let obj = new Proxy({}, { get(target, key, receiver) { console.log(`getting ${key}!`); return Reflect.get(target, key, receiver); }, set(target, key, value, receiver) { console.log(`setting ${key}!`); return Reflect.set(target, key, value, receiver); } }); obj.count

By Breeze

javascript

ES6 变量解构

简单说说 假设有这样一个场景:你需要向你的服务器获取一些基本的数据(config 对象)来初始化页面。当你需要去获取其中的配置项时, ES5 是这么写的: var config = { params1: 520, params2: 1314 }; // 为了确保下方的代码不依赖于 config 对象,重新赋值为一个更有意义的名称。 var params1 = config.params1, params2 = config.params2 console.log(params1 + ' !! ' + params2) // 520 !! 1314 看着代码量也不是很大,但这只有两个配置项,万一要有几十个呢,不得一直 congif.xxx 了。不得不得这的确很烦,那有没更简单的方式呢? ES6 提出了以下方式: var config = { params1: 520, params2:

By Breeze

javascript

ES6 Array

简单谈谈 ES5 中原本就提供了数组,这里谈谈数组下都有哪些方法新增,哪些方法进行了变更。 Array.from 在 javascript 中有这样一类的存在:类数组,它不是数组,却能像数组那么操作,如下便是一个类数组结构。 let arrayLike = { "0": "a", "1": "b", "2": "c", length: 3 }; 类数组结构:可以像数组那样取值、 for 循环,但是却不能适用数组 forEach/splice 等数组特定的方法,在 ES5 中必须使用一些特殊的方法来将一个类数组结构转化成数组,而在 ES6 中,

By Breeze

javascript

ES6 Function

默认值 想必在写函数时,都会有一个困惑:要是在这个函数调用的时候,参数没有传入时,该怎么办?设置默认值。对,所以大部分的函数都会有以下的代码。 function func(param1, param2) { param1 = param1 || {/*...*/} /* ... */ } 以上代码相信绝大多数的 javascript 开发者都写过,乍一看是没啥大问题的,但是如果传入的值是 false 呢?那么 param1 就会被替换成默认值。为了避免这个问题就应该将代码改一改: if( typeof a === 'undefined' ){ a = {/* ... */} } 这就大大增加了代码量,而且一个痛点莫名其妙的增加了:增加了代码的不可读性。 在 ES6 中允许为函数设置默认值,而且定义明确,代码的可读性大大增加。 function log(x, y = 'World') { console.log(

By Breeze

javascript

ES6 Arrow Function

简单谈谈 对于箭头函数的出现,我是这样理解的: function 在 javascript 中是一种类似与流程的一种存在,一个 function 代表一种处理数据的逻辑。在 ES6 中, function 的这一特性被进一步的认可和强调,因此产生了箭头函数。 箭头函数 let f = v => v; 上面的箭头函数的约等于以下函数 var f = function(v) { return v; }; 当然函数参数存在没有或者多个情况 var f = () => 5; // 约等于 var f = function () { return 5; }; var sum = (num1, num2) => num1 + num2; // 约等于 var sum

By Breeze