被配置为服务多个单页应用的服务工作器
背景技术:1.单页应用(spa)是一种web应用,其与浏览器进行交互以将数据写入到网页,而无需加载整个网页。经由使用单页应用,浏览器能够经由被存储在执行所述浏览器的设备上的本地文件来取回针对网页的代码(例如,超文本标记语言(html)、javascript、级联样式表(css))。亦即,用户设备能够最初从网络服务器下载单页应用并且随后执行来自本地存储装置的(一个或多个)文件,而不必取决于到网络服务器的网络连接(例如,客户端侧渲染)。
2.服务工作器是在浏览器与网络服务器之间配置的可编程网络代理。服务工作器能够拦截来自浏览器的请求,并且启用与被本地存储在设备上的单页应用的通信。更具体而言,服务工作器是浏览器在后台执行的脚本,与网页的执行分开,其允许单页应用独立地控制对针对网页的网络请求的处理,而不具有网络依赖性。服务工作器的使用允许浏览器以及因此允许用户设备减少运行时延迟、改善最终用户感知的延迟、并且减少网络依赖性。
3.常规地,服务工作器被绑定到特定的单页应用。换言之,服务工作器专用于单独的单页应用,导致在服务工作器与单页应用之间的常规一对一关联。因此,当浏览器为多个单页应用渲染网页时,用户设备需要消耗资源(例如,存储器和计算单元)来执行多个服务工作器。在许多场景中,这些多个单页应用相对同一根范围被托管。根范围可以对应于托管不同的单页应用(例如,
‘
mail.contoso.com’和
‘
calendar.contoso.com’)的在线服务域(例如,
‘
www.contoso.com’)。
4.为相对同一根范围被托管的多个单页应用执行多个服务工作器导致额外的资源使用,因为在用户从使用一个单页应用切换到另一单页应用时,必须取消注册和重新注册服务工作器。取消注册和重新注册服务工作器的该过程最终严重影响单页应用的启动时间。
5.此外,常规的服务工作器被配置为在由浏览器执行的网页的统一资源定位符(url)与单页应用之间建立确定性关联。常规的服务工作器不被配置为处理动态url,其中,在url与单页应用之间没有确定性关联。动态url能够取决于由租户定义的设置来引用不同的单页应用的页面。例如,云服务提供商的一个租户可以配置搜索应用以从
‘
www.contoso.com’提供服务,而云服务提供商的另一租户可以配置邮件应用以从相同的url
‑‘
www.contoso.com’提供服务。因此,一对一确定性方案与动态url不兼容,因为常规的服务工作器不知道动态url是否与服务工作器专用的单页应用确定性地相关联。
6.关于这些和其他考虑,在本文中提出了所做的公开。
技术实现要素:7.所公开的技术提供了一种服务工作器,其能够服务被托管在相同的统一资源定位符(url)空间(例如,在其之内托管多个单页应用的域)中的多个单页应用(spa)。因此,服务工作器的定义范围不再仅由一个单页应用来界定,而是针对服务工作器的定义范围是托管多个单页应用(例如,日历单页应用、邮件单页应用、搜索单页应用等)的网站(例如,
‘
www.contoso.com’)的根目录。经由使用在本文中所描述的技术,当用户在浏览器中从使用一个单页应用切换到使用另一单页应用(例如,用户点击日历应用中的链接以访问相同根目录中的邮件应用)时,浏览器不再需要取消注册和重新注册单独的服务工作器,因为服务于这两个单页应用的公共服务工作器已经注册并且正在执行。
8.如在本文中所描述的,用户设备的浏览器被配置为在第一次访问被包含在定义针对服务工作器的范围的根目录中的网页(例如,主页或欢迎页)时下载和/或安装服务工作器和多个单页应用。浏览器被配置为注册服务工作器。多个单页应用中的每个单页应用包括应用控制器。经由使用应用控制器,单页应用能够定义其自己的离线体验(例如,引导序列),而不必访问或接收来自网络服务器的文件和/或指令。相反,作为服务工作器包的一部分,应用控制器下载文件,并且使得能够随后访问与其所服务的单页应用相关的数据存储。为单页应用的开发人员提供控制离线场景的灵活性是很重要的,因为不同的单页应用可以不同地处理对内容的加载和/或同步,以便优化用户体验。因此,尽管在本文中所描述的服务工作器被配置为服务多个单页应用,但是服务工作器使得能够经由与单页应用相关联的单独应用控制器来执行不同的体验。
9.应用控制器被配置为管理服务工作器生命周期并且基于所述生命周期来提供各种操作。例如,经由使用应用处理程序,应用控制器能够导致为单页应用实现导航请求,诸如取得事件。在另一示例中,经由使用应用处理程序,应用控制器能够使用流式响应来动态地渲染动态超文本标记语言。在又一示例中,经由使用应用配置,应用控制器能够提供对被存储在本地数据存储中的运行时配置数据的访问。此外,生命周期操作能够包括安装操作、激活操作、请求处理操作、同步操作、消息操作等。
10.由于在本文中所描述的服务工作器为多个单页应用提供服务,所以服务工作器实现了一种方案,以确保调用与托管url的单页应用相对应的正确应用控制器。为此,服务工作器被配置为利用路由器和路由表以将来自浏览器的请求中所包括的url与对应于托管针对其发送请求的网页的url的单页应用的正确应用控制器相关联。如上文所描述的,url被托管在定义针对服务工作器的范围的根目录内。
11.在本文中所描述的各种示例中,url能够是动态url,其能够根据在租户账户中所定义的用户驱动设置与由服务工作器所服务的单页应用中的不同单页应用相关联。此外,在特定的租户组织中,动态url能够随着时间而改变其所引用的页面。在本文中所描述的其他示例中,url能够是与相同的单页应用相关联的静态url,而不管在租户账户中所定义的任何用户驱动设置。
12.路由器被配置为确定在url的一部分与在路由表中所存储的条目之间是否存在匹配。在各种示例中,所述匹配基于路由路径,所述路由路径是相对于移除了查询字符串的主机名称的url。换言之,所述路由路径是在移除了主机名称和查询字符串之后的url的剩余部分。使用路由路径而不是整个url,优化用于确定匹配的过程,并且减少系统比较短字符串时出错的机会。所述路由路径被规范化(例如,仅包括小写字母)以确保有效和高效的匹配。根据动态url和静态url,路由路径能够是动态路由路径或者静态路由路径。在匹配的情况下(例如,高速缓存命中),服务工作器被配置为使用条目来识别路由路径所引用的单页应用,并且调用针对单页应用的对应应用控制器。
13.存在服务工作器利用条目来填充路由表的各种方式。例如,当下载和/或安装应用
控制器时,能够将静态url(例如,静态路由路径)加载到路由表中。针对单页应用的应用控制器能够包括定义属于单页应用的静态url的属性。由于静态url所引用的页面跨租户账户是一致的(即,其不是由用户或租户定义的设置来驱动的),即使用户没有请求在浏览器中加载和执行对应单页应用的静态url,也能够立即将基于这些静态url的条目添加到所述路由表。因此,对静态url的初始访问能够由服务工作器和由服务工作器调用的应用控制器在本地处理。
14.在另一示例中,动态url(例如,动态路由路径)能够与对根目录中的对应页面的初始访问相关联地加载到路由表中。亦即,当第一次接收到对与动态路由路径相关联的url的请求时,服务工作器允许所述请求转到网络服务器,因为在路由表中没有针对动态路由路径的匹配条目(例如,高速缓存未命中)。网络服务器存储定义动态路由路径所引用的单页应用的用户驱动设置。网络服务器被配置为响应于所述请求,并且在响应中的头部将动态url映射到单页应用的标识。服务工作器拦截该响应并且向路由表添加条目,从而服务工作器和被调用的应用控制器能够在本地处理针对动态url的后续请求。
15.因此,在本文中所公开的服务工作器是多个应用控制器的协调器,每个应用控制器服务于定制的应用体验。服务工作器针对注册的应用控制器代理各种生命周期事件(例如,安装、激活等),并且通过依赖于识别适当的单页应用的路由表中的条目来协调生命周期事件的执行。与在服务工作器与单页应用之间提供严格的一对一关联的常规单页应用系统不同,所公开的服务工作器能够同时地服务多个单页应用(例如,实现一对n关联)。这减轻了取消注册源服务工作器和注册目标服务工作器的需要,所述需要严重影响了计算系统的性能。一旦被加载,在本文中所公开的服务工作器就能够跨应用边界而持久化,但是在定义的根范围内,由此允许多个单页应用和/或应用控制器以有效和高效的方式来共享资源。这改善了对web内容的后续加载时间,并且允许无缝的最终用户体验。
16.提供本概要是为了以简化的形式引入概念的选择,这些概念在下文的详细描述中进一步描述。本概要不是为了识别所要求保护的主题的关键或基本特征,也不是为了用于确定所要求保护的主题的范围。例如,术语“技术”可以指待上文所描述的上下文和整个文档所允许的(一个或多个)系统、(一种或多种)方法、计算机可读指令、(一个或多个)模块、算法、硬件逻辑单元和/或(一个或多个)操作。
附图说明
17.参照附图描述了详细说明。在附图中,参考数字最左边的(一个或多个)数字标识该参考数字首次出现在其中的图。不同附图中相同的参考数字表示相似或相同的项目。对多个项目中的单个项目的引用可以使用带有字母序列中的字母的参考数字来引用每个单独的项目。对项目的一般引用可以使用特定的参考数字,而不使用字母序列。
18.图l是图示了示例性环境的图,其中,服务工作器被配置为服务被托管在相同的统一资源定位符(url)空间(例如,在其之内托管spa的域)中的多个单页应用(spa)。
19.图2是图示了其中服务工作器和对应于由服务工作器所服务的单页应用的应用控制器被下载并且安装在用户设备上的示例性环境的图。
20.图3是图示了服务工作器如何被配置为将所请求的url的路由路径与路由表中的条目的路由路径相匹配并且使用所述条目来确定所请求的url所引用的单页应用的示例的
图。
21.图4是图示了由应用控制器用于执行生命周期操作的组件的图。
22.图5是由服务工作器服务被托管在相同的统一资源定位符(url)空间(例如,在其之内托管spa的域)中的多个单页应用(spa)的示例性方法的流程图。
23.图6是图示了使用客户端标识以将单页应用与由单页应用托管的多个网页中的一个网页相关联的图,这些网页当前由浏览器显示在不同的选项卡或窗口中。
24.图7是计算机架构图,其图示了能够实现在本文中所提出的技术和技艺的各方面的计算系统的说明性计算机硬件和软件架构。
25.图8是图示了能够实现在本文中所提出的技术和技艺的各方面的分布式计算环境的图。
具体实施方式
26.以下详细描述公开了用于实现服务工作器的技术和技艺,所述服务工作器能够服务被托管在相同的统一资源定位符(url)空间(例如,在其之内托管spa的域)中的多个单页应用(spa)。因此,服务工作器的定义范围不再仅由一个spa来界定,而是由托管多个spa的web站点的根目录来界定。由于在本文中所描述的服务工作器服务于多个spa,所以服务工作器实现了一种方案,以确保调用与托管url的spa相对应的正确应用控制器。为此,服务工作器被配置为利用路由器和路由表以将来自浏览器的请求中所包括的url与对应于托管针对其发送请求的url的spa的正确应用控制器相关联。
27.在各种示例中,url能够是动态url,根据在租户账户中所定义的用户驱动设置,所述动态url能够与由服务工作器所服务的单页应用中的不同的单页应用相关联。此外,在特定的租户组织内,动态url能够随着时间改变其所引用的页面。因此,多个spa所属于的url空间在本文可以被称为动态url空间,至少因为其包括一个或多个动态url。在本文中所描述的其他示例中,url能够是与相同的单页应用相关联的静态url,而与在租户账户中定义的任何用户驱动设置无关。
28.以下参考图1-8描述了所公开的技术的各种示例、场景和方面。
29.图1是图示示例性环境100的图,其中,服务工作器被配置为服务被托管在相同的统一资源定位符(url)空间(例如,在其之内托管spa的域)中的多个单页应用(spa)。如在图1中所示的,用户设备102正在执行在窗口和/或选项卡中显示网页的浏览器104。作为执行的一部分,浏览器104被配置为发起针对与所显示的网页相对应的url的请求,如由106所引用的。
30.用户设备102能够包括但不限于:台式计算机、游戏控制台和/或游戏设备、平板计算机、个人数据助理(pda)、移动电话/平板混合设备、膝上型计算机、电信设备、可穿戴设备、工作站、增强或虚拟现实设备、物联网(iot)设备、嵌入式设备或者被配置为使用浏览组件来显示网页的任意其他类型的计算设备。
31.被配置在用户设备102上并且位于浏览器104与能够由用户设备102经由(一个或多个)网络112访问的(一个或多个)网络服务器110之间的服务工作器108拦截该请求。服务工作器108是浏览器104在后台执行的脚本,与执行所显示的网页的线程分离。服务工作器108的定义范围是托管多个单页应用116(1-n)(其中,n是正数,诸如2、3、5、10等)的网站(例
如,
‘
www.contoso.com’)的根目录114。例如,单页应用能够是日历应用、邮件应用、搜索应用、列表应用等。
32.多个单页应用116(1-n)中的每个单页应用与被安装在用户设备102上的其自己的应用控制器118(1-n)相关联。经由使用应用控制器118(1-n),单页应用116(1-n)能够定义其自己的离线体验(例如,引导序列),而不必经由在(一个或多个)网络112上建立的连接从(一个或多个)网络服务器110访问或接收文件和/或指令。
33.应用控制器118(1-n)各自被配置为管理服务工作器生命周期并且基于所述生命周期来提供各种操作。由于服务工作器108服务于多个单页应用116(1-n),所以服务工作器108实现一种方案,以确保调用与托管url的单页应用相对应的正确应用控制器。为此,服务工作器108被配置为利用路由器120和路由表122以将来自浏览器的请求中所包括的url(如由106引用的)与对应于托管针对其发送请求的网页的url的单页应用的正确应用控制器相关联。
34.在服务工作器108拦截所述请求之后,路由器120被配置为识别为路由表122的搜索提供基础的url。路由表122包括将url或url的一部分与单页应用116(1-n)之一的标识相关联的不同条目。因此,路由器120被配置为确定在与所述请求相关联的url与路由表122的条目中所列出的url之间是否存在匹配。在不同的示例中,所述匹配基于路由路径,所述路由路径是相对于移除了查询字符串的主机名称的url。换言之,所述路由路径是在移除了主机名称和查询字符串之后url的剩余部分。因此,如果url是
‘
www.contoso.com/sitel/page2/querystring’,那么路由路径将是
‘
sitel/page2’。
35.使用路由路径而不是整个url,优化了用于确定匹配的过程并且减少了错误的机会,因为服务器工作器108能够比较较短的字符串。所述路由路径被规范化(例如,仅包括小写字母)以确保有效和高效的匹配。在条目匹配124(例如,高速缓存命中)的情况下,服务工作器108被配置为使用匹配条目来识别路由路径所引用的单页应用116(1-n)中的一个。例如,与所述请求相关联的url可以与单页应用116(1)相关联,并且因此,条目匹配揭示了单页应用116(1)的标识。使用所述标识,服务工作器108为单页应用116(1)调用对应的应用控制器118(1)。亦即,服务工作器108通过调用应用控制器118(1)来基于所述请求协调或触发事件的执行。
36.在没有条目匹配126(例如,高速缓存未命中)的情况下,服务工作器108不进一步干扰所述请求,并且让所述请求转到(一个或多个)网络服务器110以用于处理,如在本文中进一步描述的。
37.图2是图示了示例性环境200的图,其中,服务工作器108和与由服务工作器108服务的单页应用116(1-n)相对应的应用控制器118(1-n)最初驻留在(一个或多个)网络服务器110上,但是通过(一个或多个)网络112被下载并且安装在用户设备102上。
38.用户设备102的浏览器被配置为在对根目录114内托管的网页(例如,主页或欢迎页)的初始网络访问202时下载和/或安装服务工作器108以及应用控制器118(1-n)和针对单页应用116(1-n)的其他数据(例如,文件)。根目录112定义针对服务工作器108的范围。
39.图2图示了应用控制器118(1-n)中的每个应用控制器定义其自己的离线体验204、206、208。例如,离线体验204、206、208能够包括针对单页应用的引导序列,一旦服务工作器108和应用控制器118(1-n)被下载到用户设备102,就能够实现针对单页应用的引导序列,
而不必访问或接收来自(一个或多个)网络服务器110的文件。为单页应用的开发人员提供控制离线场景的灵活性是很重要的,因为不同的单页应用可以不同地处理对内容的加载和/或同步,以便优化用户体验。因此,在服务工作器108被配置为服务多个单页应用116(1-n)时,服务工作器108使得不同的体验204、206、208能够经由与单页应用116(1-n)相关联的单独的应用控制器118(1-n)来执行。
40.url能够是动态url,其能够根据定义租户账户210中的动态url和/或路由路径的用户驱动设置与由服务工作器108所服务的单页应用116(1-n)中的不同单页应用相关联。亦即,设置将动态url与单页应用116(1-n)之一相关联。url能够替代地是与相同的单页应用相关联的静态url,而不考虑任何用户驱动的设置。换言之,在静态url与单页应用之间的关联跨租户账户是相同的(例如,没有关于url引用哪个spa的用户控制方面)。
41.存在各种方式,其中,服务工作器108一旦被安装并且注册在用户设备102上,就利用条目填充图1中的路由表122。例如,静态路由路径212、214、216是应用控制器118(1-n)的一部分,并且当应用控制器118(1-n)被下载到用户设备102和/或被安装在用户设备102上时,能够被加载到路由表122中。应用控制器118(1-n)能够包括定义静态路由路径212、214、216的属性。由于静态url所引用的页面跨租户账户是一致的(即,其不是由用户或租户定义的设置驱动的),即使用户没有请求在浏览器中加载和执行静态url,也能够立即将基于这些静态url的条目添加到路由表122。因此,对静态url的初始访问导致条目匹配(例如,高速缓存命中),并且能够由已经被下载到用户设备102的服务工作器108本地处理。
42.相反,动态url(例如,动态路由路径)与对根目录114中的其对应页面的初始访问相关联地加载到路由表122中。当在用户设备102上执行的服务工作器108第一次接收到针对与动态路由路径相关联的url的请求时,服务工作器108允许所述请求转到(一个或多个)网络服务器110,因为在路由表122中没有针对动态路由路径的匹配条目(例如,高速缓存未命中)。(一个或多个)网络服务器110能够通过检查租户账户中定义的设置来确定在动态路由路径与单页应用的标识之间的关联。(一个或多个)网络服务器110被配置为响应于所述请求,并且在所述响应中的头部将动态url映射到单页应用的标识。在用户设备102上执行的服务工作器108拦截该响应,并且将条目添加到路由表122,使得由浏览器执行的针对相同动态url的后续请求能够由服务工作器108本地处理。
43.因此,在用户设备102上执行的服务工作器108是多个应用控制器的协调器,其中每个应用控制器服务于定制的离线应用体验。所述服务工作器针对注册的应用控制器代理各种生命周期事件(例如,安装、激活等),并且通过依赖于识别适当的单页应用的路由表中的条目来协调生命周期事件的执行。与常规的单页应用系统不同,所公开的服务工作器能够同时地服务多个单页应用。一旦被加载,服务工作器就能够跨应用边界而持久化,但是在定义的根范围内,由此允许多个单页应用以有效和高效的方式来共享资源。这改善了web内容的后续加载时间,并且允许无缝的最终用户体验。
44.图3是图示了服务工作器如何被配置以将所请求的url的路由路径与路由表中的条目的路由路径相匹配,并且使用所述条目来确定所请求的url所引用的单页应用的示例的图300。图3图示了由用户设备的浏览器执行的主线程302。所述主线程在四个不同的窗口和/或选项卡中显示四个网页。第一网页包括
‘
www.contoso.com’304,第二网页包括
‘
www.contoso.com/site2/page3’306,第三网页包括
‘
www.acme.com/sitel/page1’308,并
且第四网页包括
‘
www.contoso.com/site3/page2’310。图3还图示了浏览器在其中执行服务工作器108的单独线程312。
45.如先前所描述的,在至少一个示例中,服务工作器的定义范围314是针对web站点的根目录而托管的所有单页应用,诸如
‘
www.contoso.com’316。在该示例中,这些单页应用中的至少一些单页应用包括“sitel”、“site2”和“site3”,并且这些单页应用每个都能够包括多个不同的页面。
46.服务工作器108被配置为拦截针对浏览器中所显示的url 304、306、308、310的请求,并且确定所述请求是否在其范围之内。因此,服务工作器108被配置为处理针对
‘
www.contoso.com’304、
‘
www.contoso.com/site2/page3’306和
‘
www.contoso.com/site3/page2’310的请求,因为其在其范围之内。然而,服务工作器108没有被配置为处理针对
‘
www.acme.com/sitel/page1’308的请求,因为该网页不在其范围之内。
47.在服务工作器108基于定义的范围314确定请求在其边界内之后,路由器120检查路由表122以用于匹配。在图3的示例中,路由表122包括第一条目,其将针对url
‘
www.contoso.com’304的根(
‘
/’)路由路径与针对spa“site1”的应用标识相关联。路由表122包括第二条目,其将针对url
‘
www.contoso.com/site2/page3’306的路由路径“site2/page3”与针对spa“site2”的应用标识相关联。路由表122包括第三条目,其将针对url
‘
www.contoso.com/site3/page2’310的路由路径“site3/page2”与针对spa“site3”的应用标识相关联。
48.在匹配(例如,命中)的情况下,这些条目被用于识别请求对应于的单页应用。如上文所描述的,在所述条目中的路由路径能够是动态路由路径(例如,根
‘
/’可以被配置为访问针对
‘
site1’、
‘
site2’或
‘
site3’的spa)或静态路由路径(例如,
‘
site2/page3’可以仅被配置为访问
‘
针对site2’的spa)。
49.在各种示例中,服务工作器108能够在动态路由路径内实现模式匹配,以在针对整个路由路径不存在精确匹配的情况下增加匹配率或者高速缓存命中率。所述模式匹配能够使用一个或多个段作为谓词来提高匹配率。这最终节省了资源(例如,网络资源)并且减少了延迟,因为请求不需要由网络服务器来处理。例如,如果
‘
www.contoso.com’内的
‘
site1’单页应用托管
‘
page1’和
‘
page2’,并且用户已经访问了
‘
www.contoso.com/sitel/page1’,并且然后用户访问
‘
www.contoso.com/sitel/page2’,则服务工作器108能够使用两个路由路径(例如,
‘
sitel/page1’和
‘
sitel/page2’)中的一个或多个段(例如
‘
site1’)的模式匹配来确定
‘
www.contoso.com/sitel/page2’也与
‘
site1’单页应用相关联。这允许在本地调用应用控制器,而不必转到网络。
50.图4是图示了由应用控制器402用于管理和执行针对单页应用的生命周期操作的组件的图400。示例性生命周期操作能够包括安装操作、激活操作、停用操作、请求处理操作、同步操作、消息操作等。在一些实施例中,应用控制器402调用应用处理程序404以响应于导航请求(诸如取得事件)和/或其他资源请求。在一些实施例中,应用控制器402调用应用处理程序404以使用流式响应来渲染动态html。在一些实施例中,应用控制器调用应用配置406以提供对被存储在本地数据存储410的文件408中的运行时配置数据的访问。
51.图5表示根据来自图1-4的描述的各种示例的示例性过程。在图5中所示的示例性操能够经由服务工作器在用户设备102或者其他类型的设备上实现或者以其他方式体现。
52.描述操作的顺序并不意图被解释为限制,并且可以以任何顺序和/或并行地组合任何数量的所述操作以实现该过程。此外,在图5中的操作能够以硬件、软件和/或其组合来实现。在软件的上下文中,操作表示计算机可执行指令,所述计算机可执行指令当由一个或多个处理单元执行时使得一个或多个处理单元执行所述操作。例如,在本文中所描述的模块和组件能够被存储在计算机可读介质中,并且由至少一个处理单元执行以执行所描述的操作。
53.图5是用于服务工作器为被托管在相同的统一资源定位符(url)空间(例如,在其之内托管spa的域)中的多个单页应用(spa)提供服务的示例性方法500的流程图。
54.在操作502处,拦截来自在用户设备上执行的浏览器的请求。所述请求与经由浏览器显示的网页的url相关联。在操作504处,与所述请求相关联的url的至少一部分与路由表的条目中的路由路径相匹配。在操作506处,从路由表的条目中确定多个单页应用中的一个单页应用的标识。在操作508处,调用与多个单页应用中的一个单页应用相关联的应用控制器的执行以处理与url相关联的请求。
55.图6是图示了使用客户端标识将单页应用与由单页应用托管的多个网页中的不同的网页相关联的图600,这些网页当前由浏览器显示在不同的选项卡或窗口中。换言之,当经由浏览器执行相同的单页应用的多个实例(例如,不同的url)时,能够使用客户端标识。
56.如所图示的,浏览器602的主线程显示针对
‘
www.contoso.com/sitel/page1’604、
‘
www.contoso.com/sitel/page2’606和
‘
www.contoso.com/sitel/page3’608的网页。这些url中的每个url由相同的单页应用610(
‘
site1’)来托管。
57.因此,在针对每个url 604、606、608的第一导航请求时,服务工作器108能够将客户标识614、616、618分配给url 604、606、608,使得来自在浏览器中执行的每个url 604、606、608的消息能够被映射到正确的应用控制器620,并且使得资源能够被适当地提供给单页应用610的不同url 604、606、608。能够利用这些客户端标识614、616、618来填充路由表。
58.图7示出了用于能够执行计算机指令的设备(例如,在本文中所描述的服务工作器)的示例性计算机架构700的额外细节。在图7中所图示的计算机架构700包括:(一个或多个)处理单元702,包括随机存取存储器706(“ram”)和只读存储器(“rom”)708的系统存储器704,以及将存储器704耦合到处理单元702的系统总线710。
59.(一个或多个)处理单元(诸如处理单元702)能够表示例如cpu型处理单元、gpu型处理单元、现场可编程门阵列(fpga)、另一类数字信号处理器(dsp)或者在一些情况下可以由cpu驱动的其他硬件逻辑组件。例如,但不限于:能够使用的硬件逻辑组件的说明性类型包括专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑器件(cpld)等。
60.基本输入/输出系统存储在rom 508中,其包含例如在启动期间帮助在计算机架构700内的元件之间传送信息的基本例程。计算机架构700还包括大容量存储设备712,用于存储操作系统714、应用716(例如,浏览器)、组件718(例如,服务工作器等)和本文中所描述的其他数据。
61.大容量存储设备712通过连接到总线710的大容量存储控制器连接到处理单元702。大容量存储设备712及其相关联的计算机可读介质为计算机架构700提供非易失性存储设备。尽管本文包含的计算机可读介质的描述是指大容量存储设备,但本领域技术人员
应当理解,计算机可读介质可以是任何可用的计算机可读存储介质或可由计算机架构700访问的通信介质。
62.计算机可读介质可以包括计算机存储介质和/或通信介质。计算机存储介质可以包括易失性存储器、非易失性存储器和/或其他持久和/或辅助计算机存储介质、可移动和不可移动计算机存储介质中的一项或多项,其以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据的信息的任何方法或技术实现。因此,计算机存储介质包括有形和/或物理形式的介质,所述介质包含在设备和/或作为设备的一部分或设备外部的硬件组件中,所述介质包括但不限于随机存取存储器(ram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、相变存储器(pcm)、只读存储器(rom)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、闪存、光盘只读存储器(cd-rom)、数字多功能盘(dvd)、光卡或其他光存储介质,盒式磁带、磁带、磁盘存储设备、磁卡或其他磁存储设备或介质、固态存储器设备、存储阵列、网络附接存储设备、存储区域网络、托管的计算机存储设备或可用于存储和维护供计算设备访问的信息的任何其他存储存储器、存储设备和/或存储介质。
63.与计算机存储介质相反,通信介质可以在已调制数据信号中包含计算机可读指令、数据结构、程序模块或其他数据,例如载波或其他传输机制。如本文所定义的,计算机存储介质不包括通信介质。换言之,计算机存储介质不包括仅由已调制数据信号、载波或传播信号本身组成的通信介质。
64.根据各种配置,计算机架构700可以使用通过网络720到远程计算机的逻辑连接在联网环境中操作。计算机架构700可以通过连接到总线710的网络接口单元722连接到网络720。计算机架构700还可以包括输入/输出控制器724,用于接收和处理来自许多其他设备的输入,所述其他设备包括键盘、鼠标、触摸或电子触笔或笔。类似地,输入/输出控制器724可以向显示屏、打印机或其他类型的输出设备提供输出。
65.网络720可以例如包括诸如互联网的公共网络、诸如机构和/或个人内联网的专用网络,或者专用和公共网络的某种组合。网络720还可以包括任何类型的有线和/或无线网络,包括但不限于局域网(lan)、广域网(wan)、卫星网络、电缆网络、wi-fi网络、wimax网络、移动通信网络(例如,3g、4g等)或者其任何组合。网络720可以利用通信协议,包括基于分组和/或基于数据报的协议,例如互联网协议(ip)、传输控制协议(tcp)、用户数据报协议(udp)或者其他类型的协议。此外,网络720还可以包括促进网络通信和/或形成网络的硬件基础的多个设备,例如交换机、路由器、网关、接入点、防火墙、基站、中继器、骨干设备等。
66.应当理解,当加载到处理单元702中并被执行时,在本文中所描述的软件组件可以将处理单元702和整个计算机架构700从通用计算系统转换为专用计算系统,该专用计算系统被定制以促进在本文中所呈现的功能。处理单元702可以由任意数量的晶体管或其他离散电路元件构成,其可以单独地或集体地具有任意数量的状态。更具体地,处理单元702可以响应于包含在在本文中所公开的软件模块中的可执行指令而作为有限状态机操作。这些计算机可执行指令可以通过指定处理单元702如何在状态之间转换来转换处理单元702,由此转换构成处理单元702的晶体管或其他离散硬件元件。
67.图8描绘了在其中可实现在本文中所描述的技术的说明性分布式计算环境800。例如,分布式计算环境800可以包括可以向用户设备提供服务的资源。
68.因此,分布式计算环境800可以包括在网络804上操作、与网络804通信或作为网络
804的一部分的计算环境802。网络804可以包括各种接入网络。一个或多个客户端设备806a-806n(以下统称和/或通用地称为“客户端806”,在本文还称为计算设备806)可以经由网络804与计算环境802通信。在一个所示的配置中,客户端806包括计算设备806a,例如膝上型计算机、台式计算机或其他计算设备;板式或平板计算设备(“平板计算设备”)806b;移动计算设备806c,例如移动电话、智能电话或其他移动计算设备;服务器计算机806d;和/或其他设备806n。应当理解,任意数量的客户端806可以与计算环境802通信。
69.在各种示例中,计算环境802包括服务器808、数据存储设备810和一个或多个网络接口812。服务器808可以托管各种服务、虚拟机、门户和/或其他资源。在所示的配置中,服务器808托管虚拟机814、web门户816、邮箱服务818、存储服务820和/或社交网络服务822。如图8所示,服务器808还可以托管其他服务、应用、门户和/或其他资源(“其他资源”)824。这样的服务可以包括被配置为经由浏览器渲染和显示网页的单页应用。
70.如上文所描述的,计算环境802可以包括数据存储设备810。根据各种实现方式,数据存储设备810的功能由在网络804上操作或与网络804通信的一个或多个数据库提供。数据存储设备810的功能还可以由被配置为托管用于计算环境802的数据的一个或多个服务器提供。数据存储设备810可以包括、托管或提供一个或多个真实或虚拟数据存储826a-826n(以下统称和/或一般称为“数据存储826”)。数据存储826被配置为托管由服务器808使用或创建的数据和/或其他数据。换言之,数据存储826还可以托管或存储网页文档、word文档、演示文档、数据结构、用于由推荐引擎执行的算法和/或由任何应用程序使用的其他数据。数据存储826的各方面可以与用于存储文件的服务相关联。
71.计算环境802可以与网络接口812通信或由网络接口812访问。网络接口812可以包括各种类型的网络硬件和软件,用于支持包括但不限于计算设备和服务器的两个或更多个计算设备之间的通信。应当理解,网络接口812还可用于连接到其他类型的网络和/或计算机系统。
72.应当理解,本文中所描述的分布式计算环境800可以为本文中所描述的软件元素的任何方面提供任何数量的虚拟计算资源和/或其他分布式计算功能,其可以被配置为执行在本文中所公开的软件组件的任何方面。根据在本文中所公开的概念和技术的各种实现方式,分布式计算环境800将软件功能作为服务提供给计算设备。应当理解,计算设备可以包括真实或虚拟机,包括但不限于服务器计算机、web服务器、个人计算机、移动计算设备、智能电话和/或其他设备。因此,本文所公开的概念和技术的各种配置使得被配置为访问分布式计算环境800的任何设备能够利用本文所描述的功能来提供本文所公开的技术以及其他方面。
73.在本文中所提出的公开内容还包括以下条款中所述的主题。
74.示例性条款a,一种用于服务工作器为被托管在动态统一资源定位符(url)空间中的多个单页应用提供服务的计算机实现的方法,包括:由所述服务工作器拦截来自在用户设备上执行的浏览器的请求,所述请求与经由所述浏览器显示的网页的url相关联;将与所述请求相关联的所述url的至少一部分与路由表的条目中的路由路径进行匹配;根据所述路由表的所述条目来确定由所述服务工作器服务的所述多个单页应用中的一个单页应用的标识;以及调用与所述多个单页应用中的所述一个单页应用相关联的应用控制器的执行,以处理与所述url相关联的所述请求。
75.示例性条款b,示例性条款a的计算机实现的方法,其中:所述应用控制器被配置为管理针对所述多个单页应用中的所述一个单页应用的生命周期操作;并且所述生命周期操作包括以下中的一项或多项:安装操作、激活操作、请求处理操作、同步操作或者消息操作。
76.示例性条款c,示例性条款a或示例性条款b的计算机实现的方法,其中,所述应用控制器被配置为根据由所述多个单页应用中的所述一个单页应用所定义的体验来处理所述请求。
77.示例性条款d,示例性条款a至c中的任一项的计算机实现的方法,其中,所述应用控制器与和所述多个单页应用中的其他单页应用相关联的其他应用控制器分开执行。
78.示例性条款e,示例性条款a至d中的任一项的计算机实现的方法,其中,所述路由路径包括静态路由路径,并且所述方法还包括:在拦截所述请求之前安装所述服务工作器和所述应用控制器;以及在安装所述服务工作器和所述应用控制器时,根据在所述应用控制器中定义的属性,利用包括所述静态路由路径的所述条目来填充所述路由表。
79.示例性条款f,示例性条款a至d中的任一项的计算机实现的方法,其中,所述路由路径包括动态路由路径,所述动态路由路径能配置为根据由托管所述多个单页应用的基于云的平台的租户定义的设置来访问所述多个单页应用中的不同单页应用。
80.示例性条款g,示例性条款f的计算机实现的方法,还包括当所述url最初被所述浏览器访问时,基于来自网络服务器的拦截的响应,利用包括所述动态路由路径的所述条目来填充所述路由表,其中,所述拦截的响应的头部将所述动态路由路径映射到所述多个单页应用中的所述一个单页应用的所述标识。
81.示例性条款h,示例性条款a至g中的任一项的计算机实现的方法,其中,为所述服务工作器定义的范围包括用于包括所述动态url空间的网站的根目录。
82.示例性条款i,示例性条款a至h中的任一项的计算机实现的方法,其中,与所述请求相关联的所述url的至少一部分与所述路由表的所述条目中的所述路由路径的所述匹配包括一个或多个路径段的模式匹配。
83.示例性条款j,示例性条款a至i中的任一项所述的计算机实现的方法,还包括:将多个客户端标识分配给在所述浏览器中执行的所述多个单页应用中的所述一个单页应用的多个实例;以及利用所述多个客户端标识来填充所述路由表,以使得所述服务工作器能够在所述浏览器中执行的所述多个单页应用中的所述一个单页应用的所述多个实例与所述应用控制器之间路由消息。
84.示例性条款k,一种用于服务工作器为被托管在动态统一资源定位符(url)空间中的多个单页应用提供服务的设备,包括:一个或多个处理单元;以及存储指令的计算机可读存储介质,所述指令当由所述一个或多个处理单元执行时使得所述设备执行包括以下的操作:拦截来自在用户设备上执行的浏览器的请求,所述请求与经由所述浏览器显示的网页的url相关联;将与所述请求相关联的所述url的至少一部分与路由表的条目中的路由路径进行匹配;根据所述路由表的所述条目来确定所述多个单页应用中的一个单页应用的标识;以及调用与所述多个单页应用中的所述一个单页应用相关联的应用控制器的执行,以处理与所述url相关联的所述请求。
85.示例性条款l,示例性条款k的设备,其中,所述应用控制器被配置为根据由所述多个单页应用中的所述一个单页应用所定义的体验来处理所述请求。
86.示例性条款m,示例性条款k或示例性条款l的设备,其中,所述应用控制器与和所述多个单页应用中的其他单页应用相关联的其他应用控制器分开执行。
87.示例性条款n,示例性条款k至m中的任一项的设备,其中,所述路由路径包括静态路由路径,并且所述操作还包括:在拦截所述请求之前安装所述应用控制器;以及在安装所述应用控制器时,根据在所述应用控制器中定义的属性,利用包括所述静态路由路径的所述条目填充所述路由表。
88.示例性条款o,示例性条款k至m中的任一项的设备,其中,所述路由路径包括动态路由路径,所述动态路由路径能配置为根据由托管所述多个单页应用的基于云的平台的租户定义的设置来访问所述多个单页应用中的不同单页应用。
89.示例性条款p,示例性条款o的设备,其中,所述操作还包括当所述url最初被所述浏览器访问时,基于来自网络服务器的拦截的响应,利用包括所述动态路由路径的所述条目来填充所述路由表,其中,所述拦截的响应的头部将所述动态路由路径映射到所述多个单页应用中的所述一个单页应用的所述标识。
90.示例性条款q,示例性条款k至p中的任一项的设备,其中,所述操作由所述服务器工作器来执行,并且为所述服务工作器定义的范围包括用于包括所述动态url空间的网站的根目录。
91.示例性条款r,示例性条款k至q中的任一项的设备,其中,与所述请求相关联的所述url的至少一部分与所述路由表的所述条目中的所述路由路径的所述匹配包括一个或多个路径段的模式匹配。
92.示例性条款s,示例性条款k至r中的任一项的设备,其中,所述操作还包括:将多个客户端标识分配给在所述浏览器中执行的所述多个单页应用中的所述一个单页应用的多个实例;以及利用所述多个客户端标识来填充所述路由表,以使得所述服务工作器能够在所述浏览器中执行的所述多个单页应用中的所述一个单页应用的所述多个实例与所述应用控制器之间路由消息。
93.示例性条款t,一种存储指令的计算机可读存储介质,所述指令当由一个或多个处理单元执行时使得设备执行包括以下的操作:拦截来自在用户设备上执行的浏览器的请求,所述请求与经由所述浏览器显示的网页的url相关联;将与所述请求相关联的所述url的至少一部分与路由表的条目中的路由路径进行匹配;根据所述路由表的所述条目来确定所述多个单页应用中的一个单页应用的标识;以及调用与所述多个单页应用中的所述一个单页应用相关联的应用控制器的执行,以处理与所述url相关联的所述请求。
94.对本文呈现的软件模块进行编码也可以变换本文呈现的计算机可读介质的物理结构。在本描述的不同实现方式中,物理结构的具体转换可能取决于各种因素。这种因素的示例可以包括但不限于用于实现计算机可读介质的技术、计算机可读介质的特征是主存储还是辅存储,等等。例如,如果计算机可读介质被实现为基于半导体的存储器,则在本文中所公开的软件可以通过变换半导体存储器的物理状态在计算机可读介质上编码。例如,软件可以变换晶体管、电容器或构成半导体存储器的其他分立电路元件的状态。软件还可以变换这些组件的物理状态以便在其上存储数据。
95.诸如“能够”、“可以”、“可能”或“可”的条件语言,除非另有具体说明,否则在上下文中被理解为表明某些示例包括而其他示例不包括某些特征、元素和/或步骤。因此,这样
的条件语言通常并不意在暗示某些特征、元素和/或步骤以任何方式对于一个或多个示例是必需的,或者一个或多个示例必须包括用于在有或没有用户输入或提示的情况下决定某些特征、元素和/或步骤是否包括或将在任何特定示例中执行的逻辑。诸如短语“x、y或z中的至少一个”的连接性语言,除非另有特别说明,否则应理解为表示项目、术语等可以是x、y或z,或其组合。
96.在描述本发明的上下文中(特别是在所附权利要求书的上下文中)使用的术语“一”、“一个”、“该”和类似的指代物应当被解释为包括单数和复数,除非在此另有指示或与上下文明显矛盾。术语“基于(based on)”、“基于(based upon)”和类似的指代物应当被解释为“至少部分地基于”的含义,其包括“部分地基于”和“全部地基于”,除非另有说明或上下文明确矛盾。
97.应当理解,在发明内容和/或具体实施方式中对“第一”、“第二”等元素的任何引用都不打算也不应当被解释为必然对应于权利要求的“第一”、“第二”等元素的任何引用。相反,在发明内容、具体实施方式和/或权利要求中“第一”和“第二”的任何使用可用于区分相同元素的两个不同实例(例如,两个不同的单页应用、两个不同的操作等)。
98.最后,尽管已经用特定于结构特征和/或方法动作的语言描述了各种配置,但是应当理解,在所附表示中定义的主题不一定限于所描述的特定特征或动作。相反,特定特征和动作被公开为实现所要求保护的主题的示例性形式。所有示例都是为了说明目的而提供的,不应当被解释为限制。