0%

移动端300ms延迟原因以及解决方案

什么是移动端300ms延迟


移动端浏览器在派发点击事件的时候,通常会出现300ms左右的延迟。也就是说,当我们点击页面的时候移动端浏览器并不是立即作出反应,而是会等上一小会儿才会出现点击的效果。

出现该问题的原因


2007 年初。苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问题。这当中最出名的,当属双击缩放(double tap to zoom:用手指在屏幕上快速点击两次,iOS 自带的 Safari 浏览器会将网页缩放至原始比例),这也是会有上述 300 毫秒延迟的主要原因。

以此会导致延迟的问题,比如,用户在 iOS Safari 里边点击了一个链接。由于用户可以进行双击缩放或者双击滚动的操作,当用户一次点击屏幕之后,浏览器并不能立刻判断用户是确实要打开这个链接,还是想要进行双击操作。因此,iOS Safari 就等待 300 毫秒,以判断用户是否再次点击了屏幕。 鉴于iPhone的成功,其他移动浏览器都复制了 iPhone Safari 浏览器的多数约定,包括双击缩放,几乎现在所有的移动端浏览器都有这个功能。

解决方案:fastclick(不唯一)


(以下代码以Vue为例)

(1)安装

1
npm install fastclick

(2)导入

1
import toast from "components/common/toast";

(3)调用attach

1
FastClick.attach(document.body);

参考:https://www.jianshu.com/p/6e2b68a93c88