粉丝139获赞406


这他妈啥呀?这三个人他妈杀二十个,搁他妈 aogs 搁这刷窟窿海呢?我靠,二十个。

一入城门深似海,从此秀发看他人。大家好,我是安扣鸟。上节课我们学习的这一块 we demo 操作啊,关于元素内容部分 ap 的 使用,那么本次课程我们继续往下学习,我们要学习的是这一块 we demo 操作当中关于属性 ap 的 什么使用。 然后接下来打开我们亲爱的 west code 啊,咱们来操作一下,什么是关于属性相关的操作呢?比如说我有一个音外的标签,那么和音外这有关系的属性什么? s, r, c 对 吧?还有它的一个什么开头对吧?还有什么呢?还有它的宽度,高度, 这些都是属性标签,它代表的就是类当中的一个对象的实力,那么你对象怎么样?上面肯定包含各种各样在内当中定义的属性,所以说呢,这两个 api 可以 帮我们去操作,但是它给了两种啊,给了两种, 咱们来看一下这两种这个 api 在 使用过程当中啊,有什么差异性,这个是我们需要关注的点, 在我刚用这块的时候,我觉得它好像只有一种,是吧?在后面的 api 更新的过程当中,版本迭代的时候,好像又新加了另一种,不管怎么样,咱们来试验试验,甚至你 match 给个 id 吧。 b t n 那咱们做一个很简单的需求啊,就是我点击当前的这个按钮呢,然后给我们的这个图片的这个元素 html 标签,给它换一张图片,好吧,换一张图片,然后 click id 选择器都安排上啊,接下来 function 啊,括号,括号对吧?给一个逆变函数,然后再接下来呢,咱们要找,首先我找到这个图片啊,还是给一个 id 比较好一些,因为这个标签选择它未必是一个好事,是吧?在一个较大的范围里做筛选,还不如精精准的筛选呢。 img, 然后呢,它有两个 api, 第一个呢, a t t r, 它代表 attribute, 第二个呢, prom 啊, p r o p, 对 吧?其实这两个它都有一个什么呢?属性的意思,下面这个应该是 properties, 上面是 attribute。 好 吧, 一一的去展示一下啊,那这个就是一个建值对的,对,建值对的操作,那肯定分 set 和 get 两种呗, 如果说你要复制的话,传一个 key, 传一个值,如果你要 get 的 话,我们只需要怎么样把它的这个 key 传进去就 ok 了。所以说呢,我们传一个 key 吧,我们要去读的它的 s r c 的 属性,好吧,读的时候呢,咱们把它 ctrl 点 log 打印到我们的控制台里面去啊,看一看,看一看, 启动一下,看看我们的效果啊。 f 十二,打开啊,机器猫,我觉得好像是七零后,八零后,九零后,零零后,都知道了啊,都知道了,这个应该是没有这个 代沟,点一下, ok, 它这个属性就获得到了。我是根据 key, 根据 key 获得 key 当中的一个什么 value, 如果要做 side 操作的话,其实也没有压力啊,你要给个 key, 然后呢,把这个 key 对 应的 value 传给他啊, value 传给他, 那么我们现在希望 s r c 呢,它绑定的是我们当前这个目录下的另外一张图片,可塞点 d p k。 这个图片真的是超级超级的,这个有年代感,我觉得至少百分之九十九的小伙伴都不知道它嘛,都不知道它啊。 ok, 然后这个时候呢,咱们看一下,点击, 哎,切换成这个图片了啊,切换成这个图片,这是可塞啊,这是可塞,因为我本人是一个这个重度的魔兽,这这个玩家啊,爱好者, 其实在游戏当中看到一个这个玩家的 id 叫什么呢?可赛前来拜访,这个是我们小时候看的这个动画片,里面的有一句经典的台词,是吧?然后我问了一下,我说,大哥你,你今年贵庚了是吧?他告诉我他今年刚好退休六十了, 所以这个超级有年代感啊,它后面之后才有奥特曼是吧?它属于奥特曼的一个前系啊,前面的一个版本,所以说呢,通过这种方式呢,我们会发现,哎,把它的这个 key 对 y 又传进去,哎,这样的话呢,我们就可以操作我们 html 标签上面什么各种的属性啊,接下来我们再去用一个这个啊, p r o p p r o p。 然后这个时候呢,咱们给它注射掉一下,对比一下,看看它的一个效果啊,点击,我发现也没有任何的问题, 它俩都可以实现一个什么呢?图片的切换,但是为什么给了两种 a p i 实际上的属性的分类呢?宏观分两种,一种叫静态绑定属性,就是说你这个标签刚写的时候,上面有这些属性是什么,对吧?它就是什么。 那么第二种属性呢,我们称之为要动态属性,什么动态属性呢?比如说你在操作标签,操作标签的时候呢,它这个东西会在变, 那什么情况下会变?比如说下来列表,对吧?复选框,单选框,然后呢这个按钮是否可用?这些东西是动态变化的,所以说呢,对属性进行了个什么呢?分类操作,对吧?静态的用 attribute, 那 么动态的用 prompt, 所以 说这是它俩之间的一个什么呢基本区别。 然后接下来我们来演示一下这个基本的区别啊,比如说我在这里写一个 check box 啊, check box 用 ctrl 的 选项啊,把这个属性加上去, 加上去之后呢,它的这一个基本的状况就是一个选中的状态啊,选中的状态,好吧,就这样的状况。接下来呢,我们来了解它俩的区别,因为我们知道它俩的一个区别了,但是呢,我们需要通过一个实践,让我们把这个区别记得更加深刻一些。 而这个时候我希望点击它看,通过两种这个属性的 a, p, i 来对比一下它俩之间的差异性是什么。那么在这里呢,还是给个 id c k, 好 吧,然后呢在这里我们把它选出来, 点 c k 的 时候呢,我现在希望什么呢?把它两个值读出来,看看怎么回事啊?看看怎么回事?那么直接打一遍,可以做点 log 啊,可以做点 log。 那 么第一个呢,打一,咱们给一个值啊,给一个值,我叫 a tree, 好 吧,然后呢加上一个逗号就行了,逗号就行了,然后呢这个是 c k 啊, c k c k 的 a tree 啊, a tree。 然后呢,看看它的这个拆克的属性是什么啊?拆克的属性是什么?然后接下来呢,我们再通过 p r o p 去取它的这个拆克的属性啊,看看它俩之间值有什么样的区别啊?区别,然后执行一下啊,点 点点点点的过程当中,我们会发现啊,就是下面这个 p r o p, 它的处和 false 这个值取出来了,说明什么呢?当你点击的时候,它对应的布尔值是处, 当你取消点击的时候,没有选中它的时候,它对应的值是一个 false, 是 吧?这个非常的鲜明,选中了就是数,选不中什么是 false, 但是我吹拿到所有的值全是空的。这个就是基于咱们刚才鸟叔给大家总结的那个理论, attr 是 一个静态固定的属性,对吧?刚开始什么样就是什么样子,那么 p r o p, 它更多的用来监控这种动态属性的变化,所以这是它俩之间的一个本质的区别, 也就是说偏动态的操作,我们都应该用到什么? p l o p 偏静态属性的操作我们应该用到什么? h t t r 好 吧,所以这是他俩之间的一个什么呢?根本的一个区别。好了,小伙伴们,通过今天的学习啊,我们学习了这块 r d m 操作,关于属性部分 api 的 使用啊,那么本次课程到此结束,感谢您的观看,让我们下期再会。

