CN104808913B - 事件响应方法和装置 - Google Patents
事件响应方法和装置 Download PDFInfo
- Publication number
- CN104808913B CN104808913B CN201410032484.8A CN201410032484A CN104808913B CN 104808913 B CN104808913 B CN 104808913B CN 201410032484 A CN201410032484 A CN 201410032484A CN 104808913 B CN104808913 B CN 104808913B
- Authority
- CN
- China
- Prior art keywords
- thread
- event
- kernel
- node
- kernel thread
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本发明公开了一种事件响应方法和装置,属于移动终端领域。所述方法包括:通过UI线程获取用户操作所对应的事件对象;通过所述UI线程检测是否需要将所述事件对象传递给内核线程;若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应。本发明解决了现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题;实现了由UI线程在获取用户操作所对应的事件对象之后,直接由UI线程检测是否需要将事件对象传递给内核线程,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
Description
技术领域
本发明涉及移动终端领域,特别涉及一种事件响应方法和装置。
背景技术
安装于手机、平板电脑之类的电子设备中的浏览器通常在多线程环境下运行。在浏览器启动时,系统首先创建UI(User Interface,用户界面)线程,UI线程主要负责接收用户的操作事件、页面绘制以及将页面内容上屏显示等任务。在浏览器启动之后,系统还会创建内核线程,内核线程主要负责完成页面内容的解析、排版以及JavaScript脚本文件的执行等任务。
以浏览器对触摸事件的响应为例,当用户在使用电子设备中安装的浏览器浏览网页时,触摸当前页面中某个位置产生触发信号。电子设备接收到该触发信号之后,系统根据该触发信号将触摸事件转换为事件对象,并将该事件对象传递给浏览器。此时,UI线程获取该事件对象并将该事件对象传递给内核线程,内核线程判断其是否需要处理该事件对象。若判断结果为内核线程需要处理该事件对象,则内核线程处理该事件对象并在处理完成之后做出响应;若判断结果为内核线程不需要处理该事件对象,则内核线程将该事件对象返回给UI线程,由UI线程对该事件对象做出响应。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:对于不需要内核线程做出响应的事件对象,由于该事件对象需要经过UI线程与内核线程之间的来回传递以及内核线程的判断,此过程会产生一定的耗时;进一步地,当内核线程处理的事件对象较多时,由于内核线程无法对该事件对象及时做出判断,导致该事件对象重新回到UI线程的耗时会更大,最终导致浏览器对用户操作响应缓慢。因此,现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题。
发明内容
为了解决现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题,本发明实施例提供了一种事件响应方法和装置。所述技术方案如下:
第一方面,提供了一种事件响应方法,用于在多线程环境下运行的浏览器中,所述方法包括:
通过UI线程获取用户操作所对应的事件对象;
通过所述UI线程检测是否需要将所述事件对象传递给内核线程;
若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应。
第二方面,提供了一种事件响应装置,用于在多线程环境下运行的浏览器中,所述装置包括:
事件获取模块,用于通过UI线程获取用户操作所对应的事件对象;
事件检测模块,用于通过所述UI线程检测是否需要将所述事件对象传递给内核线程;
事件响应模块,用于若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应。
本发明实施例提供的技术方案带来的有益效果是:
通过UI线程获取用户操作所对应的事件对象,并通过UI线程检测是否需要将事件对象传递给内核线程,若检测结果为不需要将事件对象传递给内核线程,则通过UI线程对事件对象进行响应;解决了现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题;实现了由UI线程在获取用户操作所对应的事件对象之后,直接由UI线程检测是否需要将事件对象传递给内核线程,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明一个实施例提供的事件响应方法的方法流程图;
图2是本发明另一实施例提供的事件响应方法的方法流程图;
图3是本发明一个实施例提供的事件响应装置的结构方框图;
图4是本发明另一实施例提供的事件响应装置的结构方框图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1,其示出了本发明一个实施例提供的事件响应方法的方法流程图,本实施例以该事件响应方法应用于在多线程环境下运行的浏览器中来举例说明。该事件响应方法可以包括如下几个步骤:
步骤102,通过UI线程获取用户操作所对应的事件对象。
步骤104,通过UI线程检测是否需要将事件对象传递给内核线程。
步骤106,若检测结果为不需要将事件对象传递给内核线程,则通过UI线程对事件对象进行响应。
综上所述,本实施例提供的事件响应方法,通过UI线程获取用户操作所对应的事件对象,并通过UI线程检测是否需要将事件对象传递给内核线程,若检测结果为不需要将事件对象传递给内核线程,则通过UI线程对事件对象进行响应;解决了现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题;实现了由UI线程在获取用户操作所对应的事件对象之后,直接由UI线程检测是否需要将事件对象传递给内核线程,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
在实现本发明的过程中,发明人还发现,网页页面也称为HTML(Hyper TextMarkup Language,超文本标记语言)文档。浏览器在打开网页页面时,即为读取HTML文档,并以网页的形式显示HTML文档中包含的内容。而HTML DOM(HTML Document Object Model,适用于HTML的文档对象模型)定义了访问和操作HTML文档的标准方法。HTML DOM将HTML文档表达为树结构,整个HTML文档可以视为一个包含有若干个DOM(Document Object Model,文档对象模型)节点的节点树。每个DOM节点对应于一个HTML元素,DOM节点通常也作为HTML元素的外部接口供JavaScript脚本进行调用。
对于一个网页页面中包含的所有DOM节点,通常情况下有一部分DOM节点有注册JavaScript事件监听器,而另一部分DOM节点并没有注册JavaScript事件监听器。对于没有注册JavaScript事件监听器的DOM节点,当接收到对应于该DOM节点的用户操作所产生的事件对象时,内核线程不会对该事件对象做出任何响应。然而,由于背景技术中并没有实现一套机制可以由UI线程判断用户操作所对应的DOM节点是否有注册JavaScript事件监听器,所以每个事件对象都必须传递给内核线程进行判断。有鉴于此,本发明实施例提供了一套机制,实现了由UI线程判断用户操作所对应的DOM节点是否有注册JavaScript事件监听器,当判断发现并没有注册JavaScript事件监听器时,UI线程直接对用户操作所产生的事件对象进行响应,省去了背景技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。下面将结合本发明另一具体实施例对本发明实施例提供的这套事件响应机制进行详细介绍和说明。
请参考图2,其示出了本发明另一实施例提供的事件响应方法的方法流程图,本实施例以该事件响应方法应用于在多线程环境下运行的浏览器中来举例说明。该事件响应方法可以包括如下几个步骤:
步骤201,通过内核线程构建预定区域数组对象,该预定区域数组对象中包含有注册了JavaScript事件监听器的DOM节点所对应的显示区域。
当用户每次使用浏览器打开一个新的网页页面或者网页页面中有内容发生改变时,内核线程都会接收到系统发送的页面绘制请求。内核线程接收到页面绘制请求后,从服务器中下载网页资源(通常为HTML文档),并对网页资源进行解析以构建DOM树;然后内核线程对DOM树进行排版生成渲染树,也即按照正确的顺序将各个DOM节点所对应的显示区域进行排列;之后,交由UI线程完成页面内容的绘制,并将各个DOM节点所对应的显示区域上屏显示。
在本实施例提供的事件响应方法中,当内核线程接收到页面绘制请求时,内核线程还需完成预定区域数组对象的构建,并在后续步骤中完成预定区域数组对象中所包含的内容的采集。预定区域数组对象中包含有注册了JavaScript事件监听器的DOM节点所对应的显示区域,下述步骤202至步骤203介绍内核线程如何采集注册了JavaScript事件监听器的DOM节点所对应的显示区域。
步骤202,通过内核线程获取网页页面所对应的文档对象中的预定节点指针容器对象所包含的节点指针元素。
浏览器通过内核线程获取网页页面所对应的文档对象中的预定节点指针容器对象所包含的节点指针元素。在本实施例提供的事件响应方法中,预先将注册了JavaScript事件监听器的DOM节点的节点指针元素添加至预定节点指针容器对象中,通过收集预定节点指针容器对象中所包含的DOM节点的节点指针元素实现注册了JavaScript事件监听器的DOM节点所对应的显示区域的收集。另外,预定节点指针容器可以采用多种数据结构来表示,比如数组、链表或者HashMap等等。
一个网页页面对应于至少一个文档对象,每个文档对象中包含有a个预定节点指针容器对象,a≥0;每个节点指针容器对象中又包含有b个节点指针元素,b≥0;而每个节点指针元素指向一个DOM节点。内核线程遍历所有文档对象下各个节点指针元素,以进一步获取节点指针元素所指向的DOM节点所对应的显示区域。
步骤203,通过内核线程获取节点指针元素所指向的DOM节点所对应的显示区域。
浏览器通过内核线程获取网页页面所对应的文档对象中的预定节点指针容器对象所包含的节点指针元素之后,获取节点指针元素所指向的DOM节点所对应的显示区域。其中,由于每个DOM节点所对应的HTML元素均是以矩形的区域进行显示,所以该显示区域通常也称为矩形显示区域。
步骤204,通过内核线程将DOM节点所对应的显示区域添加至预定区域数组对象中。
浏览器通过内核线程将DOM节点所对应的显示区域添加至预定区域数组对象中。内核线程每获取一个DOM节点所对应的显示区域,就将该DOM节点所对应的显示区域添加至在步骤201中构建的预定区域数组对象中。在内核线程遍历所有文档对象下各个节点指针元素所对应的DOM节点之后,预定区域数组对象中包含有注册了JavaScript事件监听器的DOM节点所对应的显示区域。
步骤205,通过内核线程将预定区域数组对象发送给UI线程。
浏览器通过内核线程将预定区域数组对象发送给UI线程。内核线程可以通过线程间的消息传输机制将预定区域数组对象发送给UI线程。
步骤206,通过UI线程接收并存储预定区域数组对象。
浏览器通过UI线程接收并存储预定区域数组对象。
步骤207,通过UI线程将预定区域数组对象中包含的注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合确定为预定区域。
浏览器通过UI线程将预定区域数组对象中包含的注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合确定为预定区域。
通过上述步骤201至步骤207,UI线程得到了一个预定区域,该预定区域包含有注册了JavaScript事件监听器的DOM节点所对应的显示区域。下面将介绍UI线程获取到用户操作所对应的事件对象后,如何对该事件对象做出是否需要将该事件对象传递给内核线程的判断。
步骤208,通过UI线程获取用户操作所对应的事件对象。
当电子设备接收到用户在使用浏览器浏览网页的过程中通过点击、滑动或者手势等操作所产生的触发信号时,系统将用户的操作事件转换为事件对象并传递给浏览器。此时,浏览器通过UI线程获取用户操作所对应的事件对象。
步骤209,通过UI线程根据事件对象确定用户操作对应于网页页面中的页面坐标点。
浏览器通过UI线程根据事件对象确定用户操作对应于网页页面中的页面坐标点。具体来讲,本步骤包括如下两个子步骤:
第一,通过UI线程从事件对象中提取用户操作对应于电子设备屏幕上的屏幕坐标点。
浏览器通过UI线程从事件对象中提取用户操作对应于电子设备屏幕上的屏幕坐标点。用户操作对应于电子设备屏幕上的屏幕坐标点作为事件对象的一个属性携带于事件对象中,UI线程读取事件对象的属性,从事件对象中提取屏幕坐标点。
第二,通过UI线程将屏幕坐标点转换为网页页面中的页面坐标点。
浏览器通过UI线程将屏幕坐标点转换为网页页面中的页面坐标点。UI线程提取屏幕坐标点之后,将屏幕坐标点转换为网页页面中的页面坐标点。由于网页页面可以随意进行缩放和拖动,所以屏幕坐标点与网页页面中的页面坐标点的对应关系是不固定的。UI线程需要根据网页页面的缩放比例以及位置偏移量将屏幕坐标点转换为网页页面中的页面坐标点。
步骤210,通过UI线程检测页面坐标点是否属于预定区域。
由步骤207可知,预定区域是指网页页面中注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合。浏览器通过UI线程检测页面坐标点是否属于预定区域,即为检测用户操作所对应的DOM节点是否有注册JavaScript事件监听器。
步骤211,若检测结果为页面坐标点不属于预定区域,则通过UI线程对事件对象进行响应。
当检测结果为页面坐标点不属于预定区域时,表明用户操作所对应的DOM节点并没有注册JavaScript事件监听器,则浏览器通过UI线程直接对获取到的事件对象进行响应,无需将该事件对象传递给内核线程。
步骤212,若检测结果为页面坐标点属于预定区域,则通过UI线程将获取到的事件对象传递给内核线程。
当检测结果为页面坐标点属于预定区域时,表明用户操作所对应的DOM节点注册了JavaScript事件监听器,则浏览器通过UI线程将获取到的事件对象传递给内核线程,由内核线程进一步判断其自身是否需要处理该事件对象。
步骤213,通过内核线程判断是否需要对事件对象进行响应。
浏览器通过内核线程判断是否需要对事件对象进行响应。需要说明的是,对于没有注册JavaScript事件监听器的DOM节点,当浏览器接收到对应于该DOM节点的用户操作所产生的事件对象时,内核线程必定不会对该事件对象做出任何响应。而对于注册了JavaScript事件监听器的DOM节点,当浏览器接收到对应于该DOM节点的用户操作所产生的事件对象时,内核线程可能需要对该事件对象做出响应,也可能不需要对该事件对象做出响应。因此,内核线程在接收到UI线程传递至的事件对象之后,内核线程需要判断是否需要处理该事件对象。
步骤214,若判断结果为需要对事件对象进行响应,则通过内核线程对事件对象进行响应。
当判断结果为需要对事件对象进行响应时,则浏览器通过内核线程对事件对象进行响应。
步骤215,若判断结果为不需要对事件对象进行响应,则通过内核线程将事件对象返回给UI线程;并通过UI线程在接收到内核线程返回的事件对象之后,对事件对象进行响应。
当判断结果为不需要对事件对象进行响应时,浏览器通过内核线程将事件对象返回给UI线程;并通过UI线程在接收到内核线程返回的事件对象之后,对事件对象进行响应。
在上述步骤208至步骤215中,UI线程在获取用户操作所对应的事件对象之后,通过检测用户操作对应于页面中的页面坐标点是否属于预定区域,以此检测是否需要将获取到的事件对象传递给内核线程;而当检测结果为不需要传递给内核线程时,由UI线程直接对事件对象进行响应,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
另外,由上述实施例提供的事件响应方法可知,当内核线程接收到页面绘制请求时,内核线程需要完成预定区域数组对象的构建,并在后续步骤中完成预定区域数组对象中所包含的注册了JavaScript事件监听器的DOM节点所对应的显示区域的采集。而注册了JavaScript事件监听器的DOM节点是以指针的形式存储于网页页面所对应的文档对象中的预定节点指针容器对象中。然而,当网页页面中的内容有所调整或者改变时,也即当HTML文档内的代码有所调整或者改变时,可能会导致原有的部分注册了JavaScript事件监听器的DOM节点不再需要注册JavaScript事件监听器了,而原有的部分并未注册JavaScript事件监听器的DOM节点却需要注册JavaScript事件监听器了,此时预定节点指针容器对象中存储的节点指针元素也会随之改变。因此,在内核线程读取HTML文档,对网页资源进行解析以构建DOM树的同时,内核线程需要对DOM树中的每一个DOM节点做出判断,将原先没有注册JavaScript事件监听器的DOM节点进行注册,并将该DOM节点对应的节点指针元素放入预定节点指针容器对象中;而将原先注册了JavaScript事件监听器但在页面内容调整后不需要再注册JavaScript事件监听器的DOM节点从JavaScript事件监听器中释放或者注销,并将该DOM节点对应的节点指针元素从预定节点指针容器对象中移除。具体地,在内核线程构建预定区域数组对象之前,还可以包括如下步骤:
第一,在内核线程解析网页文档构建DOM树的过程中,对于DOM树中的每一个DOM节点,通过内核线程检测DOM节点是否需要注册JavaScript事件监听器。
在内核线程解析网页文档构建DOM树的过程中,对于DOM树中的每一个DOM节点,浏览器通过内核线程检测DOM节点是否需要注册JavaScript事件监听器。具体地,某一DOM节点是否需要注册JavaScript事件监听器是由网页设计者在编写HTML文档时决定的,内核线程读取HTML文档确定该DOM节点是否需要注册JavaScript事件监听器。
第二,若检测结果为需要注册JavaScript事件监听器,则通过内核线程调用预定注册接口为DOM节点注册JavaScript事件监听器。
当检测结果为需要注册JavaScript事件监听器时,浏览器通过内核线程调用预定注册接口为DOM节点注册JavaScript事件监听器。
第三,通过内核线程将完成注册的DOM节点的节点指针元素添加至预定节点指针容器对象中。
浏览器通过内核线程将完成注册的DOM节点的节点指针元素添加至预定节点指针容器对象中。具体地,浏览器通过内核线程判断文档对象中是否存在预定节点指针容器对象;若判断结果为文档对象中存在预定节点指针容器对象,则通过内核线程将完成注册的DOM节点的节点指针元素添加至预定节点指针容器对象中;若判断结果为文档对象中不存在预定节点指针容器对象,则通过内核线程创建预定节点指针容器对象,并通过内核线程将完成注册的DOM节点的节点指针元素添加至预定节点指针容器对象中。
需要说明的是,当浏览器安装于诸如手机、平板电脑之类的电子设备时,由于这类电子设备的屏幕大多是触摸显示屏,用户的操作事件大多是点击、滑动或者手势等触摸事件,因此在内核线程调用预定注册接口为DOM节点注册JavaScript事件监听器之前,浏览器还可以通过内核线程继续检测DOM节点所对应的事件类型是否为触摸事件;若检测结果为DOM节点所对应的事件类型为触摸事件,再执行通过内核线程调用预定注册接口为DOM节点注册JavaScript事件监听器的步骤。另外,本实施例涉及的用户的操作事件包括但不限于触摸事件,还可能是键盘输入事件、或者鼠标点击事件等等,对此不作具体限定。
上述第一至第三共三个步骤实现了将原先没有注册JavaScript事件监听器的DOM节点进行注册,并将该DOM节点对应的节点指针元素放入预定节点指针容器对象中。下述第四至第五两个步骤中,实现了将原先注册了JavaScript事件监听器但在页面内容调整后不需要再注册JavaScript事件监听器的DOM节点从JavaScript事件监听器中释放或者注销,并将该DOM节点对应的节点指针元素从预定节点指针容器对象中移除。
第四,在内核线程解析网页文档构建DOM树的过程中,对于DOM树中的每一个DOM节点,通过内核线程检测DOM节点是否满足预定条件,预定条件是指DOM节点需要从JavaScript事件监听器中释放或者注销。
第五,若检测结果为DOM节点满足预定条件,则通过内核线程将DOM节点的节点指针元素从预定节点指针容器对象中删除。
综上所述,本实施例提供的事件响应方法,UI线程在获取用户操作所对应的事件对象之后,从事件对象中提取屏幕坐标点,并将该屏幕坐标点转换为页面坐标点,然后检测页面坐标点是否属于预定区域,当检测结果为页面坐标点不属于预定区域时,则UI线程对获取到的事件对象进行响应;其中,预定区域是指网页页面中注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合;解决了现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题;实现了由UI线程检测用户操作所对应的DOM节点是否有注册JavaScript事件监听器,当检测发现并没有注册JavaScript事件监听器时,UI线程直接对用户操作所产生的事件对象进行响应,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
另外,随着网页内容的调整或者改变,内核线程通过在解析网页文档构建DOM树的过程中,实时调整预定节点指针容器对象中所包含的节点指针元素,使得在后续获得的预定区域数组对象中包含的DOM节点所对应的显示区域更为实时、准确。
下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。
请参考图3,其示出了本发明一个实施例提供的事件响应装置的结构方框图,本实施例以该事件响应装置用于在多线程环境下运行的浏览器中来举例说明。该事件响应装置包括:事件获取模块310、事件检测模块320和事件响应模块330。
事件获取模块310,用于通过UI线程获取用户操作所对应的事件对象。
事件检测模块320,用于通过所述UI线程检测是否需要将所述事件对象传递给内核线程。
事件响应模块330,用于若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应。
综上所述,本实施例提供的事件响应装置,通过UI线程获取用户操作所对应的事件对象,并通过UI线程检测是否需要将事件对象传递给内核线程,若检测结果为不需要将事件对象传递给内核线程,则通过UI线程对事件对象进行响应;解决了现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题;实现了由UI线程在获取用户操作所对应的事件对象之后,直接由UI线程检测是否需要将事件对象传递给内核线程,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
请参考图4,其示出了本发明另一实施例提供的事件响应装置的结构方框图,本实施例以该事件响应装置用于在多线程环境下运行的浏览器中来举例说明。该事件响应装置包括:事件获取模块310、事件检测模块320、事件响应模块330、事件传递模块340、内核判断模块350、内核响应模块360和事件返回模块370。
事件获取模块310,用于通过UI线程获取用户操作所对应的事件对象。
事件检测模块320,用于通过所述UI线程检测是否需要将所述事件对象传递给内核线程。
所述事件检测模块320,包括:坐标确定单元320a、监听检测单元320b、触摸检测单元320c、监听注册单元320d、节点添加单元320e、删除检测单元320f、节点删除单元320g、数组构建单元320h、指针获取单元320i、区域获取单元320j、区域添加单元320k、数组发送单元320l、数组存储单元320m、区域确定单元320n和坐标检测单元320o。
所述坐标确定单元320a,用于通过所述UI线程根据所述事件对象确定所述用户操作对应于网页页面中的页面坐标点。
具体来讲,所述坐标确定单元320a,包括:坐标提取子单元320a1和坐标转换子单元320a2。
所述坐标提取子单元320a1,用于通过所述UI线程从所述事件对象中提取所述用户操作对应于电子设备屏幕上的屏幕坐标点。
所述坐标转换子单元320a2,用于通过所述UI线程将所述屏幕坐标点转换为所述网页页面中的页面坐标点。
所述监听检测单元320b,用于在所述内核线程解析网页文档构建DOM树的过程中,对于所述DOM树中的每一个DOM节点,通过所述内核线程检测所述DOM节点是否需要注册所述JavaScript事件监听器。
所述触摸检测单元320c,用于若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程继续检测所述DOM节点所对应的事件类型是否为触摸事件。
所述监听注册单元320d,用于若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器。
优选的,所述监听注册单元320d,还用于若检测结果为所述DOM节点所对应的事件类型为所述触摸事件,则执行所述通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器的步骤。
所述节点添加单元320e,用于通过所述内核线程将完成注册的所述DOM节点的节点指针元素添加至所述预定节点指针容器对象中。
所述删除检测单元320f,用于在所述内核线程解析网页文档构建DOM树的过程中,对于所述DOM树中的每一个DOM节点,通过所述内核线程检测所述DOM节点是否满足预定条件,所述预定条件是指所述DOM节点需要从所述JavaScript事件监听器中释放或者注销。
所述节点删除单元320g,用于若检测结果为所述DOM节点满足所述预定条件,则通过所述内核线程将所述DOM节点的节点指针元素从所述预定节点指针容器对象中删除。
所述数组构建单元320h,用于通过所述内核线程构建所述预定区域数组对象。
所述指针获取单元320i,用于通过所述内核线程获取所述网页页面所对应的文档对象中的预定节点指针容器对象所包含的节点指针元素。
所述区域获取单元320j,用于通过所述内核线程获取所述节点指针元素所指向的DOM节点所对应的显示区域。
所述区域添加单元320k,用于通过所述内核线程将所述DOM节点所对应的显示区域添加至所述预定区域数组对象中。
所述数组发送单元320l,用于通过所述内核线程将所述预定区域数组对象发送给所述UI线程。
所述数组存储单元320m,用于通过所述UI线程接收并存储预定区域数组对象,所述预定区域数组对象中包含有所述注册了JavaScript事件监听器的DOM节点所对应的显示区域;
所述区域确定单元320n,用于通过所述UI线程将所述预定区域数组对象中包含的所述注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合确定为所述预定区域。
所述坐标检测单元320o,用于通过所述UI线程检测所述页面坐标点是否属于预定区域,所述预定区域是指所述网页页面中注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合。
事件响应模块330,用于若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应。
具体地,所述事件响应模块330,还用于若检测结果为所述页面坐标点不属于所述预定区域,则执行所述通过所述UI线程对所述事件对象进行响应的步骤。
事件传递模块340,用于若检测结果为需要将所述事件对象传递给所述内核线程,则通过所述UI线程将所述事件对象传递给所述内核线程。
内核判断模块350,用于通过所述内核线程判断是否需要对所述事件对象进行响应。
内核响应模块360,用于若判断结果为需要对所述事件对象进行响应,则通过所述内核线程对所述事件对象进行响应。
事件返回模块370,用于若判断结果为不需要对所述事件对象进行响应,则通过所述内核线程将所述事件对象返回给所述UI线程;并通过所述UI线程在接收到所述内核线程返回的所述事件对象之后,对所述事件对象进行响应。
综上所述,本实施例提供的事件响应装置,UI线程在获取用户操作所对应的事件对象之后,从事件对象中提取屏幕坐标点,并将该屏幕坐标点转换为页面坐标点,然后检测页面坐标点是否属于预定区域,当检测结果为页面坐标点不属于预定区域时,则UI线程对获取到的事件对象进行响应;其中,预定区域是指网页页面中注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合;解决了现有的浏览器中的事件响应机制存在耗时严重以及响应缓慢的问题;实现了由UI线程检测用户操作所对应的DOM节点是否有注册JavaScript事件监听器,当检测发现并没有注册JavaScript事件监听器时,UI线程直接对用户操作所产生的事件对象进行响应,省去了现有技术中将每个事件对象都传递给内核线程进行判断的耗时,大大提高了浏览器对用户操作的响应效率。
另外,随着网页内容的调整或者改变,内核线程通过在解析网页文档构建DOM树的过程中,实时调整预定节点指针容器对象中所包含的节点指针元素,使得在后续获得的预定区域数组对象中包含的DOM节点所对应的显示区域更为实时、准确。
需要说明的是:上述实施例提供的事件响应装置在响应事件时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的事件响应装置与事件响应方法的方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
应当理解的是,在本文中使用的,除非上下文清楚地支持例外情况,单数形式“一个”(“a”、“an”、“the”)旨在也包括复数形式。还应当理解的是,在本文中使用的“和/或”是指包括一个或者一个以上相关联地列出的项目的任意和所有可能组合。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (18)
1.一种事件响应方法,其特征在于,用于在多线程环境下运行的浏览器中,所述方法包括:
通过UI线程获取用户操作所对应的事件对象;
通过所述UI线程检测是否需要将所述事件对象传递给内核线程;
若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应,且无需将所述事件对象传递给所述内核线程。
2.根据权利要求1所述的方法,其特征在于,所述通过所述UI线程检测是否需要将所述事件对象传递给内核线程,包括:
通过所述UI线程根据所述事件对象确定所述用户操作对应于网页页面中的页面坐标点;
通过所述UI线程检测所述页面坐标点是否属于预定区域,所述预定区域是指所述网页页面中注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合;
所述若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应,包括:
若检测结果为所述页面坐标点不属于所述预定区域,则执行所述通过所述UI线程对所述事件对象进行响应的步骤。
3.根据权利要求2所述的方法,其特征在于,所述通过所述UI线程根据所述事件对象确定所述用户操作对应于网页页面中的页面坐标点,包括:
通过所述UI线程从所述事件对象中提取所述用户操作对应于电子设备屏幕上的屏幕坐标点;
通过所述UI线程将所述屏幕坐标点转换为所述网页页面中的页面坐标点。
4.根据权利要求2所述的方法,其特征在于,所述通过所述UI线程检测所述页面坐标点是否属于预定区域之前,还包括:
通过所述UI线程接收并存储预定区域数组对象,所述预定区域数组对象中包含有所述注册了JavaScript事件监听器的DOM节点所对应的显示区域;
通过所述UI线程将所述预定区域数组对象中包含的所述注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合确定为所述预定区域。
5.根据权利要求4所述的方法,其特征在于,所述通过所述UI线程接收并存储预定区域数组对象之前,还包括:
通过所述内核线程构建所述预定区域数组对象;
通过所述内核线程获取所述网页页面所对应的文档对象中的预定节点指针容器对象所包含的节点指针元素;
通过所述内核线程获取所述节点指针元素所指向的DOM节点所对应的显示区域;
通过所述内核线程将所述DOM节点所对应的显示区域添加至所述预定区域数组对象中;
通过所述内核线程将所述预定区域数组对象发送给所述UI线程。
6.根据权利要求5所述的方法,其特征在于,所述通过所述内核线程构建所述预定区域数组对象之前,还包括:
在所述内核线程解析网页文档构建DOM树的过程中,对于所述DOM树中的每一个DOM节点,通过所述内核线程检测所述DOM节点是否需要注册所述JavaScript事件监听器;
若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器;
通过所述内核线程将完成注册的所述DOM节点的节点指针元素添加至所述预定节点指针容器对象中。
7.根据权利要求6所述的方法,其特征在于,所述若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器之前,还包括:
若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程继续检测所述DOM节点所对应的事件类型是否为触摸事件;
若检测结果为所述DOM节点所对应的事件类型为所述触摸事件,则执行所述通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器的步骤。
8.根据权利要求5所述的方法,其特征在于,所述通过所述内核线程构建所述预定区域数组对象之前,还包括:
在所述内核线程解析网页文档构建DOM树的过程中,对于所述DOM树中的每一个DOM节点,通过所述内核线程检测所述DOM节点是否满足预定条件,所述预定条件是指所述DOM节点需要从所述JavaScript事件监听器中释放或者注销;
若检测结果为所述DOM节点满足所述预定条件,则通过所述内核线程将所述DOM节点的节点指针元素从所述预定节点指针容器对象中删除。
9.根据权利要求1至8任一所述的方法,其特征在于,所述通过所述UI线程检测是否需要将所述事件对象传递给内核线程之后,还包括:
若检测结果为需要将所述事件对象传递给所述内核线程,则通过所述UI线程将所述事件对象传递给所述内核线程;
通过所述内核线程判断是否需要对所述事件对象进行响应;
若判断结果为需要对所述事件对象进行响应,则通过所述内核线程对所述事件对象进行响应;
若判断结果为不需要对所述事件对象进行响应,则通过所述内核线程将所述事件对象返回给所述UI线程;并通过所述UI线程在接收到所述内核线程返回的所述事件对象之后,对所述事件对象进行响应。
10.一种事件响应装置,其特征在于,用于在多线程环境下运行的浏览器中,所述装置包括:
事件获取模块,用于通过UI线程获取用户操作所对应的事件对象;
事件检测模块,用于通过所述UI线程检测是否需要将所述事件对象传递给内核线程;
事件响应模块,用于若检测结果为不需要将所述事件对象传递给所述内核线程,则通过所述UI线程对所述事件对象进行响应,且无需将所述事件对象传递给所述内核线程。
11.根据权利要求10所述的装置,其特征在于,所述事件检测模块,包括:坐标确定单元和坐标检测单元;
所述坐标确定单元,用于通过所述UI线程根据所述事件对象确定所述用户操作对应于网页页面中的页面坐标点;
所述坐标检测单元,用于通过所述UI线程检测所述页面坐标点是否属于预定区域,所述预定区域是指所述网页页面中注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合;
所述事件响应模块,还用于若检测结果为所述页面坐标点不属于所述预定区域,则执行所述通过所述UI线程对所述事件对象进行响应的步骤。
12.根据权利要求11所述的装置,其特征在于,所述坐标确定单元,包括:坐标提取子单元和坐标转换子单元;
所述坐标提取子单元,用于通过所述UI线程从所述事件对象中提取所述用户操作对应于电子设备屏幕上的屏幕坐标点;
所述坐标转换子单元,用于通过所述UI线程将所述屏幕坐标点转换为所述网页页面中的页面坐标点。
13.根据权利要求11所述的装置,其特征在于,所述事件检测模块,还包括:数组存储单元和区域确定单元;
所述数组存储单元,用于通过所述UI线程接收并存储预定区域数组对象,所述预定区域数组对象中包含有所述注册了JavaScript事件监听器的DOM节点所对应的显示区域;
所述区域确定单元,用于通过所述UI线程将所述预定区域数组对象中包含的所述注册了JavaScript事件监听器的DOM节点所对应的显示区域的集合确定为所述预定区域。
14.根据权利要求13所述的装置,其特征在于,所述事件检测模块,还包括:数组构建单元、指针获取单元、区域获取单元、区域添加单元和数组发送单元;
所述数组构建单元,用于通过所述内核线程构建所述预定区域数组对象;
所述指针获取单元,用于通过所述内核线程获取所述网页页面所对应的文档对象中的预定节点指针容器对象所包含的节点指针元素;
所述区域获取单元,用于通过所述内核线程获取所述节点指针元素所指向的DOM节点所对应的显示区域;
所述区域添加单元,用于通过所述内核线程将所述DOM节点所对应的显示区域添加至所述预定区域数组对象中;
所述数组发送单元,用于通过所述内核线程将所述预定区域数组对象发送给所述UI线程。
15.根据权利要求14所述的装置,其特征在于,所述事件检测模块,还包括:监听检测单元、监听注册单元和节点添加单元;
所述监听检测单元,用于在所述内核线程解析网页文档构建DOM树的过程中,对于所述DOM树中的每一个DOM节点,通过所述内核线程检测所述DOM节点是否需要注册所述JavaScript事件监听器;
所述监听注册单元,用于若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器;
所述节点添加单元,用于通过所述内核线程将完成注册的所述DOM节点的节点指针元素添加至所述预定节点指针容器对象中。
16.根据权利要求15所述的装置,其特征在于,所述事件检测模块,还包括:触摸检测单元;
所述触摸检测单元,用于若检测结果为需要注册所述JavaScript事件监听器,则通过所述内核线程继续检测所述DOM节点所对应的事件类型是否为触摸事件;
所述监听注册单元,还用于若检测结果为所述DOM节点所对应的事件类型为所述触摸事件,则执行所述通过所述内核线程调用预定注册接口为所述DOM节点注册所述JavaScript事件监听器的步骤。
17.根据权利要求14所述的装置,其特征在于,所述事件检测模块,还包括:删除检测单元和节点删除单元;
所述删除检测单元,用于在所述内核线程解析网页文档构建DOM树的过程中,对于所述DOM树中的每一个DOM节点,通过所述内核线程检测所述DOM节点是否满足预定条件,所述预定条件是指所述DOM节点需要从所述JavaScript事件监听器中释放或者注销;
所述节点删除单元,用于若检测结果为所述DOM节点满足所述预定条件,则通过所述内核线程将所述DOM节点的节点指针元素从所述预定节点指针容器对象中删除。
18.根据权利要求10至17任一所述的装置,其特征在于,所述装置还包括:
事件传递模块,用于若检测结果为需要将所述事件对象传递给所述内核线程,则通过所述UI线程将所述事件对象传递给所述内核线程;
内核判断模块,用于通过所述内核线程判断是否需要对所述事件对象进行响应;
内核响应模块,用于若判断结果为需要对所述事件对象进行响应,则通过所述内核线程对所述事件对象进行响应;
事件返回模块,用于若判断结果为不需要对所述事件对象进行响应,则通过所述内核线程将所述事件对象返回给所述UI线程;并通过所述UI线程在接收到所述内核线程返回的所述事件对象之后,对所述事件对象进行响应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410032484.8A CN104808913B (zh) | 2014-01-23 | 2014-01-23 | 事件响应方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410032484.8A CN104808913B (zh) | 2014-01-23 | 2014-01-23 | 事件响应方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104808913A CN104808913A (zh) | 2015-07-29 |
CN104808913B true CN104808913B (zh) | 2019-08-06 |
Family
ID=53693786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410032484.8A Active CN104808913B (zh) | 2014-01-23 | 2014-01-23 | 事件响应方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104808913B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107608608B (zh) * | 2017-09-25 | 2021-01-26 | 浙江科澜信息技术有限公司 | 一种三维图形渲染引擎的信息交互方法、装置及系统 |
CN113835697A (zh) * | 2020-06-23 | 2021-12-24 | 北京字节跳动网络技术有限公司 | 事件响应方法和装置 |
CN112181195B (zh) * | 2020-09-15 | 2023-04-18 | 广州河东科技有限公司 | 多功能触控面板控制方法、装置、设备及存储介质 |
CN112114800B (zh) * | 2020-09-30 | 2021-06-29 | 北京海泰方圆科技股份有限公司 | 一种浏览器界面处理方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101634955A (zh) * | 2009-08-21 | 2010-01-27 | 中兴通讯股份有限公司 | 一种射频识别系统中事件处理的方法及阅读器管理终端 |
CN103049164A (zh) * | 2011-10-14 | 2013-04-17 | 上海可鲁系统软件有限公司 | 一种动态矢量图形快速响应操作的方法及其控制设备 |
CN103345405A (zh) * | 2013-06-09 | 2013-10-09 | 贝壳网际(北京)安全技术有限公司 | 应用程序的启动方法、装置和客户端 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9336191B2 (en) * | 2009-05-05 | 2016-05-10 | Suboti, Llc | System, method and computer readable medium for recording authoring events with web page content |
-
2014
- 2014-01-23 CN CN201410032484.8A patent/CN104808913B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101634955A (zh) * | 2009-08-21 | 2010-01-27 | 中兴通讯股份有限公司 | 一种射频识别系统中事件处理的方法及阅读器管理终端 |
CN103049164A (zh) * | 2011-10-14 | 2013-04-17 | 上海可鲁系统软件有限公司 | 一种动态矢量图形快速响应操作的方法及其控制设备 |
CN103345405A (zh) * | 2013-06-09 | 2013-10-09 | 贝壳网际(北京)安全技术有限公司 | 应用程序的启动方法、装置和客户端 |
Also Published As
Publication number | Publication date |
---|---|
CN104808913A (zh) | 2015-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Cruz et al. | Catalog of energy patterns for mobile applications | |
CN106503134B (zh) | 浏览器跳转至应用程序的数据同步方法及装置 | |
CN103279278B (zh) | 一种在终端界面中获取图标详细信息的方法和装置 | |
CN104808913B (zh) | 事件响应方法和装置 | |
CN110297738A (zh) | 系统服务的监控方法、装置、设备及存储介质 | |
WO2018082462A1 (zh) | 应用界面遍历方法、系统和测试设备 | |
CN103268361A (zh) | 网页中隐藏url的提取方法、装置和系统 | |
CN106527844A (zh) | 一种实现组件内容显示的方法和装置 | |
CN105975393B (zh) | 一种页面显示的检测方法及系统 | |
CN109697010A (zh) | 一种悬浮窗位置控制方法、终端及计算机可读存储介质 | |
CN110147327B (zh) | 一种基于多粒度的web自动化测试管理方法 | |
CN103440151A (zh) | 一种动态加载Web页面的方法和装置 | |
CN106527888A (zh) | 滑屏查找页面的方法及装置 | |
CN109684576A (zh) | 网页资源懒加载监控方法、装置、设备及存储介质 | |
CN110287056A (zh) | 网页错误信息获取方法和装置 | |
KR20170030622A (ko) | 2차원 코드를 해석하는 방법 및 장치, 컴퓨터 판독 가능한 저장 매체, 컴퓨터 프로그램 제품 및 단말기 장치 | |
CN110298000A (zh) | 页面参数的获取方法、终端设备及介质 | |
CN110399583A (zh) | 页面显示方法、装置、电子设备以及存储介质 | |
CN103353842A (zh) | 一种网页的加载方法和装置 | |
CN103377228B (zh) | 一种用于浏览器的页面内容呈现方法及装置 | |
CN111782490A (zh) | 数据采集方法及装置 | |
CN106599263A (zh) | 一种内容筛选方法、系统及用户终端 | |
CN104731817B (zh) | 一种网页展现方法和装置 | |
US9285869B2 (en) | System, method and computer readable medium for invoking applications | |
CN103198062B (zh) | 一种监控页面死链和js错误的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |