CN116954937A - 小程序中的文件处理方法、装置、设备及可读存储介质 - Google Patents
小程序中的文件处理方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN116954937A CN116954937A CN202210394105.4A CN202210394105A CN116954937A CN 116954937 A CN116954937 A CN 116954937A CN 202210394105 A CN202210394105 A CN 202210394105A CN 116954937 A CN116954937 A CN 116954937A
- Authority
- CN
- China
- Prior art keywords
- file
- data
- target
- applet
- content
- 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.)
- Pending
Links
- 238000003672 processing method Methods 0.000 title abstract description 13
- 238000012545 processing Methods 0.000 claims abstract description 74
- 238000000034 method Methods 0.000 claims abstract description 52
- 230000015654 memory Effects 0.000 claims description 26
- 238000001514 detection method Methods 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 8
- 230000000737 periodic effect Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 abstract description 7
- 238000007726 management method Methods 0.000 description 46
- 238000004891 communication Methods 0.000 description 20
- 238000010586 diagram Methods 0.000 description 18
- 230000006870 function Effects 0.000 description 14
- 239000008186 active pharmaceutical agent Substances 0.000 description 13
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 238000000889 atomisation Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000007792 addition Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/547—Messaging middleware
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种小程序中的文件处理方法、装置、设备及可读存储介质;方法包括:当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定目标文件的地址、及目标文件对应的数据缓冲区的地址;逻辑层将目标文件的地址及数据缓冲区的地址,发送至小程序的***层,***层连接逻辑层及视图层;***层基于目标文件的地址,调用文件管理接口,得到目标文件中的目标数据,并基于数据缓冲区的地址,将目标数据存储至数据缓冲区;其中,数据缓冲区中的目标数据,用于供逻辑层基于文件访问请求操作所指示的数据处理类型,对目标数据执行相应类型的数据操作。通过本申请,能够降低文件访问操作过程中的数据通信量,提高文件访问操作的效率。
Description
技术领域
本申请涉及计算机技术,尤其涉及一种小程序中的文件处理方法、装置、设备、计算机可读存储介质及计算机程序产品。
背景技术
小程序开发框架提供丰富的原生应用程序接口(API,Application ProgrammingInterface),可以方便的调起即时通信客户端提供的能力,如获取用户信息,本地存储,支付功能等。其中,小程序中支持文件访问操作的API,通常是获取目标文件的文件数据,然后将文件数据在小程序架构中各层之间进行传输,实现文件的访问操作,如此,对于频繁的文件访问操作,小程序各层之间数据通信量大,降低了文件的操作效率,人机交互体验差。
发明内容
本申请实施例提供一种小程序中的文件处理方法、装置、设备、计算机可读存储介质及计算机程序产品,能够降低文件访问操作过程中的数据通信量,提高文件访问操作的速率。
本申请实施例的技术方案是这样实现的:
本申请实施例提供一种小程序中的文件处理方法,包括:
当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定所述目标文件的地址、及所述目标文件对应的数据缓冲区的地址;
其中,所述文件访问事件是,所述小程序的视图层基于接收到的针对所述目标文件的文件访问操作所生成的;
所述逻辑层将所述目标文件的地址及所述数据缓冲区的地址,发送至所述小程序的***层,所述***层连接所述逻辑层及所述视图层;
所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,并基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区;
其中,所述数据缓冲区中的所述目标数据,用于供所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
本申请实施例提供一种小程序中的文件处理装置,包括:。
接收模块,用于当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定所述目标文件的地址、及所述目标文件对应的数据缓冲区的地址;其中,所述文件访问事件是,所述小程序的视图层基于接收到的针对所述目标文件的文件访问操作所生成的;
发送模块,用于所述逻辑层将所述目标文件的地址及所述数据缓冲区的地址,发送至所述小程序的***层,所述***层连接所述逻辑层及所述视图层;
存储模块,用于所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,并基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区;所述数据缓冲区中的所述目标数据,用于供所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
上述方案中,所述小程序中的文件处理装置还包括检测模块,所述创建模块用于当小程序的逻辑层检测到内存中不存在所述目标文件对应的数据缓冲区时,获取所述目标文件中的目标数据的数据大小;
所述逻辑层基于所述目标数据的数据大小,创建所述目标文件对应的数据缓冲区。
上述方案中,所述检测模块,还用于基于所述文件访问操作所指示的数据处理类型,检测执行所述文件访问操作的目标对象与所述数据处理类型相对应的操作权限,得到检测结果;
当所述检测结果表征所述目标对象具有与所述数据处理类型相对应的操作权限时,确定所述目标文件对应的数据缓冲区的地址。
上述方案中,所述存储模块,还用于所述***层获取所述目标数据的大小,及所述数据缓冲区的可用容量;
当所述数据缓冲区的可用容量大于所述目标数据的大小时,所述***层将所述目标数据存储在所述数据缓冲区。
上述方案中,所述接收模块,还用于小程序的逻辑层解析所述文件访问事件,得到所述目标文件的内容操作参数,所述内容操作参数用于指示所述目标数据在所述目标文件中的位置;相应地,所述存储模块,还用于所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据;
其中,所述内容操作参数包括:所述目标数据对应的内容偏移量、所述目标数据对应的内容长度中至少之一。
上述方案中,所述文件管理接口包括文件打开接口及文件读取接口,所述存储模块,还用于所述***层基于所述目标文件的地址,调用所述文件打开接口,打开所述目标文件,并控制所述目标文件处于可操作状态;
所述***层基于所述内容操作参数,调用所述文件读取接口,在处于可操作状态的所述目标文件的数据中,读取得到所述目标数据。
上述方案中,所述内容操作参数包括所述目标数据的内容偏移量,所述存储模块,还用于所述***层基于所述目标文件的地址及所述内容偏移量,确定针对所述目标数据的内容起始位置;
所述***层调用所述文件管理接口,从所述目标数据的内容起始位置开始,读取所述目标文件中的数据,直至所述目标文件的内容结束位置为止;
将所述目标数据的内容起始位置至所述目标文件的内容结束位置之间的数据作为所述目标数据。
上述方案中,所述内容操作参数包括所述目标数据的内容长度,所述存储模块,还用于所述***层确定所述目标文件的内容起始位置;
所述***层调用所述文件管理接口,从所述目标文件的内容起始位置开始,读取所述目标文件中目标长度的数据,并将所述目标长度的数据作为所述目标数据;
其中,所述目标长度与所述目标数据的内容长度相等。
上述方案中,所述内容操作参数包括所述目标数据的内容偏移量及所述目标数据的内容长度,所述存储模块,还用于所述***层基于所述目标文件的地址及所述内容偏移量,确定针对所述目标数据的内容起始位置;
所述***层调用所述文件管理接口,从所述目标数据的内容起始位置读取所述目标文件中目标长度的数据,并将所述目标长度的数据作为所述目标数据;
其中,所述目标长度与所述文件内容长度相等。
上述方案中,所述存储模块,还用于所述***层向所述逻辑层发送通知消息,所述通知消息用于指示针对所述目标数据的存储操作已经完成;
所述逻辑层接收到所述通知消息,并基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
上述方案中,所述存储模块,还用于当所述数据处理类型为数据更新时,所述逻辑层对所述数据缓冲区中的所述目标数据执行相应的数据更新操作,并向所述***层发送更新指令;相应地,所述***层接收到所述更新指令后,从所述数据缓冲区中获取更新后的目标数据,并基于所述更新后的目标数据对所述目标文件执行数据更新操作。
上述方案中,所述存储模块,还用于所述逻辑层对所述数据缓冲区进行周期性的数据查询,得到查询结果;
当所述查询结果表征所述目标数据已存储至所述数据缓冲区时,所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
本申请实施例提供一种电子设备,包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现本申请实施例提供的小程序中的文件处理方法。
本申请实施例提供一种计算机可读存储介质,存储有可执行指令,用于引起处理器执行时,实现本申请实施例提供的小程序中的文件处理方法。
本申请实施例提供一种计算机程序产品,包括计算机程序或指令,用于引起处理器执行时,实现本申请实施例提供的小程序中的文件处理方法。
本申请实施例具有以下有益效果:
应用本申请实施例,小程序的逻辑层将确定的目标文件的地址、以及目标文件对应的数据缓冲区的地址发送至小程序的***层,使得***层可以调用文件管理接口,得到目标文件中的目标数据,并将目标数据存储至数据缓冲区;然后,逻辑层对数据缓冲区中的目标数据执行与文件访问操作所指示的数据处理类型对应的数据操作,即在针对目标文件的文件访问操作过程中,逻辑层和***层通过操作数据缓冲区中的目标数据实现针对目标文件的访问操作,如此,减少了逻辑层与***层之间的数据传输次数,降低了数据通信量,提高了小程序中文件的访问效率。
附图说明
图1是本申请实施例提供的客户端运行小程序的***架构示意图;
图2是本申请实施例提供的运行客户端的终端20的结构示意图;
图3是本申请实施例提供的小程序的架构示意图;
图4是本申请实施例提供的小程序中的文件处理装置;
图5是本申请实施例提供的小程序中的文件处理方法的流程示意图;
图6是本申请实施例提供的文件管理接口示意图;
图7是本申请实施例提供的目标文件中的目标数据的获取方法示意图;
图8是本申请实施例提供的目标数据的获取方法示意图;
图9是本申请实施例提供的目标数据的获取方法另一示意图;
图10是本申请实施例提供的目标数据的数据更新方法的流程示意图;
图11是本申请实施例提供的小程序中的文件处理方法流程图;
图12是本申请实施例提供的文件管理接口调用顺序示意图;
图13是本申请实施例提供的文件读写实际操作内容示意图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述,所描述的实施例不应视为对本申请的限制,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
如果申请文件中出现“第一/第二”的类似描述则增加以下的说明,在以下的描述中,所涉及的术语“第一\第二\第三”仅仅是是区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
对本申请实施例进行进一步详细说明之前,对本申请实施例中涉及的名词和术语进行说明,本申请实施例中涉及的名词和术语适用于如下的解释。
1)客户端,终端中运行的用于提供各种服务的应用程序,例如即时通信应用。
2)小程序,基于面向前端的语言(例如JavaScript)开发的、并在超文本标记语言(HTML,Hyper Text Markup Language)页面中实现服务的程序,通过客户端下载后可以立即解释执行,不需要在客户端中执行安装的步骤。
3)网页视图(Web-View)组件,也称为视图组件,用于实现网页中如点击、下拉框、表格等网页中各种内容的容器,负责小程序的显示,能够自动铺满小程序的页面。
4)事件,从小程序的视图层到逻辑层的通讯方式,网页视图组件中发生用户操作时所产生的数据以事件的形式传递到逻辑层,在逻辑层执行与事件绑定的事件处理函数,例如调用***的各种能力接口。
基于上述对本申请实施例中涉及的名词和术语的解释,接下来参见图1,图1是本申请实施例提供的客户端运行小程序的***架构示意图,设置于终端20上的客户端11(如即时通信客户端)在首次运行小程序的时候,需要下载小程序,发送初始化请求(Initrequest)给小程序的服务器,为了提高下载速度,请求被重定向至内容分发网络13(CDN,Content Delivery Network),从离用户最近的节点服务器上获取小程序的数据包(Package),即所述小程序的源代码,实现小程序的下载;客户端对小程序初始化完成后,进行小程序页面的加载,小程序通过发送数据请求(Ajax request)给服务器12(Server)以获取进行页面显示及页面更新所需的数据,其中,AJAX即“Asynchronous Javascript AndXML”(异步JavaScript和XML),Web Server基于小程序发送的Ajax request返回相应的JSON(JavaScript Object Notation)格式的页面数据,进而小程序根据获取的JSON数据进行页面渲染,实现小程序在客户端中的页面更新。
其中,客户端11在下载小程序时获取的小程序的源代码中包括以下不同类型的文件:1),.json后缀的配置文件,用于小程序(全局)公共设置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多标签(tab)等;2),.js后缀的配置文件,用于实现小程序的(全局)逻辑;3),.wxss后缀的配置文件,用于小程序的公共样式配置。
接下来对运行客户端11的终端20的结构进行说明,图2是本申请实施例提供的运行客户端的终端20的结构示意图,参见图2,终端包括:硬件层21、驱动层22、操作***层23和应用程序层24。然而,本领域的技术人员应当理解,图2示出的终端20的结构仅为示例,并不构成对终端结构的限定。例如,终端可以根据实施需要设置较图2更多的组件,或者根据实施需要省略设置部分组件。
硬件层21包括处理器211、存储器212、输入/输出接口213以及通信接口214,组件可以经***总线连接通信。其中,处理器211可以采用中央处理器(CPU,CentralProcessing Unit)、微处理器(MCU,Microcontroller Unit)、专用集成电路(ASIC,Application Specific Integrated Circuit)或逻辑可编程门阵列(FPGA,Field-Programmable Gate Array)实现。
输入/输出接口213可以采用如显示屏、触摸屏、扬声器等输入/输出器件实现。
存储器212中存储有存储介质,存储介质可以采用闪存、硬盘、光盘等非易失性存储介质实现,也可以采用双倍率(DDR,Double Data Rate)动态缓存等易失性存储介质实现,其中存储有用以执行上述小程序中的网页处理方法的可执行程序。示例性地,存储介质可以与终端的其他组件在同一位置设置,也可以相对于终端中的其他组件分布设置,存储介质中至少包括操作***、网络通信程序。
通信接口214,向处理器提供外部数据如异地设置的存储介质的访问功能。
驱动层22,包括用于供操作***识别硬件层并与硬件层各组件通信的中间件221,例如可以为针对硬件层的各组件的驱动程序的集合。
操作***层23,用于提供面向用户的图形界面,示例性地,包括驱动程序231、图形库232、***框架233、用户界面套件234、插件图标、桌面背景和应用图标,操作***层支持用户经由图形界面对设备的控制本申请实施例对上述设备的软件如操作***类型、版本不做限定,例如可以是Linux操作***、UNIX操作***或其他操作***。
应用程序层24,包括小程序241及客户端242,当然,还可以包括用于实现其他常规功能的应用,如浏览器等。
接下来对本申请实施例中小程序241的架构进行说明,图3是本申请实施例提供的小程序的架构示意图,如图3所示,小程序框架的核心是一个响应的数据绑定***,整个***分为两块,分别为视图层(View)及逻辑层(APP Service),通过小程序框架可以绑定视图层和逻辑层相应的参数,如参数名称,让数据和视图非常简单的保持同步,当进行数据修改的时候,只需要在逻辑层修改数据,视图层就会做相应的更新。通过图3可知视图层和逻辑层分开在两个线程中运行,二者之间的信息交互通过***层的JSBridge进行,视图层与逻辑层通过JSBridge通信。当用户在小程序的页面进行操作(如点击操作),视图层的组件捕获用户操作后触发与该组件绑定的事件(如点击操作对应的点击事件),通过JSBridge将事件发送至逻辑层,逻辑层对事件进行解析,执行对应逻辑(如调用小程序接口)并把进行页面更新所需数据通过JSBridge传递给视图层,视图层基于接收的数据反应为视图。
接下来分别对小程序241的视图层和逻辑层分别进行说明。
视图层主要功能为将逻辑层的数据反应成视图,同时将视图层的事件发送给逻辑层。组件(Component)是视图层的基本组成单元,自带一些功能与样式,一个组件通常包括“开始标签”和“结束标签”,“属性”用来修饰这个组件,“内容”在两个标签之内。其中,组件共有的属性包括:id(用于唯一的标识组件)、class(组件的样式类)、style(组件的内联样式)、hidden(组件是否显示)、data-*(自定义属性,可以对该组件的功能或样式进行修饰)、bind*/catch*(组件的事件)。基础组件分为以下八类:视图容器(View Container)、基础内容(如图标、文字、进度条)、表单(如按钮、输入框、标签等)、导航(Navigation)、多媒体(如音频,图片,视频)、地图(Map)、画布(Canvas)、客服会话。
逻辑层对数据进行处理后发送给视图层,同时接收视图层的事件反馈,由JavaScript编写,在JavaScript基础上,增加了APP和Page方法,进行程序和页面的注册;提供了丰富的API,如播放音乐、预览图片等媒体API,上传文件、下载文件等网络API、保存文件、打开文件等文件API,获取本地数据缓存、清除本地数据缓存等数据API,获取当前位置、打开内置地图等位置API、获取***信息、拨打电话等设备API,显示提示框、显示菜单列表等界面API,再如扫一扫、支付等;每个页面拥有独立的作用域(在JavaScript文件中声明的变量和函数只在该文件中有效;不同的文件中可以声明相同名字的变量和函数,不会互相影响),并提供模块化(将一些公共的代码抽离成为一个单独的js文件,作为一个模块)能力。
事件是小程序的视图层到逻辑层的通信方式,可以将用户的页面操作反馈到逻辑层进行处理,可以绑定在视图层的组件上,当事件被触发,通过将事件传递到逻辑层,执行逻辑层中对应事件的事件处理函数,而事件对象(组件触发事件时,逻辑层绑定该事件的处理函数会收到一个事件对象)可以携带额外信息,如id,dataset,touches等。
至此,已经说明了实现本申请实施例的终端、客户端和小程序,继续说明实现本申请实施例的小程序中的文件处理装置,用于实现本申请实施例小程序中的文件处理装置可以采用硬件结合软件实施的方式,例如由图2中示出终端20中的处理器211可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。
当然,小程序中的文件处理装置可以采用软件实施的方式,作为小程序中的文件处理装置的软件实施示例,小程序中的文件处理可以实施为如图2中示出的终端20中运的客户端242,参见图4,图4是本申请实施例提供的小程序中的文件处理装置,客户端242包括:
接收模块41,用于当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定所述目标文件的地址、及所述目标文件对应的数据缓冲区的地址;其中,所述文件访问事件是,所述小程序的视图层基于接收到的针对所述目标文件的文件访问操作所生成的;
发送模块42,用于所述逻辑层将所述目标文件的地址及所述数据缓冲区的地址,发送至所述小程序的***层,所述***层连接所述逻辑层及所述视图层;
存储模块43,用于所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,并基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区;所述数据缓冲区中的所述目标数据,用于供所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
将结合本申请实施例提供的终端的示例性应用和实施,说明本申请实施例提供的小程序中的文件处理方法。参见图5,图5是本申请实施例提供的小程序中的文件处理方法的流程示意图,将结合图5示出的步骤进行说明。
在步骤101中,当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定目标文件的地址、及目标文件对应的数据缓冲区的地址。
其中,文件访问事件是,小程序的视图层基于接收到的针对目标文件的文件访问操作所生成的。另外,数据缓冲区的地址是数据缓冲区在内存空间中的起始地址。
在实际实施时,当用户通过客户端在小程序的页面针对目标文件进行文件访问操作(如读取、修改、删除等文件操作),视图层的组件捕获用户执行的相应操作后触发与该组件绑定的文件访问事件(如文件打开操作对应的打开事件),通过JSBridge将文件访问事件发送至小程序的逻辑层,逻辑层对文件访问事件进行解析,得到文件访问事件中携带的针对目标文件的访问参数,其中,访问参数至少包括目标文件的地址,也即目标文件的文件路径。小程序的逻辑层在接收到针对目标文件的文件访问事件后,可以确定目标文件对应的数据缓冲区以及数据缓冲区在内存中的起始地址。需要说明的是,目标文件的文件路径是小程序能够访问的路径。在实际应用中,为了减少小程序的逻辑层与***层之间的数据通信、提高文件访问效率,小程序的逻辑层可以为目标文件分配相应的数据缓冲区,如此,小程序的逻辑层可以从数据缓冲区中获取目标文件的访问数据,或者将修改后的文件数据写入数据缓冲区。小程序的***层也可以将读取到的目标文件中的数据临时存储在该数据缓冲区,并从数据缓冲区中获取更新后的目标文件的数据,重新写入目标文件。
示例性地,在手机终端中安装有即时通信客户端,用户通过即时通信客户端呈现办公软件对应的小程序A的页面,用户通过打开小程序A中的目标文件F,生成针对目标文件F的文件访问请求,小程序A的视图层基于文件访问请求,确定相应的文件访问操作,并生成对应的文件访问事件,然后将目标文件F的文件路径(地址)发送至小程序的逻辑层。
对数据缓冲区进行说明,数据缓冲区是用于存储二进制数据的缓冲区(内存空间),可以是终端内存中一段连续的内存空间地址,也可以是不连续的。如二进制数据缓冲区ArrayBuffer,通过ArrayBuffer将目标文件中字符数据转化成二进制格式的数据。
在一些实施例中,小程序的逻辑层在确定目标文件对应的数据缓冲区的地址之前,还可以通过以下方式创建数据缓冲区:当小程序的逻辑层检测到内存中不存在目标文件对应的数据缓冲区时,获取目标文件中的目标数据的数据大小;逻辑层基于目标数据的数据大小,创建目标文件对应的数据缓冲区。
在实际实施时,小程序的逻辑层在确定目标文件对应的数据缓冲区的地址之前,通常会先检测针对目标文件的数据缓冲区是否存在。当小程序的逻辑层检测到内存中不存在对应目标文件的数据缓冲区时,可以创建相应的数据缓冲区,其中,在创建数据缓冲区时,逻辑层可以预先设置数据缓冲区的容量大小,容量大小的设置可以基于目标数据的数据大小确定。
在另一些实施例中,小程序的逻辑层检测到内存中存在目标文件对应的数据缓冲区、并且数据缓冲区的剩余容量低于剩余容量阈值时,释放数据缓冲区对应的内存空间。在实际应用中,小程序的逻辑层检测到内存中已经存在目标文件对应的数据缓冲区时,还需要检测当前数据缓冲区的剩余容量,当剩余容量已经低于预设的剩余容量阈值时,说明目标文件对应的数据缓冲区已满,此时小程序的逻辑层可以释放数据缓冲区对应的内存空间,或者直接开辟一块新的数据缓冲区用于存储目标文件对应的相关数据。
在一些实施例中,小程序的逻辑层可以通过以下方式确定目标文件对应的数据缓冲区的地址:所述逻辑层基于文件访问操作所指示的数据处理类型,检测执行所述文件访问操作的目标对象与所述数据处理类型相对应的操作权限,得到检测结果;当检测结果表征目标对象针对目标文件具有与数据处理类型相对应的操作权限时,确定目标文件对应的数据缓冲区的地址。
在实际实施时,针对目标文件的文件访问操作包括读操作、写操作中至少之一,相应的,文件访问操作对应的数据处理类型可以为针对目标文件中的数据的查看、编辑、删除等类型。在对目标文件进行访问之前,小程序的逻辑层可以首先对当前执行文件访问操作的目标对象(用户)针对该目标文件的操作权限进行检测,当检测到目标对象针对目标文件具有与数据处理类型相对应的操作权限时,小程序的逻辑层再确定目标文件对应的数据缓冲区的地址;当检测到目标对象针对目标文件不具有与数据处理类型相对应的操作权限时,可以生成针对目标文件的访问操作失败的信息,并将才信息发送至小程序的视图层,并通过小程序的视图层对操作失败的信息进行可视化输出,以提示执行文件访问操作的目标对象不具有操作目标文件的权限。
示例性地,设置目标对象U通过即时通信客户端访问小程序A,以对目标文件进行写操作(文件访问操作为写操作),写操作对应的数据处理类型为编辑操作,此时,小程序的逻辑层检测目标对象U针对目标文件是否具有编辑操作权限,若检测到目标对象U具有相应的操作权限时,小程序的逻辑层可以继续执行后续操作;若检测到目标对象U不具有相应的操作权限时,小程序的逻辑层生成提示信息“抱歉!您目标不具备针对文件F的编辑权限”,并将该提示信息发送至小程序的视图层,以使小程序的视图层将该提示信息进行可视化输出。
在步骤102中,小程序的逻辑层将目标文件的地址及数据缓冲区的地址,发送至小程序的***层。
其中,***层连接逻辑层及所述视图层。
在实际实施时,小程序的逻辑层将目标文件的地址以及数据缓冲区的地址发送至小程序的***层。小程序的逻辑层通过构建相应的文件访问操作对应的代码函数,并将目标文件的地址及数据缓冲区的地址作为函数的参数,发送至小程序的***层。
通过上述方式,小程序的逻辑层可以将目标文件的地址及数据缓冲区的地址发送至小程序的***层。
在步骤103中,小程序的***层基于目标文件的地址,调用文件管理接口,得到目标文件中的目标数据。
其中,数据缓冲区中的目标数据,用于供逻辑层基于文件访问操作所指示的数据处理类型,对目标数据执行相应类型的数据操作。
在实际实施时,小程序的***层,基于接收到目标文件的地址,调用相应的文件管理接口,进而得到目标文件中的目标数据。参见图6,图6是本申请实施例提供的文件管理接口示意图,图中示出的该文件管理接口包括打开接口open、读取接口read、写入接口write以及关闭接口close,逻辑层调用这些文件管理接口对应的小程序所属平台的所提供的针对文件进行操作的基础库方法,open对应inner open,read对应inner read,write对应inner write,close对应inner close。
示例性地,以打开一个文件读取文件内容,并且修改内容写入到文件中为例,说明小程序的***层如何获取目标文件中的目标数据,实现相关操作的代码片段如下:
在一些实施例中,小程序的***层可以通过以下方式确定目标文件中的目标数据:小程序***层基于目标文件的地址及内容操作参数,调用文件管理接口,得到目标文件中的目标数据;其中,内容操作参数包括:目标数据对应的内容偏移量、目标数据对应的内容长度中至少之一。
在实际实施时,小程序的***层可以根据接收到目标文件的地址以及相应的内容操作参数,确定目标文件中的目标数据。也就是说,小程序的***层可以根据内容操作参数获取目标文件中的部分数据作为目标数据,不需要每次都从目标文件的开头进行读取。这里的内容操作参数可以包括目标数据对应的内容偏移量(offset)、目标数据对应的内容长度(length)中至少之一。其中,小程序的***层可以根据目标数据对应的内容偏移量(offset)确定目标数据在目标文件中的起始位置(即从目标文件的哪里开始读取数据),小程序的***层可以根据目标数据对应的内容长度(length)确定目标数据的数据大小。如此,结合目标文件对应的内容偏移量及目标数据对应的内容长度,从目标文件中获取目标数据。
在一些实施例中,小程序的逻辑层可以通过以下方式获取上述内容操作参数:小程序的逻辑层解析文件访问事件,得到目标文件的内容操作参数,其中,内容操作参数用于指示目标数据在目标文件中的位置。
在实际实施时,小程序的逻辑层解析文件访问事件,确定相应的内容操作参数,也就是说,内容操作参数执行文件访问操作的目标对象基于小程序的视图层传输至小程序的逻辑层的,基于此,小程序的逻辑层解析文件访问事件,得到内容操作参数。需要说明的是,若解析访问事件时未得到目标对象设置的内容操作参数时,小程序的逻辑层可以基于默认值进行后续操作。若内容操作参数为空,逻辑层可以设置针对目标文件的内容偏移量(offset)为0(即从目标文件的第一个字符位置开始读取目标数据);逻辑层可以设置针对目标数据对应的内容长度(length)为目标文件的大小(即将目标文件的所有数据作为目标数据)。
示例性地,const fs=wx.getFileSystemManager().readSync({fd,arrayBuffer,offset,length,position}),其中arrayBuffer表征数据缓冲区、offset表征内容偏移量、length表征内容长度。
在一些实施例中,文件管理接口包括文件打开接口及文件读取接口,小程序的***层还可以通过以下方式得到目标文件中的目标数据:小程序的***层基于目标文件的地址,调用文件打开接口,打开目标文件,并控制目标文件处于可操作状态;小程序的***层基于内容操作参数,调用文件读取接口,在处于可操作状态的目标文件的数据中,读取得到目标数据。
在实际实施时,文件管理接口可以包括文件打开接口以及文件读取接口,小程序的***层调用文件打开接口,打开目标文件的地址所指示的目标文件,此时,控制目标文件处于可操作状态,并在检测确定执行文件访问操作的目标对象具有相应的操作权限后,基于内容操作参数,调用文件读取接口,读取目标文件的数据,得到最终的目标数据。
在一些实施例中,参见图7,图7是本申请实施例提供的目标文件中的目标数据的获取方法示意图,当内容操作参数包括目标数据的内容偏移量时,小程序的***层可以通过图7示出的步骤1031a-1033a得到目标文件中的目标数据。
步骤1031a,小程序的***层基于目标文件的地址及内容偏移量,确定针对目标数据的内容起始位置。
在实际实施时,小程序的***层根据目标文件的地址,确定需要访问的文件的存储位置,然后根据内容偏移量(内容操作参数)确定需要读取的目标数据在目标文件中的起始位置,并从该起始位置开始读取数据,直至目标文件的结束位置为止。
步骤1032a,小程序的***层调用文件管理接口,从目标数据的内容起始位置开始,读取目标文件中的数据,直至目标文件的内容结束位置为止。
在实际实施时,当内存操作参数为目标文件对应的内容偏移量时,***层基于内容偏移量确定目标数据在目标文件中的内容起始位置,并从该起始位置读取目标文件中的数据,直至目标文件的内容结束位置为止。即***层从内容起始位置开始读取目标文件,读到目标文件的内容结束位置为止。
步骤1033a,将目标文件的内容起始位置至目标文件的内容结束位置之间的数据作为目标数据。
在实际实施时,***层将目标文件中内容起始位置至内容结束位置之间的数据作为最终要访问的目标数据。
在一些实施例中,参加图8,图8是本申请实施例提供的目标数据的获取方法示意图,内容操作参数包括目标数据的内容长度时,基于图5,步骤103可以通过步骤1031b-1032b实现。
步骤1031b,小程序的***层确定目标文件的内容起始位置。
在实际实施时,内容操作参数为目标数据的内容长度时,小程序的***层可以直接将目标文件中第一个字符的位置作为目标起始位置(即从头开始读取目标文件)。
步骤1032b,小程序的***层调用文件管理接口,从目标文件的内容起始位置开始,读取目标文件中目标长度的数据作为目标数据。
其中,目标长度与目标数据的内容长度相等。
在实际实施时,***层从目标文件的开头开始读取数据,最终所读取的数据的大小与内容操作参数(即目标数据的内容长度)一致。即***层可以根据内容操作参数(即目标数据的内容长度)确定读取的目标文件的内容结束位置。
在一些实施例中,参加图9,图9是本申请实施例提供的目标数据的获取方法另一示意图,内容操作参数包括目标数据的内容偏移量及目标数据的内容长度时,基于图5,步骤103可以通过步骤1031c-1032c实现。
步骤1031c,小程序的***层基于目标文件的地址及内容偏移量,确定针对目标数据的内容起始位置。
在实际实施时,内容操作参数包括目标数据的内容偏移量及目标数据的内容长度时,***层可以基于目标文件的地址,打开目标文件,并控制目标文件处于可操作状态,然后基于内容偏移量,在目标文件中确定目标数据的内容起始位置。
步骤1032c,小程序的***层调用文件管理接口,从目标数据的内容起始位置,读取目标文件中目标长度的数据作为目标数据。
其中,目标长度与目标数据的内容长度相等。
在实际实施时,***层在确定了目标数据的内容起始位置后,调用文件管理接口与,从内容起始位置开始读取目标长度的数据。需要说明的是,***层根据内容操作参数所包括的目标数据的内容长度,确定目标数据在目标文件中的内容结束位置。即***层读取目标文件中内容起始位置至目标文件中内容结束位置之间的数据作为目标数据。
在步骤104中,小程序的***层基于数据缓冲区的地址,将目标数据存储至数据缓冲区。
在实际实施时,***层在从目标文件中读取到目标数据后,依据目标文件对应的数据缓冲区的地址,将目标数据存储至数据缓冲区。
在一些实施例中,参见图10,图10是本申请实施例提供的目标数据的数据更新方法的流程示意图,基于图3,在步骤104之后,还可以执行
步骤105中,小程序的***层向逻辑层发送通知消息,通知消息用于指示针对目标数据的存储操作已经完成。
在实际实施时,当小程序的***层向数据缓冲区写入目标数据的操作完成时,***层可以向逻辑层发送通知消息,该通知消息用于指示***层针对目标数据的存储操作已经完成,此时,小程序的逻辑层可以调用数据缓冲区内的目标数据。
步骤106中,小程序的逻辑层接收到通知消息,并基于文件访问操作所指示的数据处理类型,对目标数据执行相应类型的数据操作。
在实际实施时,小程序的逻辑层接收到***层发送针对目标数据写入数据缓冲区完成的通知消息后,根据文件访问操作所指示的数据处理类型,从数据缓冲区中获取目标数据,并对目标数据执行相应的数据操作。
示例性地,针对目标文件F的编辑操作为例进行说明,***层将目标文件F中的目标数据D写入数据缓冲区B后,向逻辑层发送通知消息,可以是以全局变量的形式表征写入完成,如设置变量isFinish=false,当向数据缓冲区中针对目标数据的写入操作完成时,设置变量isFinish=true,此时逻辑层检测到isFi nish由false变为true时,确定数据缓冲区内已经存入需要编辑的目标数据,此时逻辑层从数据缓冲区读取目标数据,并对目标数据进行编辑操作(如增加、修改、删除操作)等。
在一些实施例中,当针对目标文件的文件访问操作所指示的数据处理类型为数据更新时,小程序的逻辑层还可以通过以下方式更新目标数据:小程序的逻辑层对数据缓冲区中的目标数据执行相应的数据更新操作,并向***层发送更新指令;小程序的***层接收到更新指令后,从数据缓冲区中获取更新后的目标数据,并基于更新后的目标数据对目标文件执行数据更新操作。
在一些实施例中,小程序的逻辑层还可以通过以下方式确定数据缓冲区中的目标数据已经存储完成:小程序的逻辑层对数据缓冲区进行周期性的数据查询,得到查询结果;当查询结果表征目标数据已存储至数据缓冲区时,逻辑层基于文件访问操作所指示的数据处理类型,对目标数据执行相应类型的数据操作。
在实际实施时,小程序的逻辑层可以对数据缓冲区进行周期性的数据查询,当查询结果表征目标数据已经存储至数据缓冲区时,逻辑层即可根据文件访问操作所指示的数据处理类型,对目标数据执行相应的数据操作。
示例性地,设置轮询周期为3毫秒(ms),即每隔3ms,逻辑层就查询一次数据缓冲区,判断目标数据是否已完全写入数据缓冲区。当确定目标数据完全写入数据缓冲区后,对目标数据执行相应的数据操作(修改、增加、删除等)。
在一些实施例中,当针对目标文件的文件访问操作所指示的数据处理类型为数据更新时,小程序的逻辑层还可以通过以下方式更新目标数据:小程序的逻辑层对数据缓冲区中的目标数据执行相应的数据更新操作,并向***层发送更新指令;小程序的***层接收到更新指令后,从数据缓冲区中获取更新后的目标数据,并基于更新后的目标数据对目标文件执行数据更新操作。
在实际实施时,针对目标文件执行数据更新时,小程序的逻辑层从数据缓冲区中读取目标数据,并对该目标数据进行数据更新(如追加数据、修改数据、删除数据等),在数据更新完成后,向***层发送更新指令,***层在接收到该更新指令后(可以确定当前数据缓冲区内的目标数据是更新后的目标数据),***层基于数据缓冲区中更新后的目标数据对目标文件执行数据更新操作(即完成针对目标文件的更新)。
在实际实施时,执行文件访问操作的目标对象针对目标文件的操作,是需要预先将目标文件下载至目标对象所持的电子设备的本地的,因此,不存在多个目标对象针对目标文件的文件访问操作。由于是本地进行操作,针对目标文件的各种文件访问操作都是顺序执行的,因此,在小程序运行期间,针对同一个目标文件的文件访问操作,可以对该目标文件调用一次文件打开操作,即执行一次文件打开,在小程序结束运行(即小程序关闭)时,再对目标文件执行一次文件关闭操作,即在小程序的一次运行周期内,可以只调用一次文件打开接口、一次文件关闭接口,不需要每次文件访问操作就打开和关闭目标文件,这样,针对目标文件的文件访问操作次数较多时,只要打开一次目标文件,即可对目标文件进行多次的读或写操作,操作完成之后,再一次关闭目标文件即可。如此,减少了大量的重复操作,也提升了文件操作的速度。
应用本申请实施例,将通过小程序的逻辑层、***层及视图层所实现的针对目标文件的文件访问操作,转换为针对数据缓冲区中目标数据执行与文件访问操作所指示的数据处理类型相应的数据操作,即小程序的逻辑层和***层直接操作数据缓存区中存储的目标数据,不需要目标数据在逻辑层和***层之间相互传输,逻辑层和***层之间可以通过指令发送的方式进行通信,如此,大大减少小程序中针对文件的访问通信量,提高文件操作效率。另外,在小程序的一次运行期间,针对目标文件的文件访问操作次数较多时,可以执行一次打开和一次关闭操作。如此,能够大大减少大量的重复操作,提升文件操作的速度。
在一些实施例中,参见图11,图11是本申请实施例提供的小程序中的文件处理方法流程图,可以由小程序所属客户端以及小程序的服务器协同实施。
步骤201:客户端发送小程序的请求给客户端的后台服务器。
在实际实施时,用户基于客户端向小程序发送启动请求,客户端接收到针对小程序的启动请求,并将该启动请求转发给客户端的后台服务器。
步骤202:客户端接收返回的小程序的源代码。
在实际实施时,客户端通过发送小程序的请求以获取小程序,客户端(如即时客户端)可以主动或根据用户在客户端中的搜索进行小程序的获取,如用户进入客户端的小程序的功能入口,提示用户安装小程序,或者根据用户以关键字的搜索,下载小程序;在客户端中显示小程序的入口,当接收到触发入口的操作时,触发小程序的请求的发送。
需要说明的是,仅在客户端首次运行小程序时需要下载小程序,即获取小程序的源代码,后续可直接应用。
步骤203:客户端创建小程序的网络视图组件,并在小程序的页面框架中显示网络视图组件承载的业务域名的网页。
步骤204:客户端接收到基于针对目标文件的文件访问操作所发送的文件数据。
当用户通过小程序打开网页后,用户可通过网页操作小程序中的文件,产生对应该操作的数据。
步骤205:客户端将数据封装为事件,发送事件至小程序的视图层。
在实际实施时,数据包括实现文件管理操作时所需要调用的小程序接口以及参数。客户端接收网页发送的数据后,将数据以事件的形式发送至小程序的逻辑层即通知小程序。
步骤206:小程序的视图层发送针对目标文件的访问事件至小程序的逻辑层,逻辑层确定目标文件的地址、及目标文件对应的数据缓冲区的地址。
步骤207:小程序的逻辑层将目标文件的地址、及目标文件对应的数据缓冲区的地址发送至小程序的***层。
步骤208:小程序的***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,
步骤209:小程序的***层基于数据缓冲区的地址,将目标数据存储至数据缓冲区。
步骤210:小程序的***层发送数据缓冲区写入完成的通知消息至小程序的逻辑层。
步骤211:小程序的逻辑层基于文件访问操作所指示的数据处理类型,对目标数据执行相应类型的数据操作。
步骤212:客户端确定目标文件操作成功并提示。
在实际实施时,针对目标文件的文件访问操作完成时,客户端可以生成相应的提示信息,用于提示用户文件访问成功,如更新操作时,可以提示用户文件更新成功。
应用本申请实施例,小程序的逻辑层和***层直接操作数据缓存区中存储的目标数据,不需要目标数据在逻辑层和***层之间相互传输,逻辑层和***层之间可以通过指令发送的方式进行通信,如此,大大减少小程序中针对文件的访问通信量,提高文件操作效率。另外,在小程序的一次运行期间,针对目标文件的文件访问操作次数较多时,可以执行一次打开和一次关闭操作。如此,能够大大减少大量的重复操作,提升文件操作的速度。
下面,将说明本申请实施例在一个实际的应用场景中的示例性应用。
文件***是小程序或小游戏提供的一套以小程序或小游戏和用户维度隔离的存储以及一套相应的管理接口。然而,相关技术中,小程序的文件***所提供的文件管理接口,每次读或写文件时均需要完整打开和关闭文件,每次写文件需要访问整个文件内容,并且文件中的数据需要经过***层(Native)到逻辑层(采用JS实现的逻辑层)数据转换通信。
基于此,本申请实施例提供一种小程序中的文件处理方法,该方法支持高性能、原子化操作小程序或小游戏中的文件。具体地,支持在小程序或小游戏中执行一次打开文件的操作,可以对文件进行多次读或写操作,最后执行一次关闭文件的操作(即支持更细粒度的文件读或写操作等),可将文件数据直接以二进制的形式存储到逻辑层定义的数据缓冲区ArrayBuffer中,无需经过***层native到逻辑层JS之间的文件数据的传输,能够有效减少小程序各层之间的数据通信量。
在对小程序中的文件的处理过程进行说明之前,先对小程序的架构进行说明,参见图3,小程序开发过程中调用的与文件处理相关的应用程序接口API都是小程序的逻辑层提供的,逻辑层可以与***层native进行通信。在读文件的时候,原文件接口读文件是需要经过***层native到逻辑层js的数据转换通信,数据传输过程会有一定的通信耗时,为了减少通信耗时,本申请实施例中设置数据缓冲区ArrayBuffer,逻辑层调用接口时直接传入ArrayBuffer实例,然后***层native直接把读到的目标文件的文件数据写到数据缓冲区ArrayBuf fer中,数据缓冲区针对目标文件中的数据写入操作完成之后,逻辑层可以直接读取数据缓冲区ArrayBuffer中的数据,返回即可。
在实际实施时,参见表1,表1是本申请实施例提供的文件管理接口对比图,
表1
结合表1示出的文件管理接口,对比可知,两种文件管理接口针对文件的操作能力是不变的,不过本申请实施例提供的文件管理接口的代码实现底层是有变化的,正是因为变化,FD(File Descriptor)接口(本申请实施例提供的文件管理接口)才可以做到比原有接口更高性能、更原子化。
示例性地,以打开一个文件读取文件内容,并且修改内容写入到文件中为例,说明小程序中的文件处理方法:
a)相关文件提供的文件管理接口针对上述示例的实现代码如下:
const fs=wx.getFileSystemManager();//获取全局唯一的文件管理器
data=fs.readFileSync(“FileA”);//读取文件
data=modify(data);//修改文件内容
fs.writeFileSync(“FileA”,data);//写入文件
b)本申请实施例提供的文件管理接口针对上述示例的实现代码如下:
const fs=wx.getFileSystemManager()//获取全局唯一的文件管理器
fd=fs.openSync(“FileA”)//打开文件
fs.readSync({fd,arrayBuffer,offset,length,position})//读取文件
data=modify(data)//修改文件内容
fs.writeSync({fd,data,offset,length,position})//写入文件
fs.closeSync({fd:fd})//关闭文件
通过上述a)和b)两种实现方式,可以发现本申请实施例提供的文件管理接口比原来的文件管理接口多两步操作,一个是打开文件openSync,一个是关闭文件closeSync。但是由于原有文件管理接口每次读或写操作,需要完整打开和关闭文件内容,并且每次读或写文件时,都需要输入或输出整个文件内容的。
从技术侧说明,本申请实施例提供的文件管理接口针对文件操作的速度提升。为了提高针对文件的操作速度,小程序或小游戏的API提供了文件FD接口来提升文件***的操作速度,具体体现在以下方面:
1)提供打开或关闭文件接口
在实际实施时,参见图12,图12是本申请实施例提供的文件管理接口调用顺序示意图,在图12(1)示出的原有接口的使用过程中,每次读或写文件操作,都是需要完整打开和关闭文件的。如果文件操作次数较多时,每次文件读或写都需要完整打开和关闭文件。多次这种过程其实会比较耗时,而且是重复操作的。基于此,本申请实施例提供了打开文件openSync和关闭文件closeS ync这两个接口,参见图12(2),文件操作时打开和关闭完全由开发者自行支配。当文件操作次数较多时,其实只要打开一次文件,即可对文件进行多次的读或写操作,操作完成之后,再关闭文件即可。相对于原有接口而言,减少了大量的重复操作,也提升了文件操作的速度。
2)读或写文件支持原子化操作
在实际实施时,参见图13,图13是本申请实施例提供的文件读写实际操作内容示意图,对于原文件管理接口而言,每次读或写都需要操作整个文件内容,但是在实际开发中,很多开发者对文件内容更多的是修改,而非重写整个文件内容。对于这种情况,支持让开发者原子化的操作文件就可以减少很多无效的读写。
3)文件数据直接写到数据缓冲区ArrayBuffer
在实际实施时,参见图3示出的小程序的架构,基于该小程序的架构,在读文件的时候,原有的文件接口读文件是需要经过native到js线程的数据转换通信,这里的通信会有一定的耗时,为了减少通信耗时,FD新的读接口让开发者调用的时候直接传入数据缓冲区ArrayBuffer实例,然后***层native直接把读到的文件数据存储至数据缓冲区ArrayBuffer中,完成之后逻辑层js直接读取数据缓冲区ArrayBuffer内的文件数据返回即可。
概括来说,本申请实施例提供的小程序或小游戏中文件的处理过程如下:开发者读取一个文件时,会创建一个数据缓冲区ArrayBuffer,并作为接口wx.getFileSystemManager.readSync的参数,***层Native接收到这个文件读取指令后,会把读取到的目标文件数据,存储至数据缓冲区ArrayBuffer,并在目标文件数据写入写完后,向逻辑层发送写入完成的通知消息,此时逻辑层在确定目标文件数据已写入完成后,可以直接访问数据缓冲区ArrayBuffer,即可从A rrayBuffer获取目标文件数据,然后对目标文件数据进行后续的操作,即整个过程不需要目标文件数据在***层和逻辑层之间互相传输,能够大大减少数据通信量。
应用本申请实施例,可以实现一次打开文件,进行多次读或写操作,进而减少重复操作;还可以每次只读写目标文件中指定部分内容,来减少无效读写;直接将目标文件数据存储到数据缓冲区ArrayBuffer,能够减少通信耗时;在对目标文件进行频繁的读写操作时,读写速度都会更快,用户体验小程序或小游戏也会更好。
可以理解的是,在本申请实施例中,涉及到用户信息等相关的数据,当本申请实施例运用到具体产品或技术中时,需要获得用户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
下面继续说明本申请实施例提供的小程序中的文件处理装置的实施为软件模块的示例性结构,参见图4,客户端242包括:
接收模块41,用于当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定所述目标文件的地址、及所述目标文件对应的数据缓冲区的地址;其中,所述文件访问事件是,所述小程序的视图层基于接收到的针对所述目标文件的文件访问操作所生成的;
发送模块42,用于所述逻辑层将所述目标文件的地址及所述数据缓冲区的地址,发送至所述小程序的***层,所述***层连接所述逻辑层及所述视图层;
存储模块43,用于所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,并基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区;所述数据缓冲区中的所述目标数据,用于供所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
在一些实施例中,所述小程序中的文件处理装置还包括检测模块,所述创建模块用于当小程序的逻辑层检测到内存中不存在所述目标文件对应的数据缓冲区时,获取所述目标文件中的目标数据的数据大小;所述逻辑层基于所述目标数据的数据大小,创建所述目标文件对应的数据缓冲区。
在一些实施例中,所述检测模块,还用于基于所述文件访问操作所指示的数据处理类型,检测执行所述文件访问操作的目标对象与所述数据处理类型相对应的操作权限,得到检测结果;当所述检测结果表征所述目标对象具有与所述数据处理类型相对应的操作权限时,确定所述目标文件对应的数据缓冲区的地址。
在一些实施例中,所述存储模块,还用于所述***层获取所述目标数据的大小,及所述数据缓冲区的可用容量;当所述数据缓冲区的可用容量大于所述目标数据的大小时,所述***层将所述目标数据存储在所述数据缓冲区。
在一些实施例中,所述接收模块,还用于小程序的逻辑层解析所述文件访问事件,得到所述目标文件的内容操作参数,所述内容操作参数用于指示所述目标数据在所述目标文件中的位置;相应地,所述存储模块,还用于所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据;其中,所述内容操作参数包括:所述目标数据对应的内容偏移量、所述目标数据对应的内容长度中至少之一。
在一些实施例中,所述文件管理接口包括文件打开接口及文件读取接口,所述存储模块,还用于所述***层基于所述目标文件的地址,调用所述文件打开接口,打开所述目标文件,并控制所述目标文件处于可操作状态;所述***层基于所述内容操作参数,调用所述文件读取接口,在处于可操作状态的所述目标文件的数据中,读取得到所述目标数据。
在一些实施例中,所述内容操作参数包括所述目标数据的内容偏移量,所述存储模块,还用于所述***层基于所述目标文件的地址及所述内容偏移量,确定针对所述目标数据的内容起始位置;所述***层调用所述文件管理接口,从所述目标数据的内容起始位置开始,读取所述目标文件中的数据,直至所述目标文件的内容结束位置为止;将所述目标数据的内容起始位置至所述目标文件的内容结束位置之间的数据作为所述目标数据。
在一些实施例中,所述内容操作参数包括所述目标数据的内容长度,所述存储模块,还用于所述***层确定所述目标文件的内容起始位置;所述***层调用所述文件管理接口,从所述目标文件的内容起始位置开始,读取所述目标文件中目标长度的数据,并将所述目标长度的数据作为所述目标数据;其中,所述目标长度与所述目标数据的内容长度相等。
在一些实施例中,所述内容操作参数包括所述目标数据的内容偏移量及所述目标数据的内容长度,所述存储模块,还用于所述***层基于所述目标文件的地址及所述内容偏移量,确定针对所述目标数据的内容起始位置;所述***层调用所述文件管理接口,从所述目标数据的内容起始位置读取所述目标文件中目标长度的数据,并将所述目标长度的数据作为所述目标数据;其中,所述目标长度与所述文件内容长度相等。
在一些实施例中,所述存储模块,还用于所述***层向所述逻辑层发送通知消息,所述通知消息用于指示针对所述目标数据的存储操作已经完成;所述逻辑层接收到所述通知消息,并基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
在一些实施例中,所述存储模块,还用于当所述数据处理类型为数据更新时,所述逻辑层对所述数据缓冲区中的所述目标数据执行相应的数据更新操作,并向所述***层发送更新指令;相应地,所述***层接收到所述更新指令后,从所述数据缓冲区中获取更新后的目标数据,并基于所述更新后的目标数据对所述目标文件执行数据更新操作。
在一些实施例中,所述存储模块,还用于所述逻辑层对所述数据缓冲区进行周期性的数据查询,得到查询结果;当所述查询结果表征所述目标数据已存储至所述数据缓冲区时,所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行本申请实施例上述的小程序中的文件处理方法。
本申请实施例提供一种存储有可执行指令的计算机可读存储介质,其中存储有可执行指令,当可执行指令被处理器执行时,将引起处理器执行本申请实施例提供的小程序中的文件处理方法,例如,如图3示出的小程序中的文件处理方法。
在一些实施例中,计算机可读存储介质可以是FRAM、ROM、PROM、EP ROM、EEPROM、闪存、磁表面存储器、光盘、或CD-ROM等存储器;也可以是包括上述存储器之一或任意组合的各种设备。
在一些实施例中,可执行指令可以采用程序、软件、软件模块、脚本或代码的形式,按任意形式的编程语言(包括编译或解释语言,或者声明性或过程性语言)来编写,并且其可按任意形式部署,包括被部署为独立的程序或者被部署为模块、组件、子例程或者适合在计算环境中使用的其它单元。
作为示例,可执行指令可以但不一定对应于文件***中的文件,可以可被存储在保存其它程序或数据的文件的一部分,例如,存储在超文本标记语言(H TML,Hyper TextMarkup Language)文档中的一个或多个脚本中,存储在专用于所讨论的程序的单个文件中,或者,存储在多个协同文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。
作为示例,可执行指令可被部署为在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行。
综上所述,通过本申请实施例不需要目标数据在逻辑层和***层之间相互传输,逻辑层和***层之间可以通过指令发送的方式进行通信,如此,大大减少小程序中针对文件的访问通信量,提高文件操作效率。另外,在小程序的一次运行期间,针对目标文件的文件访问操作次数较多时,可以执行一次打开和一次关闭操作。如此,能够大大减少大量的重复操作,提升文件操作的速度。
以上所述,仅为本申请的实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和范围之内所作的任何修改、等同替换和改进等,均包含在本申请的保护范围之内。
Claims (16)
1.一种小程序中的文件处理方法,其特征在于,所述方法包括:
当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定所述目标文件的地址、及所述目标文件对应的数据缓冲区的地址;
其中,所述文件访问事件是,所述小程序的视图层基于接收到的针对所述目标文件的文件访问操作所生成的;
所述逻辑层将所述目标文件的地址及所述数据缓冲区的地址,发送至所述小程序的***层,所述***层连接所述逻辑层及所述视图层;
所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,并基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区;
其中,所述数据缓冲区中的所述目标数据,用于供所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
2.如权利要求1所述的方法,其特征在于,所述确定所述目标文件对应的数据缓冲区的地址之前,所述方法还包括:
当小程序的逻辑层检测到内存中不存在所述目标文件对应的数据缓冲区时,获取所述目标文件中的目标数据的数据大小;
所述逻辑层基于所述目标数据的数据大小,创建所述目标文件对应的数据缓冲区。
3.如权利要求1所述的方法,其特征在于,所述确定所述目标文件对应的数据缓冲区的地址,包括:
所述逻辑层基于所述文件访问操作所指示的数据处理类型,检测执行所述文件访问操作的目标对象针对所述目标文件的操作权限,得到检测结果;
当所述检测结果表征所述目标对象针对所述目标文件具有与所述数据处理类型相对应的操作权限时,确定所述目标文件对应的数据缓冲区的地址。
4.如权利要求1所述的方法,其特征在于,所述基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区,包括:
所述***层获取所述目标数据的大小,及所述数据缓冲区的可用容量;
当所述数据缓冲区的可用容量大于所述目标数据的大小时,所述***层将所述目标数据存储在所述数据缓冲区。
5.如权利要求1所述的方法,其特征在于,所述方法还包括:
小程序的逻辑层解析所述文件访问事件,得到所述目标文件的内容操作参数,所述内容操作参数用于指示所述目标数据在所述目标文件中的位置;
所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,包括:
所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据;
其中,所述内容操作参数包括:所述目标数据对应的内容偏移量、所述目标数据对应的内容长度中至少之一。
6.如权利要求5所述的方法,其特征在于,所述文件管理接口包括文件打开接口及文件读取接口,所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据,包括:
所述***层基于所述目标文件的地址,调用所述文件打开接口,打开所述目标文件,并控制所述目标文件处于可操作状态;
所述***层基于所述内容操作参数,调用所述文件读取接口,在处于可操作状态的所述目标文件的数据中,读取得到所述目标数据。
7.如权利要求5所述的方法,其特征在于,所述内容操作参数包括所述目标数据的内容偏移量,所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据,包括:
所述***层基于所述目标文件的地址及所述内容偏移量,确定针对所述目标数据的内容起始位置;
所述***层调用所述文件管理接口,从所述目标数据的内容起始位置开始,读取所述目标文件中的数据,直至所述目标文件的内容结束位置为止;
将所述目标数据的内容起始位置至所述目标文件的内容结束位置之间的数据作为所述目标数据。
8.如权利要求5所述的方法,其特征在于,所述内容操作参数包括所述目标数据的内容长度,所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据,包括:
所述***层确定所述目标文件的内容起始位置;
所述***层调用所述文件管理接口,从所述目标文件的内容起始位置开始,读取所述目标文件中目标长度的数据,并将所述目标长度的数据作为所述目标数据;
其中,所述目标长度与所述目标数据的内容长度相等。
9.如权利要求5所述的方法,其特征在于,所述内容操作参数包括所述目标数据的内容偏移量及所述目标数据的内容长度,所述***层基于所述目标文件的地址及所述内容操作参数,调用文件管理接口,得到所述目标文件中的目标数据,包括:
所述***层基于所述目标文件的地址及所述内容偏移量,确定针对所述目标数据的内容起始位置;
所述***层调用所述文件管理接口,从所述目标数据的内容起始位置读取所述目标文件中目标长度的数据,并将所述目标长度的数据作为所述目标数据;
其中,所述目标长度与所述目标数据的内容长度相等。
10.如权利要求1所述的方法,其特征在于,所述基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区之后,所述方法还包括:
所述***层向所述逻辑层发送通知消息,所述通知消息用于指示针对所述目标数据的存储操作已经完成;
所述逻辑层接收到所述通知消息,并基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
11.如权利要求10所述的方法,其特征在于,所述基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作,包括:
当所述数据处理类型为数据更新时,所述逻辑层对所述数据缓冲区中的所述目标数据执行相应的数据更新操作,并向所述***层发送更新指令;
所述方法还包括:
所述***层接收到所述更新指令后,从所述数据缓冲区中获取更新后的目标数据,并基于所述更新后的目标数据对所述目标文件执行数据更新操作。
12.如权利要求1所述的方法,其特征在于,所述方法还包括:
所述逻辑层对所述数据缓冲区进行周期性的数据查询,得到查询结果;
当所述查询结果表征所述目标数据已存储至所述数据缓冲区时,所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
13.一种小程序中的文件处理装置,其特征在于,所述装置包括:
接收模块,用于当小程序的逻辑层接收到针对目标文件的文件访问事件时,确定所述目标文件的地址、及所述目标文件对应的数据缓冲区的地址;其中,所述文件访问事件是,所述小程序的视图层基于接收到的针对所述目标文件的文件访问操作所生成的;
发送模块,用于所述逻辑层将所述目标文件的地址及所述数据缓冲区的地址,发送至所述小程序的***层,所述***层连接所述逻辑层及所述视图层;
存储模块,用于所述***层基于所述目标文件的地址,调用文件管理接口,得到所述目标文件中的目标数据,并基于所述数据缓冲区的地址,将所述目标数据存储至所述数据缓冲区;所述数据缓冲区中的所述目标数据,用于供所述逻辑层基于所述文件访问操作所指示的数据处理类型,对所述目标数据执行相应类型的数据操作。
14.一种电子设备,其特征在于,所述电子设备包括:
存储器,用于存储可执行指令;
处理器,用于执行所述存储器中存储的可执行指令时,实现权利要求1至12任一项所述的小程序中的文件处理方法。
15.一种计算机可读存储介质,存储有可执行指令,其特征在于,所述可执行指令被处理器执行时实现权利要求1至12任一项所述的小程序中的文件处理方法。
16.一种计算机程序产品,包括计算机程序或指令,其特征在于,所述计算机程序或指令被处理器执行时实现权利要求1至12任一项所述的小程序中的文件处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210394105.4A CN116954937A (zh) | 2022-04-14 | 2022-04-14 | 小程序中的文件处理方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210394105.4A CN116954937A (zh) | 2022-04-14 | 2022-04-14 | 小程序中的文件处理方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116954937A true CN116954937A (zh) | 2023-10-27 |
Family
ID=88444761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210394105.4A Pending CN116954937A (zh) | 2022-04-14 | 2022-04-14 | 小程序中的文件处理方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116954937A (zh) |
-
2022
- 2022-04-14 CN CN202210394105.4A patent/CN116954937A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5439190B2 (ja) | It向けサーバベースのウェブアプリケーションを作成するための方法およびシステム | |
US7937670B2 (en) | Data sharing system, method and software tool | |
CN110020292B (zh) | 网页内容提取方法以及终端设备 | |
CN111198730B (zh) | 子应用程序启动的方法、装置、终端及计算机存储介质 | |
US10242023B2 (en) | Programming model for synchronizing browser caches across devices and web services | |
US8849957B1 (en) | Installable web applications | |
US7934163B2 (en) | Method for portlet instance support in a graphical user interface | |
US11706331B2 (en) | Information processing method and apparatus, storage medium, and electronic device | |
CN112306587A (zh) | 页面的显示处理方法、装置、及终端设备 | |
CN112631591B (zh) | 表元素联动方法、装置、设备与计算机可读存储介质 | |
KR20100057505A (ko) | 정보를 디스플레이하기 위한 시스템 및 방법 | |
CN113468448A (zh) | 页面渲染方法及装置 | |
WO2023197656A1 (zh) | 界面元素的定位方法、电子设备及存储介质 | |
CN114064024A (zh) | 微应用的开发方法、装置、设备、存储介质及程序产品 | |
CN113703893B (zh) | 一种页面渲染方法、装置、终端及存储介质 | |
WO2023169252A1 (zh) | 多媒体内容处理方法、装置、设备、程序产品及存储介质 | |
CN111596916A (zh) | 一种应用程序管理方法、装置、设备及计算机存储介质 | |
CN111367518A (zh) | 页面布局方法、装置、计算设备及计算机存储介质 | |
CN113792208A (zh) | 基于网页的图片交互方法、装置、设备、介质及程序产品 | |
CN110083407B (zh) | 小程序中步骤条的实现方法、装置、电子设备及存储介质 | |
CN109101429B (zh) | 一种机顶盒的浏览器页面调试的方法及装置 | |
CN112235132A (zh) | 动态配置服务的方法、装置、介质以及服务器 | |
CN116954937A (zh) | 小程序中的文件处理方法、装置、设备及可读存储介质 | |
CN113591000B (zh) | 一种浏览器引擎的切换方法和装置及设备 | |
JP2001521217A (ja) | トラッグおよびドロップのインターフエイスを用いて制御をアブリケーションに結び付けるシステム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |