微信 Android 大陆版为什么不用 Chrome WebView 而用 QQ 浏览器?

2016-06-23 10:13:17 +08:00
 iugo

iOS 上, 微信没得选.

Android 上可以有多种选择:

  1. 可以跟随系统使用系统的 WebView. 弊端可能是国内环境乱象, 系统的 WebView 大多不是 Chrome, 可能更坑.
  2. 目前微信的做法, 使用自己的 WebView, 但根据 UA, 是 QQ 浏览器.
  3. 既然内置了, 为什么不使用 Chrome?

作为 Web 开发者, 在乎更先进的语法和 Web API.
微信既然想吸引开发者, 就应该在乎开发者的需求, 减少开发者的负担, 比如在适配上的工作量, Chrome 版, Safari 版, 再来个 MQQBrowser 版, 好累呦.

对我比较重要的几个东西:

还有样式上的一些奇怪的问题. 许多组件都不能重用, 只好针对微信再重新开发.

19803 次点击
所在节点    程序员
71 条回复
Felldeadbird
2016-06-23 16:27:04 +08:00
就是苦了开发者,开发者才不会失业啊。腾讯这是用心良苦啊。
iugo
2016-06-23 16:41:19 +08:00
@wzxjohn
@fyooo

附言 2, 不重复了.

另: @sagnitude 说到的蓝牙部分, 因为以前没接触, 所以很受教. 但其他, 我不觉得技术上有什么我之前没注意到的地方. 至于观点问题, @fyooo , 不是我先提起来的, 观点之争也不是本帖的目的.

> Safari webkit 不能用,老的 Android webview 不能用,楼主你就不该用 fetch ,这个组件本身就不应该被用作移动端开发

这是技术层面的吗? polyfill 的存在不就是为了让一些新技术能在老设备上兼容吗, 技术上何来不能用只说?

> 没有用户需求,就不需要开发者,开发者不是和用户对等的

这是技术层面的问题吗? 是不是方向性的问题?
wzxjohn
2016-06-23 16:55:45 +08:00
@iugo 搞了半天你是想问这个。。。这问题太简单了。
不管是之前有人说的 Android WebView 也要 Chrome 也好,你想要内置只能选择适配它,适应它。这时候内部有一个自研的内核,你想要什么别人给你做什么,而且以最快的速度配合你做好,请问你用啥?
iugo
2016-06-23 17:02:45 +08:00
@wzxjohn 我原来的帖子中已经说三点并且加了自己简短的分析, 没想到楼会歪.

我的手机是几乎原生的 Android 5.1, Google Play 上装的微信.

一些小玩意, 我在自己的手机上测试没问题, 可其他人的 Android 手机上都出了问题. 然后做了小范围 UA 调查发现大家的微信几乎都是 MQQBrowser 6 (好像也标了 Chrome 31)版本, 我的是 Chrome 51 版本.

微信有些地方还是会使用 Chrome WebView 的, 说明微信对 X5 并不绝对支持. 所以才有此一问.
xqinghu
2016-06-23 17:10:45 +08:00
@iugo 当系统不满足 X5 运行条件时(动态内存),是使用系统 weiview
morethansean
2016-06-23 17:13:50 +08:00
@iugo ……我是说上面那个人说的 2 , 3 点……不知道我们说的是不是一个东西……
不知道你所谓的 Chrome Webview 是啥意思,你是说基于 Chromium 的 webview 吗?
X5 本来就是基于 Chromium 的,和大多数壳浏览器一样。为什么会有壳浏览器就是因为他们想做些个性化改造或者实现一些自己的功能和需求呗。你所谓的更先进的 API blablabla 一大堆,说白了就是这些自己改造的 webview 基于的 Chromium 版本比较低所以功能不行性能不行。
然后我感觉你的口气好厉害啊……像是我什么地方冒犯了你一样……我重新读了几遍我的话感受了一下文字里的口吻,觉得自己跟个纱布一样回答别人的问题还被人喷没看清题也敢来回答问题简直就是浪费时间。我觉得我提问的时候,不管回答者说啥,都不会有这样的态度。
iugo
2016-06-23 17:31:10 +08:00
@morethansean ... 抱歉, 口气太厉害了. 对比起.

只是觉得自己已经说到的东西再被重新灌输, 要不就是没认真看文章, 要不就是把我当纱布. 所以带了戾气.

