- 博客(24)
- 收藏
- 关注
原创 组件是怎样写的(1):虚拟列表-VirtualList
本片文章讲解一下虚拟列表的实现,代码主要来源于,然后在其基础上做了一些优化。如果在浏览器中渲染有大量数据数据的列表,比如 100 万条,并且设置滚动,在打开这个页面的时候,浏览器所承担的渲染压力将会急速放大,浏览器将会崩溃。虚拟列表应对该种情况的处理方式是将列表渲染时的计算量从渲染进程中转换到了 js 中,从而降低浏览器的渲染压力,使这种数量的列表可以正常渲染。在用户端,用户对序列表做的操作主要是使用鼠标的滚轮滑动列表,或者通过拖拽滚动条的方式,两者都会反映到元素的 scroll 事件上。
2025-04-21 16:18:03
799
原创 翻译:MCP schema(Model Context Protocol specification)
Model Context Protocol(MCP)是Anthropic于2024年11月25日发布并开源的一项开放标准,旨在规范应用程序与大型语言模型(LLM)之间的上下文信息交换方式,使开发者可以在AI模型与本地或远程数据源之间建立安全、双向的连接,使AI系统能够有效的访问所需的数据,提升响应的相关性和质量。
2025-03-16 13:45:28
365
原创 网页端电子书阅读器的实现
本文介绍了在网页端实现电子书阅读的两种模式:分页和滚动模式,重点讲解了使用overflow+scroll和overflow+translate实现分页的技术细节,并探讨了在lingo-reader项目中构建网页阅读器的相关API和功能设计。
2025-03-09 17:13:46
1490
原创 翻译:tc39装饰器提案扩展
因为如果对装饰器或注解表达式的评估顺序进行重新排序,会变得不直观,也就是说,装饰器或注解的执行顺序会受到函数声明位置的影响,而不是像普通的函数声明那样在代码的任何地方都可以调用。相反,带有装饰器或注解的函数只有在达到声明时才会定义。装饰一个初始化器会将其转变为一个惰性计算函数(thunk),这样它可以在适当的上下文中执行(例如,在启用使用追踪时)或稍后重新执行(例如,当依赖发生变化时)。带有装饰器或注解的参数的函数与带有装饰器/注解的函数类似:它们不会被提升,并且在其定义被执行之前处于临时死区(TDZ)。
2024-12-21 19:38:28
575
原创 翻译:tc39装饰器提案(Stage 3)
装饰器是在定义期间,在类、类元素或其他 JavaScript 语法形式上调用的函数。可以用具有相同语义的值替换被装饰的值。(例如,装饰器可以用一个方法替换另一个方法,用一个字段替换另一个字段,用一个类替换另一个类,等等)。可以通过accessor函数获取被装饰的值,并选择是否共享这些访问器。可以对被装饰的值进行初始化,在值完全定义后运行额外的初始化代码。如果值是类的成员,装饰器的初始化过程会针对每个实例运行一次。简单来说,装饰器可以用来进行元编程,为值添加功能,而不会改变它的外部行为。
2024-12-21 19:37:40
1096
原创 JSON的解析过程及其在ai流式传输中的应用
JSON是一种轻量级的数据交换格式,其设计来源于js语言语言标准ECMA-262第三版的一部分功能或语法规则。所有的c系语言在内部都能够表示json的数据结构,都能够实现json的parse和stringify方法。在js中,除了parse和stringify之外,还有两个方法是和,这两个方法的出现是为了弥补js本身的缺陷。js中的number类型使用的是IEEE754标准的64位浮点数表示,在表示超过64位浮点数最大表示范围的数字时,js会将这个数字四舍五入到最接近的可数字,ling,json-parse
2024-11-21 19:28:04
1053
原创 esm模块的加载顺序
esm模块的加载顺序,在sin.js的全局中读取这个变量,就会报错_B is not defined。,然后重新加载,加载的sinMod2也会只是用第一次加载的缓存,此时print函数还是print1,而不是print2,所以打印了两个1。下面的代码不会报错,会打印。代码的输出如下,模块会执行两次。在esm中,模块是单例的,首次导入后,模块所有的导出都被缓存,且只会执行一次。时,会先执行其导入的模块文件,然后再执行当前文件的代码,所以先输出。
2024-10-24 17:00:11
380
原创 ecmascript和nodejs中的Buffer
它们存储的都是原始二进制数据,也提供了一些操作二进制数据的api。2:为了扩展操作缓冲池中数据的能力,可以创建一个视图层。是一个类型,无法被实例化,是上面所描述视图层的联合类型。的类型转换上就不会报错,该错误在处理图像读写时会出现。两个视图的联合类型,也只是一个类型,无法被实例化。3:如果遇到下面这个错误,可以使用。时,可能会遇到下面的错误,可以使用。
2024-09-19 18:56:58
353
原创 记录:Scavenge:v8引擎的垃圾回收算法
在老生代内存中,采用的是标记清除算法,从根节出发,找到能够到达的对象,然后将不可达的对象进行清除。清除完成之后,会存在大量的内存碎片,这时候采取的策略为标记压缩策略,将活跃的对象移动到内存的另一端,紧密连接,这样就能将内存碎片进行消除。分为新生代和老生代,新生代用于存储生命周期较短的对象,回收频率频繁。通过增量垃圾回收和并发垃圾回收的方式将垃圾回收分为多个小步骤,或者采用并发的方式,避免长时间的暂停。部分使用可达性分析,也可以理解为标记清除算法的标记部分,从根对象出发,把能够访问到的对象移动到。
2024-09-08 17:30:16
413
原创 记录:v8中数组的sort方法采用的排序策略
sort使用的是优化后的快排算法,在内部,数据量小于10的时候,使用插入排序对这一部分数据进行排序,其余情况使用快速排序。数据量大于1000的时候,需要每隔200-215个元素挑出一个元素,从挑选出来的数里面选择中位数,作为快速排序的pivot。数据量小于1000,大于10,则直接选择中间元素作为pivot。
2024-09-08 17:28:46
220
原创 ssh: connect to host github.com port 22: Connection timed out fatal
ssh: connect to host github.com port 22: Connection timed outfatal: Could not read from remote repository.Please make sure you have the correct access rightsand the repository exists.
2024-01-31 13:51:19
542
原创 shadow dom简介
shadow dom简介,light dom,html,slot,web component,:host,:slotted,selector
2023-09-05 15:50:51
569
原创 MFC树形组件显示文件树形目录结构
MFC实现文件树状目录结构的展示,tree control,list box,OnTvnSelchangedTree1,HTREEITEM,MFC树形控件开一个 MFC 项目来实现文件目录的展示。
2023-09-03 21:15:31
873
原创 monorepo实践
monorepo可以概括为前端模块化、工程化的进一步演进,使得我们能够在不将自己的包发布到npm上的情况下,就可以使用pnpm add和的方式,向当前项目引入本地其他项目里的包,使得能够在同一个工作目录下存放多个项目,方便管理。换句话说,我们可以通过两个途径来将第三方库引入到项目中,一个是本地,一个是npm。实现monorepo可以通过pnpm和yarn两种包管理方式,本文使用pnpm来进行实践。monorepo实践,monorepo原理,monorepo概述
2023-04-06 18:38:20
724
1
原创 python中的并发
python中的并发,CPU密集型任务是说程序中存在大量的计算操作,CPU在程序运行期间处于忙碌状态,因为计算量太大导致程序运行的时间过长,此时提升CPU的性能可以缩短程序的运行时间。对于CPU密集型任务,使用并行机制来缩短程序的运行时间,程序的运算量可以看作是固定的,程序同时使用的CPU越多,总的运算量减少的就会越快,进而程序的运行时间就会缩短。python中使用thread和async来支持并发,因为GIL的限制,python在使用这两个功能时也还是单线程执行的,
2023-03-13 18:22:38
2894
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人