zhbhun 最近的时间轴更新
zhbhun

zhbhun

🏢  Pixocial
V2EX 第 77111 号会员,加入于 2014-10-14 14:45:08 +08:00
今日活跃度排名 14225
zhbhun 最近回复了
问题 1:"在网上查了一下,说是如果多个线程同时修改 DOM ,可能会导致竞态条件和不可预测的结果。但是微信小程序用的就是双线程啊?"
回答:微信小程序的双线程指的是逻辑线程和渲染线程,其中逻辑线程一样也是无法直接同步修改 DOM 的,需要通过 bridge 通信的方式告诉渲染线程来操作 DOM 。其实浏览器也可以做类似的事情,就是把逻辑代码放 web worker 来执行(类似小程序的逻辑线程),现在的 js 线程只接收 web worker 传来的信息进行渲染。社区也有人探索类似的方案,比如
https://github.com/web-perf/react-worker-dom ,就是把 react 搬到 web worker 上运行。

问题 2:“所以浏览器用单线程最本质的原因是什么?”
回答:个人感觉更多是因为早期 JS 就是个脚本语言,主打就是要简单易用,如果引入了多线程会变得更加复杂,当时也没有这个需求。

问题 3:微信小程序为什么要使用双线程?
回答:上面说的 react-worker-dom 虽然类似小程序采用了双线程,但是咋没有流行呢?主要还是因为浏览器的性能瓶颈在 DOM 的渲染上。如果要在浏览器上做一个类似原生应用或微信小程序的页面切换,很容易出现页面切换时卡顿的问题。如果有尝试用过 ionic 来开发 hybrid app ,你会发现页面的切换始终会有存在掉帧的问题,特别是页面 DOM 数量多了。而微信小程序直接每个页面就是新的一个 webview ,交给原生来切换。
另外,客户端那边操作 UI 也必须是在主线程上的,不允许在其他线程直接操作 UI ,客户端为什么更流畅,主要还是因为 JS 本身性能有差距,还有就是 DOM 的渲染性能比原生差很多。记得早起还有人尝试过放弃 DOM ,自己用 canvas 来做一套渲染引擎来优化渲染性能。
@lanbos +1 ,用 BAAS 、headless CMS 应付简单的 app 够用了,像 Cloudflare 和 Supabase 很香啊
133 天前
回复了 zhbhun 创建的主题 TypeScript TypeScript 类型推导真强大。
有哪位大佬知道 Kotlin 是否可以实现的吗?
133 天前
回复了 zhbhun 创建的主题 TypeScript TypeScript 类型推导真强大。
@hguandl 真的可以耶,感谢大佬!
134 天前
回复了 zhbhun 创建的主题 TypeScript TypeScript 类型推导真强大。
@hronro 试了下 rust ,确实支持,看来还是跟语言设计有关系。

```rust
fn with_logging<F, R>(args: F) -> R
where
F: FnOnce() -> R, // 接受一个闭包或函数,返回类型为 R
{
println!("执行函数之前的日志...");
let result = args(); // 执行传入的闭包
println!("执行函数之后的日志...");
result // 返回传入闭包的返回值
}

fn main() {
// 无参数函数
let no_args_task = || {
println!("无参数任务执行中...");
42
};

// 单个参数函数
let single_arg_task = |x: i32| -> i32 {
println!("单个参数任务,参数为:{}", x);
x * 2
};

// 多个参数函数,通过闭包包装来适配
let multiple_args_task = |x: i32, y: i32| -> i32 {
println!("多个参数任务,参数为:{}, {}", x, y);
x + y
};

// 调用高阶函数
let result1 = with_logging(no_args_task);
let result2 = with_logging(|| single_arg_task(21));
let result3 = with_logging(|| multiple_args_task(5, 10));

println!("无参数任务返回值:{}", result1);
println!("单个参数任务返回值:{}", result2);
println!("多个参数任务返回值:{}", result3);

// 最终输出
// 执行函数之前的日志...
// 无参数任务执行中...
// 执行函数之后的日志...
// 执行函数之前的日志...
// 单个参数任务,参数为:21
// 执行函数之后的日志...
// 执行函数之前的日志...
// 多个参数任务,参数为:5, 10
// 执行函数之后的日志...
// 无参数任务返回值:42
// 单个参数任务返回值:42
// 多个参数任务返回值:15
```
134 天前
回复了 zhbhun 创建的主题 TypeScript TypeScript 类型推导真强大。
@hronro 感谢!我去学习下 OCaml 和 Rust 。标题确实没拟好,想改的发现改不了了😭。
134 天前
回复了 zhbhun 创建的主题 TypeScript TypeScript 类型推导真强大。
@wlingxiao @dejavuwind 尝试用 Kotlin 写了下,没搞出来,让 ChatGPT 也说不行。主要是卡在 sequentialize 传入的函数无法是动态的,没有像 TS 提供 Parameters 和 ReturnType 来推导传入的函数类型,只能固定参数类型和返回值,这样就违背了泛化的初衷
134 天前
回复了 zhbhun 创建的主题 TypeScript TypeScript 类型推导真强大。
@jy02534655 是的,js 支持这种高阶函数的封装。但是 TS 加了类型后,也仍然支持,并且可以在编译时检查函数类型。所以有这个疑问,是否是因为像 JS 运行时支持这种写法才行,而 Swift 和 Kotlin 无法做到。
2023-10-20 10:06:28 +08:00
回复了 ChrisFreeMan 创建的主题 Node.js Web Components 2023 年 10 月份了,现在怎么样了
有用 ionic 开发移动端的混合应用,ionic 组件都是 web component 实现的,支持 angular 、react 和 vue ,因为使用了 shadow dom ,很多内部样式无法定制,还原设计稿的时候很痛苦,如果不定制的话,还是可以的。
2020-05-10 14:45:30 +08:00
回复了 chmod 创建的主题 问与答 安卓手机 chrome 相关
这个是点了按钮没反应窗口没关闭,还是点了允许之后定位不到当前位置。在国内用 chrome 定位应该走 gps,定位很慢,你用腾讯浏览器支持 agps,可以很快就定位到具体位置了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2797 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 09:05 · PVG 17:05 · LAX 01:05 · JFK 04:05
Developed with CodeLauncher
♥ Do have faith in what you're doing.