我又看了遍我的话 "重点在 2, 3 点的话. 我只能说, 请看清原文再继续讨论, 否则风马牛是互相浪费时间."

可能是我主谓宾分得不开. 第一个句号后面的话不是针对任何某一个人. 只是简单地认为, 对一个求教素菜如何烹饪的人, 植物种植专家讲食物如何有营养, 即便专家费心尽力, 可是对双方, 都无助益.

不针对任何人, 只是说这种行为对双方没有帮助.

如果我问题没描述清楚, 抱歉浪费大家时间了.
iugo
2016-06-23 17:31:42 +08:00
@morethansean 对不起. 没有校对文字...
Orzpls
2016-06-23 17:33:48 +08:00
刷份额,不知前面有人提到没有。
sagnitude
2016-06-23 17:34:40 +08:00
楼主你如果只是来吐槽,来骂这该死的内置浏览器怎么这么烂,没问题,我也想骂,各种排版不能用, WebGL 都不能用,简直坑爹,而且微信内置浏览器是提供 WebGL 接口的,就是调用之后没有任何效果,不是简直,就是坑爹。

但你抬头看看标题,标题是一个问句吧?


1. 所有 web 开发者都必须为每一个平台做 polyfill
2. 挑选一个弱一点但是在几乎所有机器上都能跑的版本,微信内置该版本的某浏览器,所有 web 开发者在这个基础上开发
两者中,我认为 2 是更负责任的