电竞版本幺九九和超金版本二九九的区别?第一个区别就是剑帽了,超金版本它是双层的剑帽工艺,第一层是碳纹,第二个第二层是冰晶的质感,能够感觉出来吗? 然后我们二号链接它整体是一个全碳纹的磁州键盘,它的就是它是用零点零一毫米的激光雕刻上去的,所以呢它碳纹的工艺会更加立体,更加好看, 搭配一千六百万色 a r g b, 灯光效果整体会更加好看。视频当中它是我们二号链接的超近版本。

设备上有账号、有密码,会连 wifi, 就 会连它,同时连接十一台设备。移动和电信移动和电信双网的,不是三网,移动和电信。对了,到了之后实名一下就能用了。电池续航十五个小时,六号可以当充电宝,六号可以当充电宝。

一入成本深似海,从此秀发看他人。大家好,我是安空鸟。上节课我们学习的这一块类常用到某操作当中什么关于属性部分 api 的 使用,那么本次课程啊,我们要讲解的是这一块类到某操作当中关于节点部分 api 的 一个什么使用。 那么节点操作的 api 呢?看似很多啊,实际上一点也不少。接下来打开我们亲爱的 vs code, 咱们一一演示一下,咱先把咱们的这个小案例给它铺上啊,我们随便找一个案例吧,就是输入内容,在列表里去添加这些内容,好吧,然后 id pst, 这个时候呢,给个补光钮,看一下,八成是吧,这个八成的 y 轴是 ad 添加嘛 啊,文本框里输入的内容,我们要添加到一个 ol 里面,有序列表啊,有序列表, ol 啊 ol, 好 吧,这样的一个简单的 demo。 那 么首先呢,我们来看一下,就是创建 html 的 一个什么节点标签对象是怎么创建的, 那么我们现在要把我们输入的内容放到这里面来,那它这里面适配的是什么?这个我们需要知道,是香蕉,对吧?苹果,大鸭梨, 大鸭梨,所以说它适配的是这种类型的,所以说我们呢要创建这种类型的标签,然后呢去添加到 o l 里面,才会有一个什么呢?正常的显示, 所以说呢,这个操作是在这里取值,然后呢封装成 o l 啊 o l 里面的梨,然后呢把它添加到 o l 这个标签里面,这样就 ok 了,是吧?把大象放到我们的这个冰箱里,分几个步骤。 好,这个时候呢,咱们先把事件安排上,因为点按钮触发事件嘛,所以说先把按钮找到,找到之后呢, ctrl 一下,然后呢在里面随便传一个 function, ok, 没有问题。传 function 之后呢,接下来我们就要取一个什么值,就是 tst 的 一个 value, 他这个 value 取不取直接写,哎,我觉得没有什么问题,是吧?也直接没有问题啊,咱们直接 let 他 一个立吧,好吧,然后他是这样的一个标签,对吧?用一个工厂函数在里面把标签写进去之后呢,他就自动变成了一个什么呢?立标签啊,立标签, 立。 ok, 变成立之后呢,然后在在这里呢,我们就要添加一些我们当前的这个文本框里面的这个值了, 就会取 tst 爱奇选择器里边那个什么 value, 把它拼起来就行了,形成一个新的力,生成这个力之后呢,我们再做一个小小的操作啊,就是我希望点击这个力的时候呢, 它能够把这个力之间的这个文本内容给我打印出来。好吧,那这个时候给力再加个对象吧,因为你本身他就是个对象啊。我再加一个这个,这个叫事件,加一个点击的事件和另一款,好吧? 好,这个时候呢, windows 点 ctrl, 咱们打印一下,打印的时候呢,你点击谁?这个 this 当前的那个节点对象, 然后呢,它里面文本部分的内容怎么说? test 啊, test 不是 type。 好 吧,这样的话呢,节点有了,然后接下来的节点对应的这个事件也有了。最后一步操作是什么呢?我们要把它添加到我们的 o l 里面,这个 o l 给它起个 id 吧, id 为 ol 的。 好吧,我们拿 id 选择去找,更加精准一些啊 啊,这个时候 id 选择器找到了这个 o l, 然后呢在里面做一个 erp 的 操作, erp 是 什么意思呢?就是将这个节点添加到什么我们容器,按容器的最后的这个部分去添加啊,保证一个有序性。就是说什么呢?你前面有一个一二三了,你再添加的话,你的位置是四,再添加五,再添加六这样的一个顺序去排队,排队合拍,好吧,然后把它添进去之后, 这个界面咱们做一个小小的操作啊,就是我要把当前的这个文本框给清空一下,方便我下次的录入 清空啊。我如果不写的话是 get, 写值的话就是一个什么啊?不写的话是 set, 不 写的话是 get, 对 吧?我现在做的是什么? set 操作? set 操作,这个是 get 吗?取当前的那个框的值是吧?然后这里面我传一个值进去,是一个什么 set 操作啊? set 操作,复制操作,复制操作, 幺幺幺,然后呢?二二二三三三, ok, 按顺序添到了我们 o l 里面啊,而且新进去的这个一二三,由于它绑定了这个点击的这个方法,对吧?所以这个时候呢,它是自带这种点击效果的,是吧?它是有事件和方法联动的啊,当然前面这几个是没有的,因为这个是为了添数据方便嘛, 我随便写了一些,当然了我们也可以通过一些方式给它加上去,这个都是没有压力的啊,都是没有压力的好吧,所以说呢,这个就是关于咱们一个对象节点创建,然后加一个 app 的 这个什么技术使用,而接下来还有什么呢?就 pre pad, 这个和 app 的是一个相反的意思啊,它是插队, 就是你排,你的,就是你前面呢,有一个四五六三个人了,对吧?但是呢人一二三要进来,就是那个可能是来个一二三这么插,对吧?他可能插的这个顺序和我们这个看着是相反的,相反的, 然后接下来咱们再看看他这个效果啊。一,然后呢?二,然后三,看到没?就是你后进来的,他是插到前面,他是从前往后插。 然后呢网格是什么呢?就是在后面去排队,在后面去排队,所以说呢,保证了一个什么呢?有序性。当然了这个还是根据我们的需求啊,选择我们对应的 api, 就 这样就 ok 了。好吧,没有什么好,没有什么坏,是吧?看我们这个需求,然后再接下来看这个 replace with 啊, 这个是一个什么呢?是一个替换的意思。什么叫替换呢?就是我们将某个节点替换成一个什么呢?新的节点,那么在这里呢,我们直接写代码就行了啊,直接写代码就行了, 比如说我们的这个 double 创建完 ready 之后呢?我们现在有一二三,有一二三,我现在要把这个香蕉变成什么呢?变成菠萝蜜,这时候怎么办呢?首先我先找到这个 ol 啊, ol, 找到这个 ol 之后呢,拿到了,然后 ol 里面呢,它有若干个粒,哎,这个是一个什么呢?后,这不叫后代啊,叫子代选择器啊,子代选择器,把下面的这个粒找出来,找出来之后呢,这个粒当中你要搞哪一个呢?预测为零的,或者是个什么 first, 第一个对吧?第一个 replace of with, replace with 替换成什么呢?它这个里面也要给一个节点对象啊,比如说我这个力,这是个节点对象是吧?我放到我的工厂函数里面,它就变成一个节点对象,然后再给个 b 标签加粗一下,然后中间写个什么呢?菠萝蜜啊,菠萝蜜, 也就是说创建好之后,你这个香蕉将会被什么呢?菠萝蜜这个节点所示吗?替代啊,替代,是第一个节点替代掉,好吧,咱们启动一下,看看它的效果啊。菠萝蜜, ok, 这个时候咱们 f 十二查一下它的这个阿特莫勒的一个变化啊,变化 o l 当中看没看到第一个节点是力,力点开之后呢,是变成菠萝蜜了,菠萝蜜外面是有一个什么呢? b 标签啊, b 标签,所以说这个就替换成功了啊?成功了,所以这是 replace 位位置的一个使用方式。还有呢,就蕊木,那蕊木也没有压力了,是吧?那找到第一个这个节点,我直接蕊木掉就行了呀, 我直接可以可以调一个帷幕方法,对吧?帷幕这个没有什么压力啊,直接删掉就行,非常的丝滑, so easy 啊, so easy。 就是 你找到对应的这个历节点,然后呢?把它删掉啊,把它删掉就行了, 我现在标签里剩两个了,对吧?剩两个了,那个香蕉没了啊,香蕉没了,再往下看。 empty, empty 是 一个清空的意思啊,这个清空你不能清空某一个节点了, 他一般是什么呢?我要清盘我整个的一个什么呢?元素内部的所有的粒,是吧?所以这个时候呢,我们要找到的这个对象要宏观一些,我要找到的是个整体,而不是一个局部。我把这个 ol 找到之后呢,直接调一个 m t 就 ok 了, 这样的话呢,我这个 ol 里面包含的所有的粒的直接点全部被咔翻掉了啊,非常的丝滑,非常的清爽, 没有了,这个时候还是咱们看一下它的这个 html 的 变化啊,里面没有任何的这个历节点了啊,历节点了, 最后这个 api 呢,它是克隆,克隆的意思,什么叫克隆呢?就是复制粘贴一个呗,对不对?那咱们来克隆一下啊,这个时候呢,我在这里写一个按钮啊, ctrl c, ctrl v 就 行了啊,这个我叫 copy 啊,克隆, copy 都可以 b t n 克隆啊,克隆, 然后这个时候呢,我克隆某一个节点啊,某一个节点在这里补齐事件,就是点击你这个克隆按钮,对吧?然后之后会发生一些事情啊,会发生一些事情, 对吧?点击我当前克隆的这个按钮,然后我希望发生什么样的事情呢?我这个时候我再去创建一个 ol 啊 ol, 我 这个 ol 呢?我叫一个 ol 克隆吧啊?克隆, 我现在希望什么呢?将你上面的某一个节点克隆到我下面里的 o l 里面,是不是?比如这个节点我觉得很喜欢,对吧?我很喜欢它,然后这个时候呢,我克隆它之后呢,把它放到下面的这个 o l 里面,是不是?那怎么办呢?首先我先去找一个上面的 o l, 就是 你要克隆的这个 o l, 是 吧? ol 里面这个力啊力,那它是来源于哪呢?是 ol 这个有序列表里面的力当中的哪一个呢?比如说第一个吧, first, 这样的话呢?你 first, 哎,它就被克隆了,它就被克隆了掉一个克隆的方法, 也就是说在这个节点的基础之上,又复制出来一个新的节点,生成了一个什么新的力,这个时候我就可以怎么样呢?往我这个 ol 克隆里边去,是吧?把它放到这里来, 然后呢给他个判断,操作一下,然后呢加一个力啊,这样就 ok 了。我这里面是写死的啊,写死的,当然你可以写的动态一些。我点克隆的时候,你看大香蕉来了,大香蕉来了之后呢,在克隆里面生成了一个什么呢?大香蕉节点 是吧?这个大香蕉节点的来源是上面这个香蕉,然后上面这个香蕉在点击的时候呢,他不会有事件啊,他不会有事件。哎呦,在这个东西因为我上面是写死的,他就没有那个事件,对吧?呃,什么叫事件呢? 我们在刚才做上面案例的时候呢,我这里是有个克令卡,就是说我在新添的这个东西一点击的时候,它是有一个这个克令卡操作的啊,克令卡操作的, 然后呢点克隆的时候,哎,他也被克隆进来了,要上面是 prp 啊,从上往下加这个是什么呢?从后往,从这个按后面的顺序去加,对吧?在后面去排队。所以你点这个 e 的 时候会发现,哎,这个 e 的 来源是上面这个 o l 列表当中的 e, 但是呢,上面这个点的时候,人有一个这个提示的效果,是吧?也说明什么了呢?它的这个事件是健全的标签是没问题的。 你下面这个呢,经过一个克隆的操作,然后你复制了它 first 的 第一个节点,就是把它第一个节点给它复制了,复制完之后呢,给它添加到我的这个新的 ol 列表当中去, 但是他仅仅是内容过来了,但是他这个事件没跟过来,对吧?他这个就不是一个完整的拷贝,如果说你希望做一个完整的拷贝,其实非常简单,你只需要传一个什么竖竖,是不是要带着这个事件进行拷贝,是吧?这个时候咱们刷新一下幺幺幺幺点, 然后这个时候呢,我要去克隆一下, ok, 他 过来了,过来之后呢,看我上面这个没问题,对吧?因为添加的时候我在里面绑定了一个时间和方法,是吧?然后下面这个再点的时候,你看,哎也过来了,对吧?他过来的原因是什么?你在克隆的时候不仅仅要这个节点的股价和样式, 他对应的这个事件和方法同样是被克隆,从一个什么新的版本同样要带过来,好吧,所以这个是克隆的方法使用的一个什么小技巧啊?好了,小伙伴们通过今天的学习啊,咱们学习了这一块瑞常用倒木操作当中关于节点部分的一个什么使用。那么本次课程到此结束,感谢您的观看, let's 下期再会。

