inline caching和hidden classes

在 JavaScript 中,内联缓存(inline caching)和隐藏类(hidden classes)是 V8 引擎用来优化对象属性访问时间的方法。由于 JavaScript 是一种动态语言,因此可以轻松地在对象实例化后添加或删除属性。这种结构使得在 JavaScript 中检索属性值比在非动态编程语言(如 Java)中更加耗时。为了解决这个问题,V8 使用了一种不同的方法:隐藏类。隐藏类的工作方式类似于 Java 等语言中使用的固定对象布局(类),但它们是在运行时创建的。V8 会为每个对象附加一个隐藏类,目的是优化属性访问时间²。

内联缓存设计称为隐藏继承(HI),其基本思想是将类或接口层次结构的静态信息缓存到隐藏类中,这些隐藏类被用来生成高效的内联缓存,以提高面向对象风格 TypeScript 程序的性能¹。

源: 与必应的对话, 2023/4/25

(1) Javascript Hidden Classes and Inline Caching in V8 - GitHub Pages. https://richardartoul.github.io/jekyll/update/2015/04/26/hidden-classes.html 访问时间 2023/4/25. (2) Hidden inheritance: an inline caching design for TypeScript performance .... https://dl.acm.org/doi/10.1145/3428242 访问时间 2023/4/25. (3) javascript - Polymorphism overwhelming inline caches - Stack Overflow. https://stackoverflow.com/questions/74619246/polymorphism-overwhelming-inline-caches 访问时间 2023/4/25. (4) Hidden V8 optimizations : hidden classes and inline caching. https://medium.com/@yashschandra/hidden-v8-optimizations-hidden-classes-and-inline-caching-736a09c2e9eb 访问时间 2023/4/25.

wasm

WebAssembly(有时称为 wasm)是一种低级的类汇编语言,它可以作为多种编程语言的编译目标,允许它们用于基于浏览器的项目,这些项目此前主要依赖于无处不在的 JavaScript。它是一个开放标准,旨在提供一种高效、安全和可移植的代码格式,用于在 Web 上执行客户端脚本。

根据最近的报告,WebAssembly 的使用趋势正在增长。例如,Blazor 在 WebAssembly 使用中取得了最大的增长¹。此外,WebAssembly 在无服务器、容器化和作为插件主机方面的使用也显著增加¹。这些发展表明 WebAssembly 正成为一种流行趋势,标志着仅限桌面应用程序的消亡³。

源: 与必应的对话, 2023/4/25

(1) Blazor Posts Biggest Gain in WebAssembly Usage: Report. https://visualstudiomagazine.com/articles/2022/06/24/blazor-webassembly.aspx 访问时间 2023/4/25. (2) Here Are the 10 Best Web Development Trends for 2023 | Turing. https://www.turing.com/blog/best-web-development-trends/ 访问时间 2023/4/25. (3) Blazor Among Top Libraries for 'Niche' WebAssembly, Which Sees .... https://visualstudiomagazine.com/articles/2022/09/30/webassembly-report.aspx 访问时间 2023/4/25. (4) WebAssembly: 5 Predictions for 2023 - The New Stack. https://thenewstack.io/webassembly-5-predictions-for-2023/ 访问时间 2023/4/25.

js中的call stack和memory heap

在 JavaScript 中,调用栈(call stack)和内存堆(memory heap)是两个用于运行和存储内存的位置。调用栈是 JavaScript 存储静态数据的地方,而内存堆是 JavaScript 存储对象和函数的地方。每个调用栈中的函数都占用一个栈帧。这个帧存储原始变量和对任何非原始变量的引用(这些变量实际上存储在堆内存中)¹。

源: 与必应的对话, 2023/4/25

(1) Confusion between stack, call stack and memory heap in Javascript. https://stackoverflow.com/questions/72760109/confusion-between-stack-call-stack-and-memory-heap-in-javascript 访问时间 2023/4/25. (2) Javascript Fundamentals — Call Stack and Memory Heap. https://medium.com/@allansendagi/javascript-fundamentals-call-stack-and-memory-heap-401eb8713204 访问时间 2023/4/25. (3) Memory Life cycle, Heap, Stack and Call Stack in JavaScript. https://blog.alexdevero.com/memory-life-cycle-heap-stack-javascript/ 访问时间 2023/4/25.

图片懒加载

懒加载实战

图片懒加载有几种实现方式,包括使用 getBoundingClientRect API元素的offsetTop APIIntersectionObserver API,以及使用 vue-lazyload 插件 ¹。此外,还可以通过计算视口位置、交集观察以及 HTML 原生支持来实现图片懒加载⁴。

(1) 图片懒加载的几种实现方式 - CSDN博客. https://bing.com/search?q=%e5%9b%be%e7%89%87%e6%87%92%e5%8a%a0%e8%bd%bd%e7%9a%84%e5%ae%9e%e7%8e%b0%e6%96%b9%e6%a1%88 访问时间 2023/4/25. (2) 前端图片懒加载指北:细数各种方案的实现和对比 - 知乎. https://zhuanlan.zhihu.com/p/138793154 访问时间 2023/4/25. (3) 图片懒加载原理方案详解 - 掘金 - 稀土掘金. https://juejin.cn/post/7196970992576397367 访问时间 2023/4/25. (4) 讲真:Vue图片懒加载怎么做? - 掘金 - 稀土掘金. https://juejin.cn/post/6962038712905498631 访问时间 2023/4/25.

css中的vmin

在 CSS 中,vmin 是一个视窗单位,它的值是当前 vwvh 中较小的值。你可以在任何一个可以使用像素值的地方使用它,比如 width, height, margin, font-size 等等。它们将通过窗口大小的调整而自动调整³。

(1) CSS中如何使用视窗单位_vw, vh, vmin, vmax 教程_W3cplus. https://www.w3cplus.com/css/simplify-your-stylesheets-with-the-magical-css-viewport-units.html 访问时间 2023/4/25. (2) 理解CSS中的vMin和vMax - 掘金 - 稀土掘金. https://juejin.cn/post/6844903921798889479 访问时间 2023/4/25. (3) MinMaxing/理解CSS中的vMin和vMax - 掘金 - 稀土掘金. https://juejin.cn/post/6947990231895244813 访问时间 2023/4/25.