在附言中,你提到了一个前提:“ Android >= 5.0 ”,瞬间就少了 54.5%的用户 (数据来源: 2016/6/6 更新 https://developer.android.com/about/dashboards/index.html

使用系统 webview , web 开发者需要适配 如下浏览器:
Android 2.x Webview; (市场占比 2%)
Android 4.0-4.3 Webview; (20.8%)
Android 4.4 (Chromium 30); (31.6%)(增加 GeoLocation 、 WebSocket 支持)
Android 4.4.3 (Chromium 33); (包含在上面)(增加 Vibration API 支持)
Android 5.x (Chromium 37+); (35.4%)(增加了 WebGL , WebRTC , WebAudio , WebComponent 支持)
Android 6.x+ (>= Chromium 43) (10.1%)
我的手机目前是 Android 6.0.1 (Chromium 51)
iOS Safari (很多版本)
各种厂商自己做的奇怪的浏览器适配

使用微信 WebView ,开发者需要适配如下浏览器:
QQ X5 内核(提供基础 HTML5 支持,部分新特性如 WebSocket ,部分 WebGL 支持)
iOS Safari (没得选)
Android >= 5 的基于 Chromium 的 WebView

你觉得哪个比较简单?

为何使用内置浏览器(注意,微信不是“内置 WebView ”,是内置一个“浏览器内核”),而不是直接使用基于 Chrome 的 WebView
1. 54.5%的安卓机没有该功能
2. 然后就没有然后了

为何使用内置浏览器而不是使用系统 WebView 呢
你要谈技术,那就谈技术
举个例子, WebSocket ,我在 Android 4.1 的机器上,用微信可以使用 WebSocket ;而 Android WebView 只有 Android >=4.4 才支持 WebSocket
再来一个, Android 2.x 的 WebView 不支持 position:fixed 和 overflow:hidden ,你喜欢么?
安卓 webview 的坑很多,如果你真的做的话,你会后悔产生“用 polyfill 解决这些问题”的想法的

为何内置 QQ X5 内核,不内置一个 Chrome
1. Chrome 打包 zip , 50MB ,(比微信大)
2. 然后就没有然后了

你使用最新的语法,然后来兼容老浏览器,这除了给自己开发带来快感(和恶心感),还有什么其他的好处? polyfill 肯定是需要用原生实现来实现的(如果能实现),必然是有性能损失的。

关于你说的产品观,如果你是个人开发者,或者是个创业者,凭热情和自己的想法活动,或者说你面对的平台比较稳定,你这么做没有问题;如果是面向所有用户的公司行为,我认为稳定是高于对 bleeding edge 的技术的热情的

举个例子吧,我现在维护的项目里,有一个是针对我们在桌面应用内置 Chromium 浏览器的,版本统一是 Chromium 49 ,我可以在这里面非常自由地使用各种高级语法;而有另一个项目是针对微信用户开发的,开发的时候自然就得小心谨慎

微信是一个商业产品,做出来是给用户用的,不是给开发者狂欢的
iugo
2016-06-23 17:41:50 +08:00
@morethansean 目前 X5 的渲染引擎应该是基于 WebKit, 但给我的感觉和 Chromium 相差比较远, 许多特性没有得到支持.

我仅仅是从 Web 开发的角度看, 觉得 X5 不理想. 又想到既然有些版本的微信可以使用 Chrome 内核(Chrome for Android), 为何不将其替换掉 X5?

现在看来, 内置 X5 以外的 WebView 难度是很大的, 而 X5 也还堪用. 所以微信团队做了目前这样的设计.
iugo
2016-06-23 17:58:21 +08:00
@sagnitude 感谢. 吐槽只是附带.

不知道我总结后, 学到的这样的观点是不是正确: QQ 浏览器开发团队的 X5 比市场上一大部分 Android WebView 都可靠. 要做得更好, 比如像 Chrome 一样成本是巨大的, 所以不做.

我也不想用 polyfill, 希望一些特性得到浏览器重视, 所以有此一问. 有些问题是 polyfill 解决不了的, 如我的第二个例子 execCommand, 可能因为会带来安全问题, 所以移动端 Safari 也没有支持.

或许有比 X5 更好的, 我能想到的就是 Chrome WebView, 这样能让微信开发更少坑. 这就是我的想法.

之前您说的, 如一些特性的文档及适用范围, 我觉得和主题无关, 没必要科普. 浏览器支持, 不能只和 Safari 比, 也该和 Chrome 比.

其他非技术的就不说了. 我的观点没有参考价值.
iugo
2016-06-23 18:01:38 +08:00
@sagnitude 另外, 除了性能, 开发效率也应该被考虑. 我想您应该不会去使用 RoR, 但是这代表一些人的开发态度. 是否被恶心到, 冷暖自知.
sagnitude
2016-06-23 18:15:21 +08:00
@iugo 我确实不用 Ruby ,开发效率我是有关注的,我们前端很多项目整体采用 AngularJS+requirejs+karma+jasmine ,写起来还是蛮快的,不太用动脑子

确实,如果浏览器给力,技术这边可以很省力,我们在针对 Chromium 49 编写桌面程序的时候就很舒服;而为微信写东西就需要相对有经验的人来做

但是,了解针对限制更大的浏览器( IE ,微信)进行开发的人,毕竟比了解 ES6 的人好招…

ES6 确实可以带来开发效率的提升,不过这些很大程度上是可以用框架来弥补的,更何况框架和 ES6 都有一定的学习成本
choury
2016-06-23 18:43:51 +08:00
@iugo 对于符合条件的(google play 版本,安卓版本高于 5.0)使用的是系统的 webview ,并不存在一个内置 chrome 的微信版本,这些版本内置的也是 x5 ,只是没有启用
smallthing
2016-06-23 20:09:38 +08:00
微信 web 开发者工具里直接切换 webview
你在微信里输入网址也可以
//deletetbs 也可以
smallthing
2016-06-23 20:16:19 +08:00
@jimmyye
多看看 x5 的官方文档吧.
x5 默认都是走腾讯的 http 代理的
当然你可以关闭.
微信内网址是 debugx5.qq.com

至于在应用里集成 chrome 的 webview
国外的新机系统都包括 chromewebview 了,还有 chrome custom tab 这么高大上的功能可以用
在墙内 webview 乱七八糟的环境下,这有点说笑了,有几个手机预装了可以自动更新的 chromewebview?
这不还不如 x5 吗

利益相关:nexus5x 使用者.
smallthing
2016-06-23 20:22:10 +08:00
@morethansean :不知道你所谓的 Chrome Webview 是啥意思,你是说基于 Chromium 的 webview 吗?

墙真的是害了一大批人.
害了一大批安卓机.
http://www.coolapk.com/apk/com.google.android.webview
chromewebview 就是这个东西,他不是 chromium,是闭源的,是可以和 google play service 一样自动更新的,当然,在其他国家必须翻墙才可以.
题主,如果微信强制使用这玩意,你去挨个机子安装这个?
smallthing
2016-06-23 20:23:02 +08:00
当然我没有说 x5 多么好, 说实话,比较糟糕,但是可以用.
jimmyye
2016-06-23 20:50:39 +08:00
@smallthing 谢谢告知,真希望你没有说第一句话。你的第一句有点莫名其妙,作为微信用户发现疑似劫持行为,然后你让我“多看看 x5 的官方文档吧”?

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

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

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

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

© 2021 V2EX