移动端长上下文 ai 检测、内存优化,近期有需要前来面试的可以来领取一份面试宝典,各类面试题都有解析的。为内存中保留完整的 ai 长文本上下文数据。 但是在页面上居然有限数量的多目节点设定一个容量上限。例如,只允许存在二十个复杂消息节点, 当新消息到来或用户滑动某个旧消息时,将其加入 lru 缓存并渲染为真实动物。当动物数量超过上限, lru 会自动淘汰最久未被浏览的节点。 我们将这些淘汰的真实动物数据销毁去完成一个高度固定的站位符,以防滚动条发生剧烈跳动。 这里有个问题,为什么是 l r e o 算法?在 java 库中, bug 对 象的键值队是保留插入顺序的,我们可以利用这一点非常高效地实现 l r e o 算法。用户在聊天界面中最关注的永远是最新生成的消息以及当前正在阅读的消息, 那些已经划过去很久的历史消息,短期内再次查看的概率极低。动物被移除最大的副作用是会导致页面高度突然坍塌,页面发生回滚跳动。 在移出真实动物前,我们庆祝其真实高度。用一个等高的 d i v 站位对等芯片浏览器保持滚动平滑。看这样,在动物 l r u c 站位中,我们初次化了 classy。 利用 es 六 map 抵在一起特性,最先 set 进去的元素重在最前面。每次用 get 访问节点时,我们把它先 delete, 再重新 set, 它就变到了最后。在破解方法中,每次新增动物禁毒后, 都会检查 which 点 cost 点 size 是 否大于 which 点 capacity? 通过 which 点 cost k, 点 next 点 value 获取最老的节点 id, 并调用 vik 的 函数将它从 l r u 中移除。 evict 方法是处理多个地方,我们并没有把负极的抓拍删掉,而是强行设定它的 style height 为之前进入的真实高度,然后替换内部复杂的 inl html 为简单的文本, 在 simulate ai response 中创建积淀多彩的动画素,然后利用 request animation reflash 去把浏览器完成会之后获取真实高度,最后塞入 l r u。

