CN108388454B - 动态提供兼容js脚本内容的方法、装置和终端设备 - Google Patents
动态提供兼容js脚本内容的方法、装置和终端设备 Download PDFInfo
- Publication number
- CN108388454B CN108388454B CN201810067414.4A CN201810067414A CN108388454B CN 108388454 B CN108388454 B CN 108388454B CN 201810067414 A CN201810067414 A CN 201810067414A CN 108388454 B CN108388454 B CN 108388454B
- Authority
- CN
- China
- Prior art keywords
- code
- script
- compatible
- list
- browser
- 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
Images
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请实施例提供了一种动态提供兼容JS脚本内容的方法、装置和终端设备,所述方法包括:对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表;将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表;根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。本申请实施例能够克服现有兼容不同浏览器的JS脚本加载资源浪费和执行速度缓慢的问题,同时也提高了开发人员的开发效率,降低人工成本。
Description
技术领域
本申请实施例涉及互联网技术领域,尤其涉及一种动态提供兼容JS脚本内容的方法、装置和终端设备。
背景技术
随着前端技术的发展,使用JS(JavaScript)的应用发展逐渐变快。面对越来越复杂的应用需要,在JavaScript社区的推动下,JS每年都会推出一些新特性和新功能,为开发人员提供更多的实现能力。
但是由于浏览器版本更新周期较长,以及不同浏览器厂商的实现存在不一致之处,导致JS的一些新语言特性和浏览器接口未能在所有浏览器上实现完整支持。
因此在大部分浏览器上,为便于开发人员使用JS的一些新语言特性和浏览器接口,需要在JS脚本内容中放置一些兼容代码,以便在检查到浏览器不能原生支持的情况下,通过所述兼容代码提供JS的新语言特性和浏览器接口的支持。
通常为了适配大部分的浏览器,避免页面中JS脚本在浏览器中因为使用了新语言特性和浏览器接口而出现异常,开发人员需要将尽可能多的兼容代码放在用户访问页面中。从而实现能够保证大部分浏览器都能正确的运行,但是这会造成JS脚本下载到浏览器的时间更长,增加了用户和服务商的流量负担。并且,JS脚本执行的时间也更长了,界面长时间处于白屏状态,影响用户体验。以及,需要开发人员同过人工分析获得需要的兼容代码,并将所述兼容代码拼接到JS脚本代码中,造成JS脚本的维护成本高。
因此,如何实现根据浏览器动态提供兼容JS脚本内容成为现有技术中亟需解决的技术问题。
发明内容
本申请实施例提供了一种动态提供兼容JS脚本内容的方法、装置和终端设备,其能够克服现有兼容不同浏览器的JS脚本加载资源浪费和执行速度缓慢的问题,同时也提高了开发人员的开发效率,降低人工成本。
根据本申请实施例的一个方面,提供了一种动态提供兼容JS脚本内容的方法,所述方法包括:
对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表;
将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表;
根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
根据本申请实施例的另一个方面,还提供了一种动态提供兼容JS脚本内容的装置,所述装置包括:
语法分析模块,用于对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表;
列表比对模块,用于将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表;
第一代码合并模块,用于根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
根据本申请实施例的又一个方面,还提供了一种终端设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的动态提供兼容JS脚本内容的方法对应的操作。
根据本申请实施例提供的技术方案,本申请对JS脚本代码运行所需的兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。从而根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。因此,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
附图说明
图1是根据本申请实施例一的一种动态提供兼容JS脚本内容的方法的步骤流程图;
图2是根据本申请实施例二的一种动态提供兼容JS脚本内容的方法的步骤流程图;
图3是根据本申请实施例二的一种动态提供兼容JS脚本内容的方法的步骤S201的一种实现的步骤流程图;
图4是根据本申请实施例二的一种动态提供兼容JS脚本内容的方法的步骤S202的另一种实现的步骤流程图;
图5是根据本申请实施例二的一种动态提供兼容JS脚本内容的方法的步骤S204的另一种实现的步骤流程图;
图6是根据本申请实施例三的一种动态提供兼容JS脚本内容的方法的步骤流程图;
图7是根据本申请实施例四的一种动态提供兼容JS脚本内容的装置的结构图;
图8是根据本申请实施例五的一种动态提供兼容JS脚本内容的装置的结构图;
图9是根据本申请实施例五的一种动态提供兼容JS脚本内容的装置的代码获得模块的一种实现的结构图;
图10是根据本申请实施例五的一种动态提供兼容JS脚本内容的装置的语法分析模块的另一种实现的结构图;
图11是根据本申请实施例五的一种动态提供兼容JS脚本内容的装置的第一代码合并模块的另一种实现的结构图;
图12是根据本申请实施例六的一种动态提供兼容JS脚本内容的装置的结构图;
图13是根据本申请实施例七的一种终端设备的结构框图;
图14是根据本申请一具体应用场景的一程序示意图;
图15是根据本申请一具体应用场景的浏览器接口示意图。
具体实施方式
下面结合附图(若干附图中相同的标号表示相同的元素)和实施例,对本申请实施例的具体实施方式作进一步详细说明。以下实施例用于说明本申请,但不用来限制本申请的范围。
本领域技术人员可以理解,本申请实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
实施例一
参照图1,示出了根据本申请实施例一的一种动态提供兼容JS脚本内容的方法的步骤流程图。
值得说明的是,本申请所述步骤S101至S103并不代表其执行的先后顺序。
本实施例的动态提供兼容JS脚本内容的方法包括以下步骤:
步骤S101:对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表。
具体地,所述运行所述JS脚本代码所需的兼容列表为所述JS脚本代码中基于JS新推出的新特性和新功能所采用的一些新语言特性和浏览器接口所需要的兼容代码列表。因此,所述JS脚本代码只有在支持这些新语言特性和浏览器接口的浏览器中才能够运行,否则需要在所述JS脚本代码中加入支持这些新语言特性和浏览器接口的兼容列表转化的兼容代码才能够运行。
此外,所述语法分析也可以在开发者本地利用模块打包器webpack,自动化构建工具gulp等构建工具实现。
步骤S102:将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
浏览器标识符(User-Agent)指的是描述了用户当前浏览器的名称、版本及操作***等信息的标识符。所述浏览器标识符指示了用户所使用浏览器能够支持的新语言特性和浏览器接口。
所述浏览器标识符所标识的各种浏览器版本的功能接口兼容列表,可以采用人工维护。
因此,本申请实施例通过比较所述兼容列表和用户请求中浏览器标识符,获得小于所述兼容列表的最小兼容列表。
步骤S103:根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
本申请根据所述最小兼容列表转化为兼容代码,即实现动态生成兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
本实施例的动态提供兼容JS脚本内容的方法可以由任意适当的具有基于浏览器动态提供兼容JS脚本内容的能力的设备执行,包括但不限于:各种终端设备或者服务器,包括但不限于PC机、平板电脑、移动终端等。
实施例二
参照图2,示出了根据本申请实施例二的一种动态提供兼容JS脚本内容的方法的步骤流程图。
值得说明的是,本申请所述步骤S201至S204并不代表其执行的先后顺序。
本实施例的动态提供兼容JS脚本内容的方法包括以下步骤:
步骤S201:根据针对访问页面的所述用户请求获得所述JS脚本代码。
在本申请实施例具体实现中,参见图3,所述步骤S201包括:
步骤S2011:获得所述访问页面上的script标签,所述script标签为JS文件链接作为参数拼接成的链接。
具体地,所述JS文件为开发者编写的JS脚本代码,将JS文件链接作为参数拼接成链接,形式如:http://example.com?src=bundle.js,使用所述script标签放置在供用户访问的页面上。
步骤S2012:通过解析所述script标签对应的JS文件链接参数,获得所述JS脚本代码。
用户访问页面时,通过解析所述script标签对应的JS文件链接参数可以获取到开发者编写的JavaScript脚本代码。
步骤S202:对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表。
具体地,所述运行所述JS脚本代码所需的兼容列表为所述JS脚本代码中基于JS新推出的新特性和新功能所采用的一些新语言特性和浏览器接口所需要的兼容代码列表。因此,所述JS脚本代码只有在支持这些新语言特性和浏览器接口的浏览器中才能够运行,否则需要在所述JS脚本代码中加入支持这些新语言特性和浏览器接口的兼容列表转化的兼容代码才能够运行。
在本申请实施例具体实现中,参见图4,所述步骤S202包括:
步骤S2021:对获得的JS脚本代码进行语法分析,解析成抽象语法树。
步骤S2022:分析所述抽象语法树,获取其中使用到的新语言特性和浏览器接口,得出运行所述JS脚本代码源代码所需的兼容列表。
步骤S203:将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
浏览器标识符指的是描述了用户当前浏览器的名称、版本及操作***等信息的标识符。所述浏览器标识符指示了用户所使用浏览器能够支持的新语言特性和浏览器接口。
所述浏览器标识符所标识的各种浏览器版本的功能接口兼容列表,可以采用人工维护。
因此,本申请实施例通过比较所述兼容列表和用户请求中浏览器标识符,获得小于所述兼容列表的最小兼容列表。
步骤S204:根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
在本申请实施例具体实现中,参见图5,所述步骤S204包括:
步骤S2041:根据所述最小兼容列表,转化为Polyfill兼容代码。
Polyfill是用于为低版本的浏览器或***提供标准接口的兼容性代码,提供了开发人员期望浏览器本身提供的接口。
步骤S2042:使用Combo技术,将所述Polyfill兼容代码与所述JS脚本代码进行合并响应所述用户请求。
Combo技术是将多个文件内容进行合并输出。前端考虑页面性能,可以对页面中的多个JS文件进行合并,最终输出一个文件,可以有效减少浏览器请求数。
本申请根据所述最小兼容列表转化为兼容代码,即实现动态生成兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
本实施例的动态提供兼容JS脚本内容的方法可以由任意适当的具有基于浏览器动态提供兼容JS脚本内容的能力的设备执行,包括但不限于:各种终端设备或者服务器,包括但不限于PC机、平板电脑、移动终端等。
实施例三
参照图6,示出了根据本申请实施例三的一种动态提供兼容JS脚本内容的方法的步骤流程图。
值得说明的是,本申请所述步骤S301至S304并不代表其执行的先后顺序。
本实施例的动态提供兼容JS脚本内容的方法包括以下步骤:
步骤S301:对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表。
具体地,所述运行所述JS脚本代码所需的兼容列表为所述JS脚本代码中基于JS新推出的新特性和新功能所采用的一些新语言特性和浏览器接口所需要的兼容代码列表。因此,所述JS脚本代码只有在支持这些新语言特性和浏览器接口的浏览器中才能够运行,否则需要在所述JS脚本代码中加入支持这些新语言特性和浏览器接口的兼容列表转化的兼容代码才能够运行。
此外,所述语法分析也可以在开发者本地利用模块打包器webpack,自动化构建工具gulp等构建工具实现。
步骤S302:将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
浏览器标识符(User-Agent)指的是描述了用户当前浏览器的名称、版本及操作***等信息的标识符。所述浏览器标识符指示了用户所使用浏览器能够支持的新语言特性和浏览器接口。
所述浏览器标识符所标识的各种浏览器版本的功能接口兼容列表,可以采用人工维护。
因此,本申请实施例通过比较所述兼容列表和用户请求中浏览器标识符,获得小于所述兼容列表的最小兼容列表。
步骤S303:根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
本申请根据所述最小兼容列表转化为兼容代码,即实现动态生成兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
步骤S304:如所述用户请求中浏览器标识符无法识别,则将运行所述JS脚本代码所需的兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
本申请实施例在所述浏览器标识符无法识别时,直接将运行所述JS脚本代码所需的兼容列表转化为兼容代码合并入所述述JS脚本代码,从而保证所述JS脚本代码可以在所述浏览器中运行。
在本申请实施例一具体实现中,所述步骤S304还包括:
利用在合并的所述兼容代码与所述JS脚本代码中***的统计代码,收集所述浏览器运行时需要兼容的接口列表更新所述浏览器标识符,以供下次用户请求识别。
具体地,本申请实施例在将所述兼容代码与所述JS脚本代码进行合并时,打入单次统计代码。在浏览器端运行合并后的所述兼容代码与所述JS脚本代码时,打出需要兼容接口列表的标识。将所述标识收集并作为所述浏览器运行时需要兼容的接口列表,更新所述浏览器标识符。
本申请实施例需要运行下一个JS脚本代码时,根据所述下一个JS脚本代码所需的兼容列表以及根据所述更新的浏览器标识符进行比对得到的最小兼容列表,从而获得所述最小兼容列表转化的兼容代码,并将所述兼容代码与所述下一个JS脚本代码进行合并响应所述用户请求。本申请实施例运行下一个JS脚本代码时,与其进行合并的兼容代码更适合。
因此,本申请实施例在运行不同的JS脚本代码时,通过多次学习更新所述浏览器标识符,从而在后续用户请求中执行步骤S302时可以获得最适合的最小的兼容列表,从而得到更少的兼容代码,进一步节约加载资源以及提高执行速度。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
本实施例的动态提供兼容JS脚本内容的方法可以由任意适当的具有基于浏览器动态提供兼容JS脚本内容的能力的设备执行,包括但不限于:各种终端设备或者服务器,包括但不限于PC机、平板电脑、移动终端等。
实施例四
参照图7,示出了根据本申请实施例四的一种动态提供兼容JS脚本内容的装置的结构图。
本实施例的动态提供兼容JS脚本内容的装置包括:
语法分析模块701,用于对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表。
列表比对模块702,用于将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
第一代码合并模块703,用于根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
具体地,所述运行所述JS脚本代码所需的兼容列表为所述JS脚本代码中基于JS新推出的新特性和新功能所采用的一些新语言特性和浏览器接口所需要的兼容代码列表。因此,所述JS脚本代码只有在支持这些新语言特性和浏览器接口的浏览器中才能够运行,否则需要在所述JS脚本代码中加入支持这些新语言特性和浏览器接口的兼容列表转化的兼容代码才能够运行。
此外,所述语法分析也可以在开发者本地利用模块打包器webpack,自动化构建工具gulp等构建工具实现。
浏览器标识符(User-Agent)指的是描述了用户当前浏览器的名称、版本及操作***等信息的标识符。所述浏览器标识符指示了用户所使用浏览器能够支持的新语言特性和浏览器接口。
所述浏览器标识符所标识的各种浏览器版本的功能接口兼容列表,可以采用人工维护。
因此,本申请实施例通过比较所述兼容列表和用户请求中浏览器标识符,获得小于所述兼容列表的最小兼容列表。
本申请根据所述最小兼容列表转化为兼容代码,即实现动态生成兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
本实施例的动态提供兼容JS脚本内容的装置可以由任意适当的具有基于浏览器动态提供兼容JS脚本内容的能力的设备执行,包括但不限于:各种终端设备或者服务器,包括但不限于PC机、平板电脑、移动终端等。
实施例五
参照图8,示出了根据本申请实施例五的一种动态提供兼容JS脚本内容的装置的结构图。
本实施例的动态提供兼容JS脚本内容的装置包括:
代码获得模块801,用于根据针对访问页面的所述用户请求获得所述JS脚本代码。
语法分析模块802,用于对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表。
列表比对模块803,用于将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
第一代码合并模块804,用于根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
在本申请实施例具体实现中,参见图9,所述代码获得模块801包括:
参数拼接单元8011,用于获得所述访问页面上的script标签,所述script标签为JS文件链接作为参数拼接成的链接。
参数解析单元8012,用于通过解析所述script标签对应的JS文件链接参数,获得所述JS脚本代码。
具体地,所述JS文件为开发者编写的JS脚本代码,将JS文件链接作为参数拼接成链接,形式如:http://example.com?src=bundle.js,使用所述script标签放置在供用户访问的页面上。
用户访问页面时,通过解析所述script标签对应的JS文件链接参数可以获取到开发者编写的JavaScript脚本代码。
具体地,所述运行所述JS脚本代码所需的兼容列表为所述JS脚本代码中基于JS新推出的新特性和新功能所采用的一些新语言特性和浏览器接口所需要的兼容代码列表。因此,所述JS脚本代码只有在支持这些新语言特性和浏览器接口的浏览器中才能够运行,否则需要在所述JS脚本代码中加入支持这些新语言特性和浏览器接口的兼容列表转化的兼容代码才能够运行。
在本申请实施例具体实现中,参见图10,所述语法分析模块802包括:
语法解析单元8021,用于对获得的JS脚本代码进行语法分析,解析成抽象语法树。
列表获得单元8022,用于分析所述抽象语法树,获取其中使用到的新语言特性和浏览器接口,得出运行所述JS脚本代码源代码所需的兼容列表。
浏览器标识符指的是描述了用户当前浏览器的名称、版本及操作***等信息的标识符。所述浏览器标识符指示了用户所使用浏览器能够支持的新语言特性和浏览器接口。
所述浏览器标识符所标识的各种浏览器版本的功能接口兼容列表,可以采用人工维护。
在本申请实施例具体实现中,参见图11,所述第一代码合并模块804包括:
代码转换单元8041,用于根据所述最小兼容列表,转化为Polyfill兼容代码。
代码响应单元8042,用于使用Combo技术,将所述Polyfill兼容代码与所述JS脚本代码进行合并响应所述用户请求。
Polyfill是用于为低版本的浏览器或***提供标准接口的兼容性代码,提供了开发人员期望浏览器本身提供的接口。
Combo技术是将多个文件内容进行合并输出。前端考虑页面性能,可以对页面中的多个JS文件进行合并,最终输出一个文件,可以有效减少浏览器请求数。
因此,本申请实施例通过比较所述兼容列表和用户请求中浏览器标识符,获得小于所述兼容列表的最小兼容列表。
本申请根据所述最小兼容列表转化为兼容代码,即实现动态生成兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
本实施例的动态提供兼容JS脚本内容的装置可以由任意适当的具有基于浏览器动态提供兼容JS脚本内容的能力的设备执行,包括但不限于:各种终端设备或者服务器,包括但不限于PC机、平板电脑、移动终端等。
实施例六
参照图12,示出了根据本申请实施例六的一种动态提供兼容JS脚本内容的装置的结构图。
本实施例的动态提供兼容JS脚本内容的装置包括:
语法分析模块1201,用于对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表。
列表比对模块1202,用于将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
第一代码合并模块1203,用于根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
第二代码合并模块1204,用于如所述用户请求中浏览器标识符无法识别,则将运行所述JS脚本代码所需的兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
具体地,所述运行所述JS脚本代码所需的兼容列表为所述JS脚本代码中基于JS新推出的新特性和新功能所采用的一些新语言特性和浏览器接口所需要的兼容代码列表。因此,所述JS脚本代码只有在支持这些新语言特性和浏览器接口的浏览器中才能够运行,否则需要在所述JS脚本代码中加入支持这些新语言特性和浏览器接口的兼容列表转化的兼容代码才能够运行。
此外,所述语法分析也可以在开发者本地利用模块打包器webpack,自动化构建工具gulp等构建工具实现。
浏览器标识符(User-Agent)指的是描述了用户当前浏览器的名称、版本及操作***等信息的标识符。所述浏览器标识符指示了用户所使用浏览器能够支持的新语言特性和浏览器接口。
所述浏览器标识符所标识的各种浏览器版本的功能接口兼容列表,可以采用人工维护。
因此,本申请实施例通过比较所述兼容列表和用户请求中浏览器标识符,获得小于所述兼容列表的最小兼容列表。
本申请根据所述最小兼容列表转化为兼容代码,即实现动态生成兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
本申请实施例在所述浏览器标识符无法识别时,直接将运行所述JS脚本代码所需的兼容列表转化为兼容代码合并入所述述JS脚本代码,从而保证所述JS脚本代码可以在所述浏览器中运行。
在本申请实施例一具体实现中,所述第二代码合并模块1204还用于:
利用在合并的所述兼容代码与所述JS脚本代码中***的统计代码,收集所述浏览器运行时需要兼容的接口列表更新所述浏览器标识符,以供下次用户请求识别。
具体地,本申请实施例在将所述兼容代码与所述JS脚本代码进行合并时,打入单次统计代码。在浏览器端运行合并后的所述兼容代码与所述JS脚本代码时,打出需要兼容接口列表的标识。将所述标识收集并作为所述浏览器运行时需要兼容的接口列表,更新所述浏览器标识符。
本申请实施例需要运行下一个JS脚本代码时,根据所述下一个JS脚本代码所需的兼容列表以及根据所述更新的浏览器标识符进行比对得到的最小兼容列表,从而获得所述最小兼容列表转化的兼容代码,并将所述兼容代码与所述下一个JS脚本代码进行合并响应所述用户请求。本申请实施例运行下一个JS脚本代码时,与其进行合并的兼容代码更适合。
因此,本申请实施例在运行不同的JS脚本代码时,通过多次学习更新所述浏览器标识符,从而在后续用户请求中执行步骤S302时可以获得最适合的最小的兼容列表,从而得到更少的兼容代码,进一步节约加载资源以及提高执行速度。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
本实施例的动态提供兼容JS脚本内容的装置可以由任意适当的具有基于浏览器动态提供兼容JS脚本内容的能力的设备执行,包括但不限于:各种终端设备或者服务器,包括但不限于PC机、平板电脑、移动终端等。
实施例七
参照图13,示出了根据本申请实施例七的一种终端设备的结构框图,本申请具体实施例并不对终端设备的具体实现做限定。
如图13所示,该终端设备可以包括:处理器(processor)1302、通信接口(Communications Interface)1304、存储器(memory)1306、以及通信总线1308。
其中:
处理器1302、通信接口1304、以及存储器1306通过通信总线1308完成相互间的通信。
通信接口1304,用于与其它设备比如其它终端或服务器等的网元通信。
处理器1302,用于执行程序1310,具体可以执行上述动态提供兼容JS脚本内容的方法实施例中的相关步骤。
具体地,程序1310可以包括程序代码,该程序代码包括计算机操作指令。
处理器1302可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。终端设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器1306,用于存放程序1310。存储器1306可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序1310具体可以用于使得处理器1302执行以下操作:对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表;将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表;根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
在一种可选的实施方式中,程序1310还用于根据针对访问页面的所述用户请求获得所述JS脚本代码。
在一种可选的实施方式中,程序1310还用于获得所述访问页面上的script标签,所述script标签为JS文件链接作为参数拼接成的链接;通过解析所述script标签对应的JS文件链接参数,获得所述JS脚本代码。
在一种可选的实施方式中,程序1310还用于对获得的JS脚本代码进行语法分析,解析成抽象语法树;分析所述抽象语法树,获取其中使用到的新语言特性和浏览器接口,得出运行所述JS脚本代码源代码所需的兼容列表。
在一种可选的实施方式中,程序1310还用于根据所述最小兼容列表,转化为Polyfill兼容代码;使用Combo技术,将所述Polyfill兼容代码与所述JS脚本代码进行合并响应所述用户请求。
在一种可选的实施方式中,程序1310还用于如所述用户请求中浏览器标识符无法识别,则将运行所述JS脚本代码所需的兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
在一种可选的实施方式中,程序1310还用于利用在合并的所述兼容代码与所述JS脚本代码中***的统计代码,收集所述浏览器运行时需要兼容的接口列表更新所述浏览器标识符,以供下次用户请求识别。
通过本实施例,本申请兼容代码为根据浏览器标识符和所述JS脚本代码所需的兼容列表合并产生的最小兼容列表产生,克服了现有兼容不同浏览器的JS脚本加入大量兼容代码,从而造成加载资源浪费和执行速度缓慢的问题。同时本申请无需开发人员分析获得所述兼容代码,也提高了开发人员的开发效率,降低了人工成本。
下面通过本申请一具体应用场景进一步说明本申请实现。
开发者为了实现"判断一个数组内是否包含一个指定值"的功能,使用了Array.prototype.includes()这个数组接口。参见图14,本申请对生成的JS脚本代码进行语法分析,识别符为includes,将Array.prototype.includes收集作为运行所述JS脚本代码所需的兼容列表。
当用户甲访问所述网页,服务通过识别所述浏览器标识符确定用户浏览器为Internet Explorer 11,参见图15,查表可知所述浏览器不能支持Array.prototype.includes这个接口。
将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表。
根据所述最小兼容列表转化为兼容代码Polyfill,并将所述兼容代码Polyfill与所述JS脚本代码进行合并响应所述用户请求。
所述JS脚本在用户的Internet Explorer 11浏览器上能够正确运行,开发者在这个过程中不需要进行人工干预。
下面通过本申请另一具体应用场景进一步说明本申请实现。
开发者使用上例相同JS代码。
开发者为了实现"判断一个数组内是否包含一个指定值"的功能,使用了Array.prototype.includes()这个数组接口。参见图14,本申请对生成的JS脚本代码进行语法分析,识别符为includes,将Array.prototype.includes收集作为运行所述JS脚本代码所需的兼容列表。
当用户甲访问所述网页,服务通过识别所述浏览器标识符确定用户浏览器为Google Chrome 60,查表可知该浏览器已经支持Array.prototype.includes这个接口。
将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表为0,则获得为0的兼容代码,将所述JS脚本代码压缩后直接返回给用户,所述JS脚本在用户的Google Chrome 60浏览器上能够正确运行,开发人员在这个过程中同样不需要进行人工干预。
需要指出,根据实施的需要,可将本申请实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本申请实施例的目的。
上述根据本申请实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的动态提供兼容JS脚本内容的方法。此外,当通用计算机访问用于实现在此示出的动态提供兼容JS脚本内容的方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的动态提供兼容JS脚本内容的方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
以上实施方式仅用于说明本申请实施例,而并非对本申请实施例的限制,有关技术领域的普通技术人员,在不脱离本申请实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本申请实施例的范畴,本申请实施例的专利保护范围应由权利要求限定。
Claims (15)
1.一种动态提供兼容JS脚本内容的方法,其特征在于,所述方法包括:
对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表;
将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表;
根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
2.根据权利要求1所述的方法,其特征在于,所述对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码源代码所需的兼容列表之前还包括:
根据针对访问页面的所述用户请求获得所述JS脚本代码。
3.根据权利要求2所述的方法,其特征在于,所述根据针对访问页面的所述用户请求获得所述JS脚本代码包括:
获得所述访问页面上的script标签,所述script标签为JS文件链接作为参数拼接成的链接;
通过解析所述script标签对应的JS文件链接参数,获得所述JS脚本代码。
4.根据权利要求1所述的方法,其特征在于,所述对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码源代码所需的兼容列表包括:
对获得的JS脚本代码进行语法分析,解析成抽象语法树;
分析所述抽象语法树,获取其中使用到的新语言特性和浏览器接口,得出运行所述JS脚本代码源代码所需的兼容列表。
5.根据权利要求1所述的方法,其特征在于,所述根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求包括:
根据所述最小兼容列表,转化为Polyfill兼容代码;
使用Combo技术,将所述Polyfill兼容代码与所述JS脚本代码进行合并响应所述用户请求。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如所述用户请求中浏览器标识符无法识别,则将运行所述JS脚本代码所需的兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
7.根据权利要求6所述的方法,其特征在于,所述如所述用户请求中浏览器标识符无法识别,则将运行所述JS脚本代码所需的兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求还包括:
利用在合并的所述兼容代码与所述JS脚本代码中***的统计代码,收集所述浏览器运行时需要兼容的接口列表更新所述浏览器标识符,以供下次用户请求识别。
8.一种动态提供兼容JS脚本内容的装置,其特征在于,所述装置包括:
语法分析模块,用于对获得的JS脚本代码进行语法分析,获得运行所述JS脚本代码所需的兼容列表;
列表比对模块,用于将所述兼容列表和用户请求中浏览器标识符进行比对,获得所述浏览器运行所述JS脚本代码所需的最小兼容列表;
第一代码合并模块,用于根据所述最小兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
代码获得模块,用于根据针对访问页面的所述用户请求获得所述JS脚本代码。
10.根据权利要求9所述的装置,其特征在于,所述代码获得模块包括:
参数拼接单元,用于获得所述访问页面上的script标签,所述script标签为JS文件链接作为参数拼接成的链接;
参数解析单元,用于通过解析所述script标签对应的JS文件链接参数,获得所述JS脚本代码。
11.根据权利要求8所述的装置,其特征在于,所述语法分析模块包括:
语法解析单元,用于对获得的JS脚本代码进行语法分析,解析成抽象语法树;
列表获得单元,用于分析所述抽象语法树,获取其中使用到的新语言特性和浏览器接口,得出运行所述JS脚本代码源代码所需的兼容列表。
12.根据权利要求8所述的装置,其特征在于,所述第一代码合并模块包括:
代码转换单元,用于根据所述最小兼容列表,转化为Polyfill兼容代码;
代码响应单元,用于使用Combo技术,将所述Polyfill兼容代码与所述JS脚本代码进行合并响应所述用户请求。
13.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第二代码合并模块,用于如所述用户请求中浏览器标识符无法识别,则将运行所述JS脚本代码所需的兼容列表转化为兼容代码,并将所述兼容代码与所述JS脚本代码进行合并响应所述用户请求。
14.根据权利要求13所述的装置,其特征在于,所述第二代码合并模块还用于:
利用在合并的所述兼容代码与所述JS脚本代码中***的统计代码,收集所述浏览器运行时需要兼容的接口列表更新所述浏览器标识符,以供下次用户请求识别。
15.一种终端设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7中任一项对应的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810067414.4A CN108388454B (zh) | 2018-01-24 | 2018-01-24 | 动态提供兼容js脚本内容的方法、装置和终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810067414.4A CN108388454B (zh) | 2018-01-24 | 2018-01-24 | 动态提供兼容js脚本内容的方法、装置和终端设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108388454A CN108388454A (zh) | 2018-08-10 |
CN108388454B true CN108388454B (zh) | 2021-08-20 |
Family
ID=63076402
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810067414.4A Active CN108388454B (zh) | 2018-01-24 | 2018-01-24 | 动态提供兼容js脚本内容的方法、装置和终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108388454B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109284096A (zh) * | 2018-08-22 | 2019-01-29 | 深圳点猫科技有限公司 | 一种编程项目的自动化构建方法及电子设备 |
CN109408107B (zh) * | 2018-10-09 | 2022-06-21 | 深圳点猫科技有限公司 | 一种基于教育***的提高检索速度的方法及电子设备 |
CN109542501B (zh) * | 2018-10-25 | 2022-04-15 | 平安科技(深圳)有限公司 | 浏览器表格兼容方法、装置、计算机设备及存储介质 |
CN109783160B (zh) * | 2019-01-29 | 2022-04-26 | 广东九联科技股份有限公司 | 一种快速传送及渲染的网页文件加载***及方法 |
CN110457616B (zh) * | 2019-07-24 | 2024-02-13 | 万达信息股份有限公司 | 一种异构cpu体系下网页一致性展示的方法 |
CN111800461A (zh) * | 2020-05-27 | 2020-10-20 | 深圳壹账通智能科技有限公司 | 浏览器的脚本下载方法、装置、设备及存储介质 |
CN113971027A (zh) * | 2021-10-26 | 2022-01-25 | 北京字节跳动网络技术有限公司 | 一种代码转换方法、装置、计算机设备和存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859246A (zh) * | 2009-04-08 | 2010-10-13 | 英业达股份有限公司 | 依据不同浏览器转换相应脚本的***及其方法 |
US20120110026A1 (en) * | 2010-10-28 | 2012-05-03 | Unisys Corp. | Data tables accessible by two scripts |
CN103365640A (zh) * | 2012-03-30 | 2013-10-23 | 中兴通讯股份有限公司 | 层叠样式表样式转换方法及装置 |
CN103634358A (zh) * | 2012-08-27 | 2014-03-12 | 深圳中兴网信科技有限公司 | 一种浏览器适配方法和装置 |
CN104375858A (zh) * | 2014-10-27 | 2015-02-25 | 深信服网络科技(深圳)有限公司 | 多浏览器平台执行javascript脚本的方法及装置 |
CN106354484A (zh) * | 2015-07-16 | 2017-01-25 | 中兴通讯股份有限公司 | 一种浏览器兼容方法及浏览器 |
CN107066496A (zh) * | 2016-12-29 | 2017-08-18 | 重庆南华中天信息技术有限公司 | 一种兼容不同浏览器和终端设备的页面访问方法 |
-
2018
- 2018-01-24 CN CN201810067414.4A patent/CN108388454B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101859246A (zh) * | 2009-04-08 | 2010-10-13 | 英业达股份有限公司 | 依据不同浏览器转换相应脚本的***及其方法 |
US20120110026A1 (en) * | 2010-10-28 | 2012-05-03 | Unisys Corp. | Data tables accessible by two scripts |
CN103365640A (zh) * | 2012-03-30 | 2013-10-23 | 中兴通讯股份有限公司 | 层叠样式表样式转换方法及装置 |
CN103634358A (zh) * | 2012-08-27 | 2014-03-12 | 深圳中兴网信科技有限公司 | 一种浏览器适配方法和装置 |
CN104375858A (zh) * | 2014-10-27 | 2015-02-25 | 深信服网络科技(深圳)有限公司 | 多浏览器平台执行javascript脚本的方法及装置 |
CN106354484A (zh) * | 2015-07-16 | 2017-01-25 | 中兴通讯股份有限公司 | 一种浏览器兼容方法及浏览器 |
CN107066496A (zh) * | 2016-12-29 | 2017-08-18 | 重庆南华中天信息技术有限公司 | 一种兼容不同浏览器和终端设备的页面访问方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108388454A (zh) | 2018-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108388454B (zh) | 动态提供兼容js脚本内容的方法、装置和终端设备 | |
CN111083225B (zh) | 在物联网平台中的数据处理方法、装置及物联网平台 | |
CN109766099B (zh) | 前端源码编译方法、装置、存储介质及计算机设备 | |
CN107957940B (zh) | 一种测试日志处理方法、***及终端 | |
CN109597618B (zh) | 程序开发方法、装置、计算机设备及存储介质 | |
CN107797823B (zh) | 业务规则管理方法、装置、存储介质和计算机设备 | |
CN112394942A (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
CN113672224A (zh) | 小程序页面代码生成方法、装置及计算机设备 | |
CN110543427A (zh) | 测试用例存储方法、装置、电子设备及存储介质 | |
CN111580821B (zh) | 脚本绑定方法、装置、电子设备及计算机可读存储介质 | |
CN115329170A (zh) | 网页抓取方法、装置、设备以及存储介质 | |
CN111752916B (zh) | 数据采集方法及装置、计算机可读存储介质、电子设备 | |
CN117008920A (zh) | 引擎***、请求处理方法、装置、计算机设备及存储介质 | |
CN110489124B (zh) | 源代码执行方法、装置、存储介质及计算机设备 | |
CN109597952B (zh) | 网页信息处理方法、***、电子设备和存储介质 | |
CN113821486B (zh) | pod库之间依赖关系的确定方法及其装置、电子设备 | |
CN113141407B (zh) | 一种页面资源加载方法、装置和电子设备 | |
CN110297639B (zh) | 用于检测代码的方法和装置 | |
CN112650502A (zh) | 批处理任务处理方法、装置、计算机设备和存储介质 | |
CN113138767A (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN111151008A (zh) | 游戏运营数据的校验方法、装置、配置后台及介质 | |
EP2597568A1 (en) | Method and device for improving performance of mobile widget | |
CN111258586B (zh) | 快应用运行、编译方法、装置、电子设备和存储介质 | |
CN110806896A (zh) | 基于maven插件实现软件开发中国际化信息提取方法 | |
CN114035799B (zh) | 一种网络文件编译方法、装置、存储介质及电子装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200527 Address after: 310051 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province Applicant after: Alibaba (China) Co.,Ltd. Address before: 510627 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping B radio square 14 storey tower Applicant before: GUANGZHOU UCWEB COMPUTER TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |