随便扯几个前端糟粕 ✅

2022-08-10 10:15:49 +08:00
 fulvaz

月经贴看到从 xx 开始学前端觉得不适。

哎,都没骂对点上,让我好着急,我来替你们说。

以下情况的语境都是浏览器上。(在 Node 想做啥就做啥,有什么好骂的

不支持多线程

eventloop 一看到巨型应用立刻躺平摆烂:“老夫不行了,你自己想办法拆任务到其他 frame 执行吧”。

好家伙,这是赤裸裸威胁,要么等久一点(递归 MessageChannel ),要么卡成狗(阻塞主进程),8 核 CPU 硬生生变成单核。

WebWorker ?整挺好,就是 IPC 通信也是要时间的,想想序列化一个对象意味着什么。

SharedArrayBuffer 这个不错,就是要想想怎么操作二进制。

瘸腿的异步任务管理

异步任务,比如 promise ,setTimeout 触发的,不去 monkeypatch 或者改业务代码根本不知道他们要执行多久,什么时候开始执行。

ok ,大型应用一堆业务一起做异步任务,哦吼,卡成狗。

面对一堆无法感知的任务,在风中凌乱。

无法监控的 OOM 和卡死

懂的都懂。

我觉得,如果一个开发愿意舔着脸求客户提供 chrome 日志去查问题,那么雇佣这个开发的企业应该给他发双倍工资。 ( PS:我没求过)

如果那个开发还能分析 chrome 日志并定位问题,那么应该给他发三倍。

多出来的一倍拿去植发。

可能 chrome 老哥觉得重启挺好的。

其他 (给某些老哥的素材)

求求了,什么时候有优先队列?都叫 java ,怎么多了几个字母还变菜了,是不是写前端的数据结构不会用? (狗头保命

PS:别骂 0.1+0.2 = 0.30000000000000004 了, 当年都不知道是谁这么腹黑,放这么直的钩。

就酱,希望大家在前端娱乐圈玩得开心~

11466 次点击
所在节点    程序员
100 条回复
fulvaz
2022-08-10 14:14:01 +08:00
@qrobot 哎呀,你没理解对。

1. 足够复杂的业务构造 fiber 树的计算量不比音视频小。 我骂 js 不支持多线程需求,肯定是因为有需求需要共享内存+并行,上下文切换的开销怎么会没想到呢。
2. performance 查看。你想得太简单了,线上问题没路径你怎么复现?你最多能用 worker 做心跳发现有问题,却不知道哪里有问题。另外心跳的开销要不要考虑?

其他提的问题首先去骂库克,为什么要弄 WKWebview
fulvaz
2022-08-10 14:15:18 +08:00
@fulvaz 还有别问为什么要用垃圾 react 不直接干 DOM 。一时半会我改不了。
qrobot
2022-08-10 14:31:15 +08:00
@fulvaz 如果是为了构建 fiber 树,例如做 react 或则 vue 这种框架,本身的 eventloop 性能完全足够. 共享内存本身就是一个非常错误的一种解决方案, 共享内存就存在 lock 的问题。其次日志的问题难道不应该先记录到 indexdb 之后在空闲的时候上传到服务器


performance 就能很好的分析内存泄漏的原因, 通过记录用户的操作方式就可以正确的复现出来对应的内存泄漏问题。 如果一直都复现不出来问题, 建议直接联系客服

其次你要是真的觉得 js 的性能你不满意, 欢迎来到

1. (C/C++) Emscripten
2. Rust
3. Go
4. Kotlin
5. Swift
6. D
7. Pascal
8. Zig
9. Grain
10. C#
11. F#
12. gtk

你会其中一门语言就可以达到你说的, 支持多线程,没有瘸腿的异步任务管理。 这些都是可以运行在浏览器端的
qrobot
2022-08-10 14:32:05 +08:00
@fulvaz 然后你换个其他语言,写到最后发现 嗯,JavaScript 真香
qrobot
2022-08-10 14:44:18 +08:00
@qrobot 最后发现 嗯,eventloop 真香. 我跟你举个例子。

我是不是可以使用多线程来执行代码? 嗯, 是的可以用多线程,来进行共享内存

Yes , 我写了一个多线程来来操作内存,但是我发现内存会被其他的进行修改, 我感觉很苦恼
Yes , 我写了一个 Lock 可以锁住这一块内存, 来控制多线程访问的问题,但是我发现了速度很慢
Yes, 我写了一个 Lock-Free 大幅度提高了锁的性能问题,但是我发现不停的创建线程,销毁线程。 这样消耗很大
Yes , 我写了一个线程池来解决了线程销毁和创建的问题, 但是我发现,如果 IO 很慢的情况下, 线程就会被占用,导致一个请求就一个 IO 这样程序太慢了。
Yes, 我写了一个微任务解决了这个问题, 这样我可以在一个线程上执行多个任务, 这样线程就不会被 IO 阻塞了,我很开心的解决了这个问题, 并且设计出来了, 我给他取了一个好听的名字叫做 Microtask, 和 Microtask queue 。并且给了一个 Work 来单独的执行其他线程的问题。 但是 Work 的开销太大了, 并且没有多线程,共享内存
YEs, 我写了一个多线程来来操作内存,但是我发现内存会被其他的进行修改, 我感觉很苦恼
LinYa
2022-08-10 15:05:34 +08:00
fulvaz
2022-08-10 15:21:13 +08:00
@qrobot 哎,无聊

我有个需求适合多线程+共享内存来写,也没现成安全问题,你说这玩意不好。

- - 你是来吵架的吗
jamosLi
2022-08-10 15:27:29 +08:00
他本来就只是一个两缸的拖拉机,虽然魔改的很厉害,但是你成天说他没有卡车拉得多,没有跑车跑得快。到底是他菜。还是你有什么不对劲
qzhai
2022-08-10 15:55:17 +08:00
我觉得你看的教程太老了。
你说的这些问题除了极个别的,其他放在现阶段都不是很致命的问题。
前端的优势就是多端。这是其他任何语言都没办法颠覆的。
能解决用户问题的语言才是最重要的。
其他的都不重要。
DICK23
2022-08-10 16:01:00 +08:00
感觉 OP 说的挺有道理的,光一个优先队列就感觉 JS 低人两档
Robertwhite
2022-08-10 16:24:19 +08:00
存粹好奇楼主是做什么业务的,到底是啥复杂的场景...
essicaj
2022-08-10 16:56:30 +08:00
eventloop 性能足够好我真是难以苟同,像网页打开大表格,全局搜索,批量替换场景。分分钟就卡死了 eventloop ,然而这种大数据又没办法很快速地在 WebWorker 中同步
hangbale
2022-08-10 16:59:43 +08:00
最大的问题: 受限于浏览器
hLc1
2022-08-10 17:34:42 +08:00
@essicaj eventloop 和密集运算有啥关系?快速同步啥意思?
hLc1
2022-08-10 17:37:43 +08:00
异步任务管理为啥需要知道什么时候开始?什么时候结束?
DrakeXiang
2022-08-10 18:06:19 +08:00
单线程和任务管理这两个难道 node 里面就没问题?如果 node 没问题,为啥浏览器会有问题。另外 js 当初设计就不是为了执行你说的这种复杂任务的吧,java 当年也可以在浏览器里面执行,不还是被淘汰了
belowfrog
2022-08-10 18:40:59 +08:00
@lambdaq 现在有 tarui 了,用系统自带的 webview ,挺好的
agagega
2022-08-10 18:48:47 +08:00
多线程要安全要么像 Rust 严格检查所有权,要么学 Swift 把 actor 和 async/await 结合到一起。传统方法必然会出问题
Shiu
2022-08-10 19:09:44 +08:00
Brendan Eich 拉了一坨屎,多年之后他们开始在屎里面盖房子了
luguozmy
2022-08-10 20:17:34 +08:00
这槽吐得连台湾政客都不如,也是酷炫

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/871848

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX