Author Archives: jkl

Label对Drawcall的影响测试

众所周知,drawcall的数量是影响CocosCreator流畅度的一个重要指标,本文主要测试Label与Sprite混排时对性能的影响,主要有下面几个对照量:
1. 运行环境,共三种:
    a. mac端chrome浏览器(开启开发者工具、尺寸模拟iphon12pro)
    b. iphone(8plus)自带浏览器
    c. android(其实是鸿蒙、麒麟820/6G运存)自带浏览器
2. Label属性CacheMode,这里节选一下官方文档:
    a. None: 默认值,Label 中的整段文本将生成一张位图
    b. BitMap: 选择后,Label 中的整段文本仍将生成一张位图,但是会尽量参与 动态合图。只要满足动态合图的要求,就会和动态合图中的其它 Sprite 或者 Label 合并 Draw Call。由于动态合图会占用更多内存,该模式只能用于文本不常更新的 Label
    c. Char: 原理类似 BMFont,Label 将以“字”为单位将文本缓存到全局共享的位图中,相同字体样式和字号的每个字符将在全局共享一份缓存。能支持文本的频繁修改,对性能和内存最友好……不能参与动态合图(同样启用 CHAR 模式的多个 Label 在渲染顺序不被打断的情况下仍然能合并 Draw Call)
3. 节点形态:每一个精灵节点下,加一个Label子节点;精灵节点简单转动或摆动;Label仅显示数字,使用系统字体;测试过程共分三种情况:50/200/1000个节点
4. Label节点除了会修改CacheMode,还会尝试两种情况:不修改文案内容、每秒修改一次文案内容
基本的测试要素就是上面这些,下面来看测试结果

简单总结几个结论:
1. 就像文档里说的,对于固定内容的Label,BitMap确实对性能有巨大帮助,可以通过合批最大程度减少Drawcall
2. 对于Label和Sprite混排的情况,文本如果还要频繁更新,性能必然会受影响,如果预期这类节点数量很多,一定不能这么做
3. 虽然测试用的chrome浏览器已经开启了硬件加速,但或许是对m1mac的适配不好,这次测试chrome浏览器的表现完败,甚至不如六年前的iphone手机。(试了一下mac自带的safar浏览器,表现和iphone手机浏览器差不多)
那么,针对上面提到的第二条,如果确实需要大量、频繁更新的文本,应该怎么办?看文档大概有下面两种解决方案:
1. 使用艺术字图集代替系统字体
2. 将Label节点提出来,不要和Sprite混编
后续有时间试试这两种方案的效果 o(* ̄︶ ̄*)o
————
转载请注明出处:http://www.jiangkl.com/2023/04/cocos_label_drawcall
————
补充:
继续上面的话题,按照第2个解决方案对项目做了“优化”,也就是将所有的Label提取出来,单独放在一个节点了,和Sprite区隔开,测试结果:
1000个节点的情况下,三个端都能轻松运行,FPS 60,Drawcall 5,成功将1000个Label合批到一个Drawcall!

闪展腾挪,只为避开apply

apply是pandas一个强大的工具函数,可以逐行对数据进行操作。pandas的优点很多,比如代码简洁、相对直接遍历效率更高;但它的“效率高”是相对的,相对于merge之类的操作,apply的执行时间可能会高出两个数量级。比如下面这行:

1
2
  #为订单数据集增加以后一列:微信支付的金额
  df['pay_wx'] = df.apply(lambda x: (x.pay if x.chan == 'wx' else 0), axis=1)

从上面的代码看,逻辑非常简洁,但是实际测试,50万的数据量,要20秒。下面尝试改造一下

1
2
3
4
  df_wx = df[df['chan'] == 'wx']
  df_wx.rename(columns={'pay': 'pay_wx'}, inplace=True)
  df['pay_wx'] = df_wx['pay_wx']
  df.fillna({'pay_wx': 0}, inplace=True)

代码从一行变成了四行,不过执行效率可以高很多:50万数据,时间大约0.7秒
当然,方法不止一种,对于更见的判断条件,可以直接用merge操作:

1
2
3
4
5
6
7
8
9
10
  #合并某项分类依据
  df['color'] = df.apply(lambda x: ('红' if x.color == '粉红' else x.color), axis=1)
  #使用merge优化
  df_h = df[df['color'] == '粉红'][['id', 'color']]
  df_h['color'] = '红'
  df_nh = df[df['color'] != '粉红'][['id', 'color']]
  df_hs = pd.concat([df_h, df_nh])
  df_hs.rename(columns={'color':'color2'}, inplace=True)
  df = pd.merge(df, df_h, on='id', how='left')
  df['color'] = df['color2']

通过上面这种方法改造,执行时间和第一个方法接近,50万条数据大约0.8秒

———–
转载请注明出处:http://www.jiangkl.com/2022/12/no_apply

峨眉山

记得读高中时,有个爱看武侠的同学,每次见到我都会来一句“你怎么不叫蒋峨眉?”

