前端开发或者测试的同志们,你们需要关注手机屏幕的 DPR 值吗?

337 天前
 lostexile
这几天遇到一个页面兼容的问题,在个别老型号的安卓手机上面会有按钮错位的问题。
大家也知道安卓碎片化的问题很严重,反馈过来之后测试部门也不知道哪个型号的手机屏幕是类似的规格。
请问各位平时都是怎么解决这种问题的呢?
尤其是 DPR 这种参数,手机官网没有,测评网站也没有。
2689 次点击
所在节点    程序员
30 条回复
lostexile
337 天前
@xiyan00
@marcong95


按道理来讲确实和 DPR 没有关系,之前的实现逻辑也和 DPR 没有关系,所有这个问题是上了生产之后由业务反馈回来的。
出问题的机型是一加 5T ,我们组几个人讨论了一圈,最后才确定是 DPR 小于某个值才会复现的情况。
我们在处理这个问题的过程中搜了很多网站,包括 B 站的一些测评视频也找了,都没有这个参数相关的数据,所以才在处理这个 BUG 的问题上浪费了很多时间。

如果 DPR 或者屏幕 PD 这个参数确实会对前端开发产生影响,那有个数据库方便查询就有需求,所以才来这里开个帖子确认一下,如果大家有数据方面的需求,那就搞一个。这种查询网站技术上永远不是难点,难点就是在数据上,我这次是联系了一加的开发者中心确定了数据,后续如果真的有需要就每家手机厂商都联系一下呗,开发者中心的同事应该都有这些数据的。
xiyan00
337 天前
@lostexile 首先确认一下, 你说的 dpr 是不是 `window.devicePixelRatio`, 如果不是, 那就是鸡同鸭讲了, 假设就是 window.devicePixelRatio, 那么你的理解是完全错误的

dpr 是逻辑像素与物理像素的比例, 这个逻辑像素是针对开发来说的, 脱离开发, 这个概念没有任何意义
分辨率, PPI 这些才是屏幕的物理参数, dpr 压根就与硬件无关, 与设备无关, 你去哪里查参数
你所查到的也只是该设备默认设置下特定浏览器的 dpr, 如果你更改了系统字体大小, dpr 随之改变
所以你的标题就是错的, '屏幕的 DPR 值', 屏幕没有 DPR 值
你说难点在数据上, 确实难, 因为压根就没有, 你想无中生有去哪搞
你查到 一加 5T 的 DPR 是多少, 我查到屏幕分辨率是 1080p, 默认设置下 dpr 应该是 3, 你说 dpr <某个值才会复现, 如果 dpr 是 3 还能复现, 那么应该所有设备都能复现

你们讨论了一圈,最后才确定是 DPR, 估计你还是知其然而不知其所以然
我想问一下, 出问题的机型是一加 5T, 你们是怎么确定的 DPR 问题, 你测了几个正常的手机 dpr 多少, 一加 5T dpr 又是多少
lostexile
337 天前
@xiyan00

确定是 devicePixelRatio 逻辑像素与物理像素的比例。

真的,我知道你说的对,我们也都是这么理解。问题报过来之前,我们处理的逻辑就是获取设备和屏幕信息,抛去顶部和底部的各种 bar 之后剩下的是我们实际可用的安全区域。
我们不是微信小程序的开发环境,是我们公司自己的小程序环境,所以没有小程序那么完备的 sdk 。

最终确定问题是测试从家里找了一个低 DPR 的手机来,和客户的设备的 DPR 接近,最终我们用测试库的设备确定了 DPR 在 2.6 以下会稳定复现,确实是知其然不知其所以然。一加 5T 的 DPR 我们通过打官方的售后电话确认,应该是 2.17 。
j5159UqX6UKa360u
337 天前
@juzisang 难不成是某为?我就遇到过,在这类型系统我遇到过很多奇葩问题,比如相机返回支持某些参数,实际不支持,别的手机是圆形,他是不规则形状 等等。
xiyan00
337 天前
不理解取 statusBar 高度不是 sdk 提供, 而是小程序代码去计算, 我好奇你怎么计算,

你从代码里获取 dpr, 然后根据这个值来布局, 十有八九是错的, 能够运行也是误打误撞恰好能运行

高度怀疑你打售后确认的 2.17 这个值, 1080 / 2.17 = 498 了, 没碰到过会有这么宽的

dpr 不只与设备相关, 与系统设置相关, 与浏览器相关, chrome 和自带浏览器和微信就不一样, 和微信 App 内字体设置也相关, 当然你是自建的小程序 SDK, 那么根据具体算法也是相关, 这么多变量 2.17 这个值是怎么得出来的
xiyan00
337 天前
@lostexile 估计是不理解你说的 dpr, 沟通了好久, 然后从哪里找出个数值应付你
lostexile
337 天前
@iamyourking

确实是😂,看来你也遇到过这个问题哈😂


@xiyan00

我是从小程序环境提供的 sdk 获取屏幕高度的,但是 sdk 确实没有提供 statusBar 高度,所以我说我们的小程序环境不是很完备么,我是做页面的开发,在小程序环境里面拿到屏幕的值然后去计算的,谁能想到和这个值有关系呢。
xiyan00
337 天前
我是说你的代码逻辑是错的, 与这个值相关是因为你用了这个值, 而且用错了
xiyan00
337 天前
如果你压根就不关心这个值, 不用, 布局就不会错
lostexile
337 天前
@xiyan00
咱俩说的是一个意思,旧的逻辑里面没有用到这个值,但是出错了。
我们尝试了一下加入这个值,解决了,只是不知道为什么会解决…………

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

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

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

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

© 2021 V2EX