网页预读助手 aint 如何突破插件进程通信性能瓶颈?近期有需要简单面试的同学可以来领取一份面试宝典,各类面试题都有 解决的核心思路就两个,开源与节流,不传递代码数。在 content script 则预先完成动物清洗,提取重文本,甚至通过哈希对比只发送增加文本。 摒弃单次请求的 client 点 retry send message, 改用基于端口的长链接。 client retry content 针对 ai 流式输出的特性,在 background service worker 中接管网络请求, 将接收到的 sse 数据流通过长链接源源不断地推送到前台。 global time send message 底层依赖微软引擎的结构化克隆算法,当发送三万字的网页上下文时, 主线层会被同步的虚拟化过程阻滞,导致页面的 f、 c p 和白屏时间恶化,渲染出现卡顿。 clear time connect 会建立一个 tcp 的 双向通信 port, 建立连接后后续的数据块传输,省略了反复握手和部分上下文封装的开销,极大地降低了高频流势更新的延迟。 mv 三规定 playground worker 是 无状态且易被休眠的,高频的长连接数据能有效地唤醒并维持 worker 的 活跃状态,防止 a s 卡到一半插件后台进程突然被系统杀掉。看看代码, 在 content script 中,通过 curl time click 抽象化一个名为 agent stream 的 端口, background 监听到音阶后将其保存,这确认了高速通信的基础。在发起请求前声明 abort content roller, 并设置十五秒已超时。 如果网络发起导致无响应,会主动 boss 请求,避免后台资源被永久占用。数据流返回时使用 text decoder 解码。由于网络传输的不可控性,一条完整的接省可能会被截断或者多条挤在一起。 我们引入了八 f 变量占存制复串,通过查找分割符来切割完整的数据帧, 确保前台拿到的是绝对合法的独立数据块。初一抗起捕获所有发起阶段和解析阶段的错误。通过长链接传回 type error, 保证前台 ui 层能感知到网络异常,而不是让用户一直看屏幕。安全 content script 只负责将压缩后的核心文本发送给后台, 随后通过监听 chang 事件高频驱动监 ritter u n 主线的局部旋,避免了主线层堵塞。