哈哈,对于大部分非四川的同学,估计都是在“倚天屠龙记”里第一次听说峨眉山,而且大概率是李连杰电影版的倚天屠龙记——“围攻光明顶”可算是金庸武侠的名场面之一。不过,小说里的光明顶在昆仑山,可其实光明顶在峨眉~~O(∩_∩)O哈哈~。另外,小说里峨眉派是道教,可现实是,魏晋时峨眉确实道教兴盛,但到了隋唐,佛教盛行,到明清时,峨眉基本就只有佛寺了,而且成了传说中“普贤菩萨的道场”。再到当代,更是“佛教四大名山之一”,山上分布着大大小小十几处寺庙

这次出来,本来目标是“318国道-拉萨-珠峰大本营”一线,顺道去了张家界和黄山,既然路过四川,也就顺便把峨眉山也逛了。从张家界到峨眉山市,又是一千公里,一天时间刚好。

峨眉山月半轮秋,影入平羌江水流。
夜发清溪向三峡,思君不见下渝州。
——李白 《峨眉山月歌》

峨眉第一亭

峨眉山

一首隔壁眉州老乡的思乡词

归去来兮,吾归何处?万里家在岷峨。
百年强半,来日苦无多。
坐见黄州再闰,儿童尽楚语吴歌。
山中友,鸡豚社酒,相劝老东坡。
云何,当此去,人生底事,来往如梭。
待闲看秋风,洛水清波。
好在堂前细柳,应念我,莫剪柔柯。
仍传语,江南父老,时与晒渔蓑。
——苏轼 《满庭芳·归去来兮》

山亭

万年寺

接引殿

洗象池

清音阁

一线天

一线天,换个角度

金顶

当然,峨眉山最有名的,还有它的猴子

峨眉猴

峨眉猴

最后,来一首李白版的“月亮代表我的心”

我在巴东三峡时,西看明月忆峨眉。
月出峨眉照沧海,与人万里长相随。
黄鹤楼前月华白,此中忽见峨眉客。
峨眉山月还送君,风吹西到长安陌。
长安大道横九天,峨眉山月照秦川。
黄金狮子乘高座,白玉麈尾谈重玄。
我似浮云殢吴越,君逢圣主游丹阙。
一振高名满帝都,归时还弄峨眉月。
——李白 《峨眉山月歌送蜀僧晏入中京》

 

 

张家界

千丈绝壁挂金松,万尺深涧锁玉龙。
百仗留得佳话在,两壁对插白云中。
—-宋·佚名《咏张家界》

行者无疆,告别美丽的黄山,再次踏上西行之路~~沿高速一路向西,一口气开出近1000公里,来到了湖南张家界。第二天一早,先来到武陵源景区……再次被大自然的鬼斧神工所震撼。

 天子山

峡高百丈洞云深,要识桃源此处寻。
戎旅徐行风雪紧,谁将兴尽类山阴。
—-明·胡桂芳《咏百丈峡》

袁家界

索溪峪

十里画廊

缥缈云烟画卷开,凝香染墨净尘埃。
幽姿淑态呈祥瑞,水色山光着眼来。
百鸟齐鸣深涧响,众仙恭立向王台。
千杯寻醉非虚幻,焉问刘郎谁与栽。 

金鞭溪

金鞭溪

黄石寨

寻常山里数青峰,玉笋成群插楚封。涧道冻云隐斜日,寺门长阪度疏钟。
古苔一望迷幽径,峭壁千年挂老松。玉垒匡庐曾浪迹,巨灵移岳此重逢。
—-明·夏子云诗

 武陵源景区面积很大,在里面整整转了两天,第三天,我们来到了隔壁的天门山和大峡谷景区

天门山

 大峡谷

 

大峡谷

…这张错了,这张不在地球上O(∩_∩)O哈哈~

游黄山

黄山四千仞,三十二莲峰。
丹崖夹石柱,菡萏金芙蓉。
——李白《送温处士归黄山白鹅峰旧居》

一早四点钟从北京出发,一路向南,一直到晚上八点,行程1300公里终于到达目的地:黄山汤口镇。一夜无话,第二天早早起来前往本次黄山游的起点:慈光阁

~~嘿嘿,节约点体力,先走索道直接到迎客松。记得小时候家里客厅挂的画就是“黄山迎客松”,今天终于看到真的了

迎客松

 天都峰

莲花峰

 鳌鱼峰

折腾一天,终于来到了光明顶~~哈哈,没错,光明顶不在昆仑,而是在黄山。下山休息太绕,光明顶酒店小睡一晚,一千多块…心疼ε=ε=ε=(#>д<)ノ

第二天,早早起来继续逛,开始进入后山

“猴子观海”

“飞来石”

始信峰

峰奇石奇松更奇,云飞水飞山亦飞。
——魏源《黄山绝顶题文殊院》

宽围白浪身千叶,峭入青天手一藤。
——汤宾尹《同友人游黄山》

人间多少佳山水,独许黄山胜太华。
——老舍《咏黄山》

且持梦笔书奇景,日破云涛万里红。
——《登黄山偶感》

 over~~奇美黄山之旅就到这里 O(∩_∩)O哈哈~