说起来毕业以来一直在写前端,随便聊点有的没的,想到哪就写哪了吧。
最近的工作还是前端也不是前端,基本是背锅。比如:chrome 出 bug 了、iphone15 发热离谱、native 老哥的代码实现影响前端性能了等等。当然还有大部分是性能优化相关,想出一些有意思的 idea ,做下架构改进,偶尔 PUA 自己带的小朋友(苦笑,好像不太擅长)。整体来说还是个臭写代码的,性格自闭,估计以后也不会有啥长进;
一般来说,浏览器内的 bug ,前端研发要是敢说原因是浏览器或者 native ,别人一般会觉得:区区切图仔写 bug 就认,就知道乱甩锅。那就给证据嘛: a.用户说浏览器卡死,那前端写屎也只能弄挂 js ,后面抓浏览器 tracing ,V8 安安静静,那就是浏览器的锅啊。 b. 有老哥说 CPU 高肯定是前端写屎,我复现发现他那种场景下 webkit 就 GC 个没完,自己简单学了下 ios 开发弄个最小测试 demo ,还是有问题,那就是 webkit 的问题,不能怪我呀。 c. 前端渲染一直不出来,看不到 paint 事件,trace 一看,native 逻辑阻塞主进程,导致 webview 也无法绘制;还有一种情况,在某工业垃圾上无法看 tracing ,一个个原因猜,一个个测,最后跟 native 老哥分析前因后果,定位到问题。 这么来几次,大家也就觉得你是一名研发工程师
兜兜转转,换回几年前,我也不可能给证据给得那么流畅,最近我发现一个复杂问题丢给一些小朋友时,他们会表现得手足无措,但如果我有个教程让他们一步步做时,他们会学得飞快,而且做得比我还要好。其实很怪,这些小朋友其实都很优秀,比当年的我可聪明多了。可能是大家不怎么会分析一个“困难”的问题。
我的感受是这些需要将困难问题变成复杂问题(额,我们公司称这为思考啥的,有的公司叫方法论)。
就像自己的台式机没法开机了,但电脑上一共就:电源-主板-CPU-内存-硬盘-显卡,这几个硬件按顺序执行各自的工作,其中每个硬件都会干点自己的工作。那假如无法开机,那肯定就是看到哪个环节断了,比如:
开机没反应,那肯定是到电源,主板这一步就挂了,把这两个部件换一下试试;
开机 CPU 风扇转,那大部分情况电源-主板是好的,后面步骤有问题,那就试试换 CPU 、内存看看能不能好;
(这里方便举例省略了大量细节,比如主板 bios 有问题也是风扇会转,希望大家别纠结)
这个按链路排查的思维帮了我很多,特别是最近一个需求需要跟一堆后端老哥吵架,而且吵的是后端的细节,实际上我根本不需要知道他们的数据库用了 mysql 还是啥,网关是 nginx ,还是开发语言是 go 还是 rust ,我只需要理解需求需要几个环节,以及这几个环节中间能不能串起来就 ok 了,如果不能串起来,我就要给出一个方案说服他们。
这里困难的点是:我怎么知道链路是这样的?哈,这个跟智商都没啥关系。比如有些小朋友拿到一个新手机会开心得睡不着,将整个手机的设置页面都研究的清清楚楚,第二天连刷机怎么玩都弄明白了;比如有些小朋友将会花时间将我们项目的主流程摸得滚瓜烂熟,有些劝了半天也不为所动。至于这些行为原因是啥我真不好说,每个人都做出了自己选择而已。
如果说你按着执行链路排查了半天都没法效果,或者说知道原因但无法修复怎么办?有时候就像爱迪生发明灯泡一样撞大运,比如 CPU 转,其实可能 CPU 没事,是主板有事 ---- 为什么能发现可能是那个老哥实在觉得灵异,然后找了块新主板试了一下 CPU ,发现 CPU 好好的,就是主板有事。
那主板为什么挂了呢?为什么刷个 bios 就能好?那就回到了上面说的,主板的启动流程是什么。
但是日常工作中,等学习清楚主板的启动流程,老板早不耐烦了,对此我只能说念念不忘必有回响。比如查 native 导致的前端不渲染问题,我发现浏览器没触发 paint 时,我第一反应是触发 paint 需要一个 vsync 。然而前端开发基本不会接触 vsync ,甚至是 paint 。我能接触到仅仅是有段时间刷 b 站学了一点点计算机图形学。这应该就是所谓的积累,从量变产生质变,真没有啥捷径。
好了,就写这么多,写得也好乱。忽然感觉这就是写给我自己看的,给各位献丑了。
以后要是有机会招人,我可能会问一嘴:android 的开发者页面要怎么开?
冷知识:现在的 chrome 的内存管理做得远远比 safari 强,chrome 少 50%,甚至移动端 safari 内存占用也比 PC chrome 要高。
(本来是想吐槽苹果创造的(消音),没想到变成总结文章了,就年级大了不想引战。。。。。)
1
musi 308 天前 3
写了一堆没看懂,从找问题的链路能发散到小朋友拿手机然后又回到 cpu 然后又回到浏览器
如果你在工作中也是这么和人沟通的话我感觉和你合作应该挺累的 |
3
iOCZS 308 天前
android 的开发者页面要怎么开?你说的是连续点击安卓版本号那个?
|
4
WhoCanBeRich 308 天前 7
从你描述里确实能看出你是公司里在前线解决各类问题的哥们,但也看出了你的疲惫。祝好!
|
5
yingqiuQAQ 308 天前
没深入研究过,safari 不是 chrome 内核吗
|
6
HiCode 308 天前 4
很困惑 op 写了这么多,在 v2 能收获什么,我是站 op 的。
我前段时间跟老婆说,只要你学会最最基本的理性思维,遇到问题能够“以知识列出所有可能性,然后逐个检查测试排查”,就已经秒杀现实中大部分的人了。 我看了 op 写这么多,第一反应居然是,v2 网友可能大部分没耐心看,也看不懂。 |
7
musi 308 天前 1
@yingqiuQAQ ???
|
8
toneal 308 天前
就是一个面对自己不感兴趣的工作难题时的态度问题
|
9
fulvaz OP @HiCode 写得很烂,去哪都收获不到什么,就当给自己的成长路径做复盘了。
“最最基本的理性思维”我深表认同,但“就已经秒杀现实中大部分的人”让我震惊....感觉我要对自己做的事情要再 review 下,特别是那些我认为很简单的事情,可能是有复杂度的。 其实看不懂正常,做的东西太小众了 |
10
okakuyang 308 天前
看你描述,具体做哪一块的可以说吗?可以交流下,我以前做 webgl 的,可以交流下。
|
11
kneo 308 天前 via Android 1
糟糕无比的叙述……
语言能力的缺陷直接反应人思维的短板。你可能觉得自己排查问题有经验,已经悟道了,其实才初窥门径。建议你像 debug 一样重新审视一下自己写的东西吧。 |
12
zhouyg 308 天前
工作多年了很有既视感
|
13
Cola98 308 天前
op 的意思大概懂了,比如遇到一个 CPU 升高问题,先定位是那个进程,在判断是内核态还是用户态调用,在定位到具体代码,排除和试错,但是对于老板来说,他是不在乎的,只需要看到结局,就是 CPU 利用率下降了
|
14
jeesk 308 天前
第一个问题如果是客户端直接嵌入 chromium ,让用户骂你们. 开发也好排查问题.
|
15
xxbing 308 天前
写得好啊 作为一名前端计算机基本功这么扎实.敬礼!
|
16
guonaihong 308 天前
楼主描述的解决问题的方法,我一般称为“控制变量法”,a&b&c 都可能导致一个问题的产出,每次改变一个点,看下结果。这是初中学习电路,get 的一个方法论。
|
17
LandCruiser 308 天前
所以不能干前端,鄙视链最后一环。
|
18
theprimone 308 天前
Hybrid app 啊,还没玩过 😂
|
19
surfwave 308 天前
楼主还是先梳理好思路,然后通过文字准确的表达出来,让受众能够理解你的本意。
|
20
wu67 308 天前 via Android
这一大堆,不开 gpt 还真不知道说了啥...
|
21
AceDogs 308 天前 via iPhone
写代码有些部分就是把不确定性变成确定性的过程,即使运行时有 bug 那也要想办法解决啊,某种写法导致 CPU 高,想办法用不高的方式绕过啊。没有什么环境是完美的,这都是工作中需要解决的一部分。
|
22
edotac 307 天前
懂所谓的“控制变量法”的人,在看到第二段就共鸣了
|
23
Ethkuil 307 天前 via Android 1
有一本挺薄的讲调试的书,叫《调试九法》,我推荐 op 看看。相信你会喜欢的。
|
24
chicbian 306 天前
涉及到 webkit ,浏览器内核,gc 的问题,很多都需要原生去做优化的。直接甩锅完事儿了,一个月才几个钱,操心那么多干啥。
|