一入成本深似海,从此秀发看他人。大家好,我是安扣鸟,上个章节我们学习了这一块位的动画和事件啊,那么我们这个章节呢,我们要学习的是这一块位的 dom 操作,那么本次课程我们主要学习这一块位 dom 操作当中关于元素部分 api 的 一个什么基本使用。 接下来打开我们亲爱的 bios code 啊,早点录完代码早点回家下班啊。呃,在这里呢,首先看一个就是 value, 这个 vl 它对应的就是一个 value, 那 么什么和 value 是 有关系的呢? 树类的这个文本框,它的这个内容的值都是和我们的 value 息息相关的,比如说在这里呢,我们搞个 int type type pass, 这是一个普通的文本框,对吧?哎,这个是和 y 主相关的,或者呢,再搞一个什么呢?它是 y 的 密码框,这个也是和 v、 a、 l 相关的。那么它这种 api 呢,普遍是有两种使用的方式啊,跟我们讲的那个属性很像,就是 get 的 set, set 设置是负值,然后它 get 是 取值,但是呢,它们都用统一的一个什么 key 去代表啊,如果这个 key 的 给一个等号啊,右面赋给等号,左面这个是一个什么呢?对应的 set 操作,如果只有 key 没有值的话,它代表的是什么?是歪着操作,这个在我们 c 叉五当中有啊,这个是我们 c 叉五当中经常出现的实体类当中经常写的一种操作,那么在我们的这块位当中也是有类似的操作。好吧,好,接下来呢,我们来去随便写一下啊。首先我们用表单选择器, 我们先怎么样呢?我们先把它选出来是吧?先把它选出来,怎么选呢?冒号儿,然后呢? test, 然后给一个事件吧,或就是失去焦点的时候去做一些事情,好吧, 失去焦点,做一些事情,然后接下来给这个 pass word, 也给它套上 pass word, ok, 这刚加载的时候,我们给他负一个数值值啊,负一个数值值,把这个直接复制就 ok 了啊,因为他是赋值,是一个什么呢? set 操作,然后呢,这个取值是 get 操作,那 vl 当中呢?如果说你需要往里去复制的话,在这里面写参数就 ok 了。好吧,那么第一个呢,就给个一二三四五六吧, 然后第二个咱们随便给一个啊,他是位,然后写一个一二三一二三。好吧,就是因为加载的时候呢,到我们创建好了,然后执行这两个代码, 通过 v l 方法,对吧?往里面传字母串,这样的话给对应的两个所操作的这个文本框去进行一个什么赋值操作啊?咱们来看看它一个效果,就是给一个默认值呗,对吧?这个没有什么难度啊,没有什么难度, 接下来我们给他套事件啊,套事件,套事件意味着什么呢?就是当你失去这个焦点的时候,触发这个事件,然后呢我们去读它就 ok 了,对吧?读它就 ok 了,直接读就 ok 了,可以搜点 logo 把它打印出来,打印出来,那么读的时候呢,就是 get 操作,就是我不往这个括号当中全指 他默认的就是一个 get 操作,就是一个取式操作啊。这里面再来一个 pass away, pass away, ok, 大功告成了。好吧,通过这个 y 六,哎,参数全值,然后呢?不给 y 六中间的参数,就是一个什么取值操作啊?取值操作,好吧,好,先来刷新一下,好吧,然后一二三四五六,那这个就是一二三四五六加一二三四八四五六。然后这个时候呢,我把这个交点点到下一个这个密码框上, 那么对于我们当前的这个文本框,他就一个什么失去焦点了啊?在在在这里面给个六个亿, 然后我再点前面这个, ok, 就 出来了,好吧,就出来了,所以说呢,这个操作呢,就是关于我们 vl 的 一些什么使用方式,那么接下来讲两个比较熟的啊,也是用处比较多的,第一个是什么呢? test, 第二个是什么? html, 它这个 test 呢,它对应的 就是我们 g s 当中的这个 inner test, 就是我们元素所包裹的什么文本内容部分的一个什么这个内容啊内容。然后接下来还有 excel, 它包含的是什么呢?它是我们 j s 对 应的是什么? excel, 这个是什么呢?我们标签里面所包含的文本加标签,它这个对应的就是标签中的内容啊,文本,标签中包含的文本,下面这个是什么呢?它是文本加标签啊,文本加标签。 如果说你只需要操作文本的话,对吧?那你用的是什么?上面这个就 ok 了。如果说你既希望得到它的文本或者标签复制的时候,希望它能把标签和文本统一复制进去的时候,这个时候咱们选择对应的 in the html, 就是 html 这个这个 api 就 ok 了。好吧, 那在这里咱还是要给一个小小的案例啊,咱们操作一下 button value button 啊,然后上面一个 hr 坏人搞一个 d i v 啊,这个时候呢,我现在希望点击按钮,是吧?点击按钮的话就是选择器表单选择器冒号 button, 然后呢,可拎克 点击一下,然后来一个 function。 好 吧,就是点击的时候呢,我现在需要做一个操作啊,我要给这个 d i v 当中进行一个什么呢?复制操作, 然后这个时候选中这个 d i v, 这叫什么?标签儿选择器,然后这里面给一个什么呢?叫 test test 对 应的是什么呢?对应的是这个 in there test 的 文本部分的操作啊,文本部分的操作,那么在这里呢,我给一个叫 hello word 的 啊, hello word, 然后这个时候咱们执行一下,看看结果。 我点击这个按钮的时候 ok, hello word。 哎,为什么有两个 hello word? 为什么有两个 hello word? what's wrong? 呃,这是什么意思? f 十二,瞅一眼啊, 元素 diy diy 里面就有一个 hello world, 但是显而这上面为什么还有 hello world? 哦哟,这个默认帮我们生成了一个 diy 啊,这个,这个是个 diy 啊,它是默认给我们加进去的这么一个东西是不是?哦哟,这个不,不需要它给我们加上去啊,在这里搞个 id 选择器吧 id 选择器, 他帮我们生成了一个这样的操作是吧?生成了这样的一个操作啊, d i v 一 框成 d i v 一。 好吧啊,这个时候执行就应该是丝滑一些了,是吧?点击一下,哎呀,这,这里,这里没有东西了,是吧? id 选择器啊, id 选择器。 刚才是不是这块是默认版本给我们加了个 d i v 操作是吧?它是个隐藏的,不知道它想存什么东西,因为在用前端框架的时候它经常带这些东西,是吧?自作多情的帮我们去做一些事情 啊,这个时候就 ok 了,是吧?因为我们发现什么呢?你看它上面生成的是这个,对吧?生成这么一个东西,这个是一个关于布局有关系的一个东西,是吧?所以这个是一个 d i v 标签,然后你下面这个还是个 d i v 标签, 如果你用标签选择器的话,你就选中两个,这样,所以说上面带一个,下面带一个,好吧?那个给他用这个,咱们不需要去关心他,好吧?咱只管我们自己写的这个就 ok 了,就在这里呢,我们找到了这个 d i v, 然后呢通过 text, 它对应的是 in 的 text, 在它标签当中包裹的文本啊,文本换成了一个什么呢? hello world 啊,换成了 hello world, 就 这么简单的一个操作,好吧。然后这个时候呢,如果说你希望有一个简单样式的话,然后在这里如果你用 h 一 再写 h 一, 对吧?标签加文本的形式,这个时候你再去点击一下,会发现它把整个标签都显示出来了,因为它适配的是内容,它觉得你给我的也是内容, 我就给你显示内容,没毛病啊,对不对?如果说你希望有一个什么呢?你希望他是有一个标签加文本操作的话,标签是可以适配成效果的,然后呢该显示文本,显示文本,对吧?就是效果标签加文本加内容这样的一个情况, 这个时候再一点击, ok, 完全可以适配啊,完全可以适配,如果说我这里放张表格可不可以?可以啊?但这里面有一个问题啊,如果说你这种断行跨行操作,对吧?他这个里面就适配不了了,这个有点像我们的这个,像扎扎那个感觉,是吧?像扎扎那个感觉, 它每一个拼行之间都能用加号去进行一个链接,是吧?但是这个写法肯定是不方便的,在这里呢,我们可以用一个前端的繁衍号啊,用一个前端的繁衍号,繁衍号,繁衍号,写个繁衍号,因为有这个繁衍号呢,它就可以进行一个什么 跨行操作了,是吧?跨行操作了啊,繁衍号有了,然后接下来给来个 table 啊, table, 我 们在这里塞一个表格,对吧? bolder 等于一,你看这样的话跨行就很丝滑了,跨行就很丝滑喽, t r t r, 然后行有了,来这三个 t d 啊, 这里面写个序号,姓名,好,再来个年龄 一二 a b 二十二二六。好吧,就是点击按钮的时候呢,我把这些标签加文本这样的内容注到我们这个 d i、 v, 它的什么内部啊?内部,然后做一个最基本的这样的一个效果的显示, 效果也是 ok, 非常的丝滑。所以其实这样这样的方法用的还是比较多的,比如说我们在我们的外部接口里面去拿到一组数据,是吧?拿到数据之后呢,我们需要拼凑,拼凑出一个什么呢?就是我们客户想要的一个样子,或者我们想实现的一个试涂效果, 这个时候完全可以拼,哎,这才能拼起来又没有压力,你要不在你们的那个外部后端去拼,要不在前端去拼都没有问题,是吧? 拼完之后呢,哎,直接把它放进去显示,这样就 ok 了,对吧?样式都可以拼进去,非常的丝滑啊,非常的丝滑,这个就是关于什么呢?咱们这一块儿常用到我们操作当中关于元素部分的一个什么 a p i 的 一个基础使用啊。好了,小伙伴们,今天的课程到此结束,感谢您的观看,让我们下期再会。

