🌸
357 subscribers
127 photos
17 videos
197 links
记录一些 学习笔记,工具,和其它奇怪的东西
Download Telegram
Source map 原理

Source map 本身是一个 JSON,如 {"version":3, "mappings":";;;MADF,cAtBF;mBAAkB", "sources":["~/code/Cat.tsx"], ...}

mappings 是 source map 关键,它记录了源码与转换后代码的映射关系。每个 ; 表示新的一行,因此其后的 MADF 在第 4 行,表示该行的列映射关系,多个使用 , 隔开,它的每个字符基于 Base64 编码,解码后正好是 6 bits。

如对 cAtBF 解码,c:011100 A:000000 t:101101 B:000001 F:000101,解码后的数据以 VLQ(variable-length quantity) 形式表示,每组的最高位是 continuation(C),表示是否连续,最低位是 sign(S),1 为负。

首先 c:011100,C、S 都是 0,表示“非连续正数”,因此可以直接拿中间的位 1110=14。其后 A:000000 按照同样方式,0000=0

之后是 t:101101,C、S 均为 1,表示“连续负数”,“连续”指其后的 B:000001 也是它的一部分,为了更加充分利用空间,后面每组都省去了 S,因此最终是 t:0110(除去 C、S),B:00001(除去 C),连起来 00001 0110=22,补上符号 -22

最后的 F:000101,C=0,S=1,表示“非连续负数”,因此 0010=2,补上符号后 -2。最终 cAtBF 得到 [14,0,-22,-2] 四个数,分别表示 output column、input filename index、input line、input column,所有数字都是相对于当前的偏移量,input filename index 对应于上面 JSON 中的 sources

如果得到 5 个数,则在上面 4 个基础上,再追加一个 name index,对应于 JSON 中的 names(未列出)。如果只有 1 个数,那么仅表示 output column,无其它更多信息。

#learning
推荐一个 MS Edge theme
https://microsoftedge.microsoft.com/addons/detail/pride/gpahbdchbfofplfeaeipcphhbdhdpnae

非常漂亮!inspired by the many flags of the LGBTQI+ community
利用 CDN 规避流量审查

Domain Fronting:SNI 是一个存在于 CDN 的域名,Host 目标域名。原理 CDN 没检查 SNI == Host

Domain Hiding:SNI 任意域名,ESNI/ECH 包含加密的目标域名

Domain Borrowing:域名所有者 Alice 添加一个 *.example.com cert,攻击者 Bob 添加一个不存在的 a.example.com,CDN 错误地将其关联到 *.example.com wildcard cert

#learning
Surge 官方推荐最简配置
https://community.nssurge.com/d/1214

#tools
👍1
https://xsleaks.dev

里面写了好多跨源攻击方式,有些第一次见,还挺全的。

#learning #tools
:你冷静点,不要过来啊
Forwarded from fentabane Shan Hai Jing
CSS Nesting Module

CSS 终于支持选择器嵌套了,https://drafts.csswg.org/css-nesting/

过了一遍,和 Sass 语法基本差不多,浏览器目前仍在实现,或将在 Chrome 109 中可用(with a flag)。

另外刚刚查资料时,发现了 postcss-nesting 这个插件,它允许你提前体验该语法,原理是将 nesting selector 编译为 :is()

div{+span#my-id{}} 编译为 :is(div)+span#my-id{}
现在国行 iPhone 限制了 AirDrop,如果哪天限制只能国区 App Store 下载 App,那岂不是不越狱,连个梯子都用不了了😅

或许以后只有 Android,或除中港澳 iPhone是安全的。想想还挺恐怖的,希望也只是想想。
Atomic CSS 类名编码方式,对文件体积的影响

现代 Web 将 gzip、brotli 这些压缩算法,应用到了各种类型的,浏览器所需的文件上。其原理就是寻找数据中的公共子串,并将其替换为较短的表示形式。

因此,很早有个想法,想以 Atomic CSS 为例,测试看看类名的不同命名方式,究竟对 gzip、brotli 的压缩率有多大影响。现在终于想动了。

这里我随便找了一个使用 Atomic CSS 构建的博客,它的类名是 gSBWlu kJzccJ hsxujn 这种随机字符,我写了个简单脚本,将其重编码为 aaaaaa aaaaab aaaaac 这种连续字符,然后通过 brotli cli 分别压缩它们,观察文件大小变化。

结果是,b-brotlied.htmla-brotlied.html 体积小了 12%,具体图片见评论。这个数字其实是超出我预期的,因为这还只是一个博客首页。理论上,页面规模越大,这个数字就会越明显。

另外,这种连续编码方式,还可以进一步优化,我统计了一下整个 page 只有 315 个不重复类名,因此理论上 aaaaaa aaaaab aaaaac 可以进一步简化为 aa ab ac,但我却给它们补全了 aaaa 的前缀。

#experience
👍2