二零二六,欧总还能不能做?这是很多人关心的问题,咱们今天这期视频呢,会通过一些官方数据,个人经验,跟大家聊一聊二零二六年欧总到底值不值得去做,以及我们具体要怎么做。首先呢, 他依然是值得去做的,但是这个玩法得变。我们先来看几组官方数据,二五年欧总的活跃卖家数量达到了六千零五十万人,相当于其实有一半的俄罗斯人,他是在省欧总进行购物的,同时呢,欧总的基本盘他是非常稳的,并且呢流量的红利依然存在。 接着呢,我们再来看一下去年欧总双十一的一个数据,从十月二十三到十一月十三日,整个双十一大促期间呢,来自中国的订单数量突破了两千八百七十万亿,从这个数据能看出来,俄罗斯人他其实也是比较喜欢来自中国的一些商品。 第二点呢,是欧众的物流基建非常完善,我们国内基本各大城市会有欧众合作物流的揽收点,那咱们卖家出单以后呢,直接把这些货发到揽收点,揽收点收到货之后呢,帮我们邮寄到俄罗斯,所以呢,这个物流非常方便。同时呢,如果说遇到退货或者是拒收,我们也可以退到海外仓,如果说商品状态完好,那他还可以再进行二次的销售。 所以总的来说,欧总整个物流基建非常的不错。那么就是最后一点,欧总他对新手非常友好,试错成本很低,目前呢,只要是有营业执照就可以注册开店了。所以呢,通过以上三点来看,二零二六年欧总当然是值得去做的,但是呢,在玩法上会有一些变化, 目前呢,欧总是已经过了疯狂上架突破就能出单的时代,现在的欧总呢,他需要的是精细化运营,这才是我们生存下去的关键。所以呢,对那些又懂选品又会运营的人来说,做欧总的机会依然非常的大。好了,那我们这期视频呢,就先到这里了,关注我们下个视频,再见。

你的 code agent 订阅没改几个 bug, token 配额就超了。检查下你的使用方式,百分之六十五的 token 都可以省掉。分享给你五个技巧,今天就能用。大家好,我是 luke, 一 起来实践下 code agent 节约 token 的 技巧。 订阅的 token 配额是厂家定的,你改不了,但 token 稍多快是你可以控制的,你与他交流的方式是关键。 ai 编程助手的默认风格,总想把问题给你解释得清晰完整。问一个 bug, 他 给你五百字的解释,但你真正要的只是修复问题。 这个差距,每次对话都在浪费 token。 第一个技巧,简洁模式。 github 上有几款开源工具,比如 caveman, 能给你的 cold agent 套一个简洁壳,它会让 agent 减少啰嗦,只给你关键信息,状态栏会显示累计。节省 token 这类工具的仓库里通常都有。奔驰 mark, 在 十个真实任务上测试简洁模式,可以大幅压低输出, token 平均下来可以砍掉百分之六十五的输出。 不过简洁模式不是万能的效果,最差的代码重构只能节约二十二个百分点。判断标准很简单,你要的是一个确定性答案,还是一个探索性讨论。前者开简洁模式,后者保留描述的完整性。 如果你用的是网页版,或者不想装插件,最简单的方案就是在提问最后加一句话,用最少的字回答,只给关键信息,可以达到类似的效果。 第二个技巧,单任务对话。很多人习惯一次问好几个不相关的问题,认为这样效率会比较高。但实际上, agent 要给每个子问题都生成回答,输出长度被乘以 n, 关键是这段长回答会被上下文整段记住。后续每次对话追问都要一起重传。 假设每个问题 agent 给两百次的回复,一次问三个问题会输出约六百个词,后续对话都要加上这六百次 拆成三个单任务,每次两百次,不相关的上下文就不会持续累积。 agent 也更聚焦实测,能省下二十到三十个百分点,前提是问题本身要足够清晰,还没想明白的探索阶段,不建议这样拆分相关的问题。 第三个技巧,精简 agent 配置文件。大部分 code agent 都有一个固定的项目配置文件,每轮对话启动时会自动加载文件的开头部分。这意味着如果你写了一堆用自然语言描述的技术规范和细节,这些文字每轮对话都在被重新发送。 怎么精简两个方案?先说手动的自然语言,改成关键词,把我通常使用 react 和 type script 进行开发,改为 react 加 type script 就 够了。 然后删掉不常用的规则,把重复的信息合并掉。第二个方案,用工具自动压缩,比如 caveman 自带的 compress 命令,能自动重写配置文件,同时保护代码快 url 和文件路径不被破坏。 实测五个配置文件的压缩效果平均削减四十六个百分点,最多的一个从七百零六字节压到两百八十五字节。关键是这不是一次性的节约,每轮对话都可以从更小的上下文开始节省的 token 是 持续累积的。 第四个技巧来自一个反直觉的研究发现,二零二六年三月, arc safe 上发布了一篇论文,这个作者测试了三十一个模型,从五亿到四千亿,参数覆盖了一千四百八十五个问题。 核心发现是在百分之七点七的测试问题上,大模型比小模型差了将近百分之三十,原因是大模型自发产生永常回答,过度展开反而引入错误, 加上简约约束之后,准确率提升百分之二十六,性能对比被完全逆转。换句话说,你约束 agent 的 输出,它不是在偷工减料,它是在变得更准确。 大部分 code agent 都有一个环境变量,用来控制 context 自动压缩的域值。社区分享的经验值是设为四十万 context, 超过四十万 token 时会自动触发压缩,不主动设这个值, agent 会尽量用满整个窗口在压缩, 但越接近上限,模型就会越慢,越容易出幻觉。第五个技巧是和使用方式无关的,直接在提问里加上对应的压缩指令。下面这五个场景实测是有效果的。 一、改代码时,只给改动部分,不要完整文件。二、查事实时,只给结论,不要解释过程。三、设计方案时,列三个要点,每个不超过两句。四、分析问题时,先给根音,再给修复方案。五、日常提问要求用最少的字回答。 前面介绍的五个技巧可以按自己的使用场景来实践,最简单的纯提示词优化技巧。一和五,加上简洁和压缩指令,零成本。 如果是在一个具体项目里,可以尝试精简 agent 的 配置,文件设置自动压缩,长期养成习惯,单任务对话累积效果最大。核心观点再说一遍,省 token 不是 少用 agent 的,是换种更高效的方式, 同样的需求更少的 token, 更好的结果,这就是今天的全部内容。我是 look, 我 们下期见。

今天是二零二六年的四月十一号,那如果说想了解浏览器自动化,基本上你就得去要了解 cdp 到底是什么, brother use 和 playret 到底是什么关系, brother mcp 又是干嘛呢? 如果我想让 ai 来操作我的浏览器,比如自动发布视频至各大平台,过程中遇到一些登录态的问题 该怎么解决?然后页面结构中可能会遇到沙粒 dom, 也就是影子 dom 这种普通话自动工具,抓不到他又点不动的页面结构,哎,该怎么去处理? 我今天正好做一个多平台同步发布视频的自动化 skill, 小 红书和抖音整体上还算顺利,把发布的视频流这发布视频的整个流程给拆清楚之后,然后让他用 bug 去执行,基本上都能够跑通跑起来。 但是真正卡住的是视频号,因为视频号后台有一部分页面结构是用了无界的沙林 dum 结构,你从视觉上看,哎,那个是发表视频,他就在那里,但是很多基于 dum 的 自动化工具他就是拿不到,或者说特别的不稳定。 因为之前做过一些 ipa 相关的项目,知道自己也有一道基于 ai 多模态的方案,是 media cine, 后来就换成了他。他本质上不是先理解底层的盗墓结构再决定怎么点,而是先去理解整个页面截图里面到底有什么什么元素在什么位置,什么按钮在什么位置。知道位置后,接下来他还是利用底层操作浏览器的工具去执行。 其实整个过程我发现其实里面还有很多概念和术语,然后就想着把这些概念从底层的 domain 到最上层的一些框架和应用,把它给整理梳理一下,然后也分享给大家,希望对大家有用吧。 其实最核心的底层还是 chromium, 你 可以把 chromium 理解成一个浏览器的底座。谷歌的 chromium 是 基于它做出来的 ad 级和 brion, 这些浏览器本质上也都是在这个体系里。所以当我们说浏览器做动画的时候,很多时候我们真正操作的并不是整个网页本身,而是 chromin 浏览器对外爆出了一套能力,这套能力最核心的一个东西就是 c d p, 它全称叫 chrome d v taurus protex, 你 可以把它理解成浏览器对外开放的一套远程操控协议, 就是你要操作我的浏览器,我给你开放能力,然后你来操作,然后通过这套协议,外部的程序就可以 让浏览器做很多事情了。比如打开一个页面,执行 js 脚本,读取 dom, 监听网络请求,获取控制台的日期截图,输入文本,点击元素,甚至接管 tab 和 tab 里的生,整个生命周期 都可以。那有了这个开放的接口协议之后,下一步自然就是得有人把它更方便的给用起来。 于是就有了像 c d p 柚子啊这种东西。你可以把 c d p 柚子理解成一个更贴近 c d p 协议本身的客户端的一个封装啊。这是底层协议,协议完了之后,它有一层客户端的封装, 它负责呢,建立连接,发送命令,接收事件,管理他该着和筛选。这个层级已经比自己要手写协议要好了很多了,但是呢,它还是偏底层的, 直接拿它去写完整的整个业务流程,细节会很多,操作起来也很麻烦,比较重。然后呢,这个时候就有了在上一层的 popular 和 playret 这种更高层的浏览器自动化框架 啊。 popular 更早一些,和 chrome、 chrome 这条线的关系也更近,所以很多人第一次接触浏览器自动化就是从它开始。 playware 呢,其实会更完整一点,等待机制,多上下文,多标签这些能力也更加的系统。所以如果今年是从零开始做一个稳定的众动化项目,我自己的形象还是 playware, 你 可以粗暴理解成它们都是比 c d p 柚子更高一层的工程化封装 框架,只不过在成熟度和使用体验上各自重新不太一样。那 brad 的 柚子又是什么呢? lebro 柚子,它是不是要替代 play, 也不是要替代 cdp? 它更像是在上面一层包了一层,专门为了 ai 和 a 进程这种使用方式设计出了一套更对 ai 更加友好的 c o i 命令行。 它想解决的问题不是浏览器能不能点,而是 ai 该怎么更顺手的去操作浏览器。 你会看到它强调的就是 open 啊, state 啊, click 啊, input upload 啊, script script 啊 这些动作,本质上是在把这些浏览器的能力整理成一组更适合智能体逐步调用的命令。这也是为什么用 brother 柚子去做小红书、抖音这类平台上传行政其实会更加的顺手。 ai 先 open 一个页面,然后看 c 列的元素,然后再刻立一个上传再音符的标题和内容,最后 screenshot 给人确认。整个流程非常符合 a 阶的主播执行的方式,而且 它在处理身份问题上也很实用。如果你不想去处理这个登录的操作,那可以基于它的 profile 这个命令去启动。它会去找系统里安装好的 chrome, 然后读取你本机的用户数据和 profile 信息, 把对应的 pdf 复制到一个临时的目录里,然后再拉起一个新的科目进程来跑速动画。也就是说,这个时候打开的科目是携带你的身份信息的,包括你之前登录的一些网站的一些库克数据,库克数据等等都会携带过来。 然后呢,这个 profile 里已经沉淀下来的是一些库克呀,本地存储啊和登了态登录态的一些数据。当然这也不是绝对的百分之百。如果说某个平台 特别依赖设备指纹,或者说做了更严格的封控交易,或者你的登录信息没有真正持久化到 profile profile 里,那他还是有可能要求你重新登录的。但大部分人普通的后台基本上就够用了,这条路就是能走通的。 那有了 browser use 和 play it, 基本上大部分场景都可以做到了。但是像视频号这种后台采用的 shardendown browser use 还是会出问题,总是拿不到对应的节点去操作, 这个时候你可能就得换另外一条线路去实现了啊。这也就是 mini c e 这种基于视觉的驱动方案,它是自己出的一款基于 ai 视觉驱动的 ui 自动化框架。它的核心思路不是先理解到再决定怎么点,而是 通过截图的方式,然后去分析每一个这个元素,它具体是在什么样的一个位置,拿到对应的位置之后,然后再去控制底层的命令指令去操作。 嗯,像点击发表视频按钮啊,描述输入这种这种话指令啊,就不必过分依赖底层的 dom 结构了,而是基于位置信息。 所以对于这种影子 dom 呢,结构 mid sight 会比纯 dom 做动画会更加的 靠谱一些。但是呢,它也有它的缺点,就是第一,因为它依赖于大模型的多模态 啊,去看看图,所以他很慢,因为中间多了一层视觉理解。第二呢,就是有模型的成本在里面,他不像纯到我们做动画那样成本会更低一点。然后呢,他也有稳定性的问题,有时候计算也会不准。 呃,所以他更多的场景像是一个补位。 嗯,前面说的这些,不管是 brother user 还是 playwrite 或者是 mid scene, 本质上大多都还是重新拉起一个 浏览器,或者是唤醒一个功能的进程,或者重新跑一个做动画的进程吧。呃,但是如果说我现在就想利用我自己本身装的这个浏览器,我就想让 ai 直接看到我当前浏览器正在发生什么,并且顺着这个上下文去继续操作, 那有没有办法?其实也有,就是官方最近出的一个叫 brother m c p, 它可以基于你当前正在使用的浏览器,把页面内容、盗版结构和操作的能力更加友好地暴露给 ai。 这样一来, ai 不 需要每次都重新打开一个浏览器,也不需要把整个浏览从头到尾再跑一遍,而是基于你当前打开的浏览器的一个状态, 再继续往下操作。那对于一些日常的携带码呀,排查问题,或者是调试前端界面,其实会非常的方便。 当然了, prada m c p 现在还不是很完美,对于一些看内容啊,或者是一些基本的输入点击操作是够用了,但是如果说涉及到像一些上传呐,或者是这种比较复杂的,还是场景不太够, 我今天试了一下,视频文件的上传还是不行。嗯,所以整个东西把这些概念术语连起来之后,你会发现它们之间是基于一层一层一层的 长出来的。最底层是 qq 这样的浏览器的底座,然后它对外暴露的核心能力是 cdp, 又有了像 cdp 柚子这样的底层公众化工装。 然后再往上就是 public 和 play 这种更适合开发者写自动化逻辑的框架,再往上才轮到 brotherhood 这种面向智能体工作流的风霜。而当当我们这条路不够用了, 又会分出 medium 这种视觉路线,或者 brother m c p 这种更贴近当前浏览器上下文的路线,去补补其不同方向的夺命。 以前很多浏览器能力是给人点的,是给开发者调试的,现在越来越多的能力直接为 ai 而准备的,或者至少是在快速变得更适合 ai 使用。好,今天的视频就到这里,明天见,拜拜。