网页最优化的制作方法

文档序号:6349396阅读:168来源:国知局
专利名称:网页最优化的制作方法
网页最优化
背景技术
万维网为共享信息提供了方便的平台。通过网站而提供的众多服务包括银行、购物和电子邮件。现在,为了提供更好的服务,许多公司向各访问者提供定制的网页。举例来说,所述定制包括基于访问者的位置提供气象预报、选择目标广告和利用网站提供对访问者账户的访问。由于发送给访问者的各网页是定制的,因此,托管所述网站的网络服务器必须如访问者所要求的那样,根据需要创建每个定制的网页。因此,提供定制的网页会造成网络服务器的处理资源紧张。网页的日益普及还增加了网络资源上用于发送和接收网页的通信负载
发明内容
在一个实施例中,一种方法包括选择初始源代码,识别所述初始源代码的服务器端的可执行部分和所述初始源代码的服务器端的静态部分,向所述初始源代码的服务器端的静态部分分配标识符,将所述初始源代码的服务器端的可执行部分和所述标识符组合以创建中间源代码,其中,所述标识符替换所述初始源代码的服务器端的静态部分,以及创建客户机端的可执行程序,其包括服务器端的静态部分和所述中间源代码,并且当被执行时其用所述初始源代码的服务器端的静态部分来替换所述中间源代码中的所述标识符。在某些实施例中,所述客户机端的可执行程序可被编码,比如通过压缩。在另一个实施例中,一种用于控制服务器计算机的方法包括在所述服务器计算机处接收请求,检索与所述请求相关的最优化源代码,执行一部分所述最优化源代码,替换执行结果中的字符,并响应于所述请求提供带有替换字符的执行结果。在又一个实施例中,一种设备包括耦合的网络服务器计算机,以通过网络接收网页请求,并响应于该请求,选择所请求的网页的最优化版本、执行所述最优化版本中的服务器端的可执行代码以及向请求者提供带响应首部(response header)的执行结果,所述响应首部表明所述执行结果处于压缩格式。在其它另一个实施例中,一种方法包括选择初始源代码,识别所述初始源代码的服务器端的可执行部分和所述初始源代码的服务器端的静态部分,向所述初始源代码的服务器端的可执行部分分配标识符,将所述初始源代码的服务器端的静态部分和所述标识符组合以创建中间源代码,其中,所述标识符替换所述初始源代码的服务器端的可执行部分,以及创建客户机端的可执行程序,其包括服务器端的可执行部分和所述中间源代码,并且当被执行时其用所述初始源代码的服务器端的可执行部分来替换所述标识符。


结合附图,根据下面的详细说明可完全透彻地理解本公开。要强调的是,根据行业中的常规作法,许多特征并未按比例绘制。事实上,为了讨论清楚,可任意地增加或减少许多特征的尺寸。此外,为简单起见,未在所有附图中示出所有特征。图I示出用于实现网页最优化的系统。
图2-7示出被处理的各个阶段的实例文档。图8示出显示由图2-7中示出的实例文档所产生的内容的网络浏览器窗口。图9示出用于准备压缩文档的处理。图10示出用于送交最优化网页的处理。图11示出用于从网络服务器请求和接收最优化内容的处理。图12-13和15示出被处理以创建最优化文档的各个阶段的实例文档。图14示出替换的字符在存储器中的存储位置。·图16示出用于准备压缩网页的处理。图17示出用于送交网页的处理,其适用于以压缩网页的方式使用。图18示出用于从网络服务器请求和接收内容的处理。图19示出文档,该文档使用DIV标签来存储网页的所述静态内容和服务器端的可执行部分。图20示出用于测试最优化网页的处理。图21说明另一个用于测试所述最优化处理的处理。图22示出用于将网络服务器计算机的服务能力进行最优化的系统。图23示出另一用于将网络服务器计算机的服务能力进行最优化的系统。
具体实施例方式本说明书总体上涉及万维网和一种改善网页的方法。然而,应当理解的是,下述说明提供许多不同的实施例或实例,用于实现本发明的不同特征。为简化本说明书,组件和配置的特定实例描述如下。当然,这些仅仅是实例而不旨在限制。参考图1,示出用于实现网页最优化技术的系统100。所述系统包括服务器计算机102,其提供对文档(如网页)的访问。服务器计算机102可执行网络服务器软件,其接收网页请求并通过传输网页来响应所述请求。实例网络服务器软件包括可从微软获得的国际互联网络信息服务器软件和可从阿帕奇软件基金会获得的阿帕奇(Apache)软件。响应于请求,所述网络服务器软件选择网页文件,其包含用于产生所请求的网页的源代码。所述网络服务器软件执行部分所述源代码,并向客户计算机104发送执行结果。客户计算机104通过网络106耦合至服务器计算机102。客户计算机104执行网络浏览器软件,举例来说,其通过向服务器计算机102请求网页和向用户显示所接收的网页,允许用户访问网络应用。所述网络浏览器软件也可执行所接收的网页的部分。网络浏览器软件的实例包括微软的Internet Explorer、苹果的Safari、Mozilla的Firefox和谷歌的Chrome。网络106提供客户计算机104与所述服务器计算机102之间的通信路径。网络106可包括多个有线或无线连接,并且,在客户计算机104和服务器计算机102之间的所述通信路径中,可存在零个或更多的额外计算机。网络106可包括电连接、光学连接、射频连接、任何其它适当的通信连接或多种连接方法的组合。网络106可包括设备,例如,交换机、路由器、集线器、多路复用器、信号分离器、调制器、解调器以及其它适当的设备。或者,在环回接口(loopback interface)或虚拟化软件的情况下,网络106可是虚拟连接,其允许所述网络浏览器软件和所述网络服务器软件执行于相同的计算机硬件上。网络106还可包括未示出的额外的客户机和服务器。网络106的实例包括因特网(例如,公用的国际互联网)和内部网(例如,非公用的联合网)。在其它实施例中,可通过客户机104和服务器102请求和传输不同于网页的文档。举例来说,所述文档可以是可扩展标记语言(XML)文档。客户机104和服务器102可包括一个或多个设备(未示出),用于向计算机可读介质存储数据和从其检索数据。所述设备可并入客户机104和/或服务器102,或直接或间接地附上所述设备,或者,也可通过网络或数据总线或者它们的任意组合来访问所述设备。示例设备包括寄存器、易失性存储器(例如,随机存取存储器)和非易失存储器(例如,硬盘驱动器或光驱)。应当理解,对任何这些计算机可读介质来说,存储数据,其通常实质上为二进制,需要对有形物品(physical article)的状态进行转换。举例来说,向寄存器或向随机存取存储器存储数据位通常包括对电容器充电或放电或是设置触发器的状态。向磁性介质存储数据位通常包括改变所述磁性介质内的一个或多个微粒子的磁性。向光盘存储数据位通常包括烧灼有机染料或改变合金的状态。因此,向计算机可读介质存储数据位包括更新有形物品,以便它包含所述存储数据位的表示。存储更大或更复杂的数据是通过存储它的所有组成位而实现的,或顺序或同时或两者兼有之。所有计算机存储器或其它存储设备的参考旨在覆盖任何适当的计算机可读介质。 图2-7示出被处理的各个阶段的实例文档。图2示出可存储在服务器计算机102上的实例文档202。如图所示,实例文档202是网页文档,其包含用于一个或多个计算机的指令,当执行所述指令时即产生视觉上可显示的输出,该输出对人的肉眼来说实际可见的。例如,实例文档202包括将由网络服务器执行的指令和将由网络浏览器客户机执行的指令。所述指令确定可见输出的内容及其结构,例如,可显示的元素相互之间的和相对于所述整个可见输出的边界的位置。实例文档202包括首部203和主体部204。首部203包括服务器端包括声明206,所述包括声明206指示网络服务器在送交实例文档202的时侯合并另一个文档的内容。图3示出对应于第一处理步骤之后的实例文档202的实例文档302。具体地,实例文档302包括参照服务器端包括声明206而从所述文档插入的内容304。内容304替换服务器端包括声明206。图4示出对应于下一处理步骤之后的实例文档302的实例文档402。文档302的服务器端的静态部分已经替换为标识符404和406。所述标识符具有结构,该结构出现在初始文档中的可能性不大。标识符404为" |0001:01]〃的值,或是三个波浪字符,接着是管道符,然后是四位文件标识符、冒号和两位静态文本标识符。所述四位文件标识符标识文档,比如实例文档202。所述两位静态文本标识符标识文档的一部分,比如在第一服务器端的可执行部分之前的静态文本的第一部分。标识符406具有类似的结构,但是具有不同的两位静态文本标识符,因为它标识相同文档的不同部分。当然,标识符404和406仅仅是实例,并且所述标识符可具有不同的结构,可能更长或更短,而且可以是数字、字母数字、二进制或任何其它适当的格式。图4还示出文档302的被替换为标识符404和406的部分现在存储在存储器408中。所替换的部分已经位于可扩展标记语言(XML)标签之内,所述标签包括来自相关标识符的值,其由文档402中的内容替换。因此,存储器408包含对应于标识符404的第一部分410和对应于标识符406的第二部分412。
然后,通过压缩操作,将存储器408的内容转换成替代表示。通过这个压缩操作,存储器408中编码的所述物理数据被转换成不同的物理数据编码,其可以存储在相同的存储器408或存储在在不同的存储器中。因此,所述压缩编码数据表示曾在存储器408中的初始物理数据。可以使用任何适当的压缩方法,比如ZIP、GZIP、压缩、行程编码、霍夫曼编码、Lempel-Ziv编码、开源ZLib库或任何其它压缩方法。一些压缩方法具有对应的解压缩方法,其包括在多种不同的网络浏览器中。举例来说,许多网络浏览器包括gzip解压缩算法。因此,当选择gzip压缩方法时,产生的文件可以由许多网络浏览器解压缩,而无需对所述网络浏览器添加插件或进行任何修改或补充。在某些实施例中,可使用不同于压缩的编码技术。例如,所述内容可以被加密。对于许多压缩库,产生的输出为二进制格式并包括语法字符(包括字符串),其被认为无效的,或者,在后面的步骤中,其在处理输出的程序中具有特定的句法意义。因此,所述压缩输出可要求某些字符替换。举例来说,空字符可由相应的转义码替换,例如"\0"。·作为另一个实例,换行字符的语法表示,例如"\r"和"\n"可以替换为转义序列,例如"\\r"和"\\n",当被评价时,其产生初始的文字文本。可以将类似的技术用于代码定界符,例如"<%"和"%>"和"<!。替代地,所述二进制输出可由二进制-文本编码,例如uuencode或MME,来形成文本安全。作为另一个可选方案,可以使用下面参考图19所述的处理技术来排除某些或所有字符替换的需要。图5示出对应于下一处理步骤之后的实例文档402的实例文档502。文档502是适用于响应于页请求向网络浏览器传输的Java脚本网页。文档402的内容被并入动态变量。文档402中的引号被替换为所述引号的转义码。存储器408的所述压缩的和文本安全的表示被并入静态变量。文档502还引用外部的Java脚本源文件,build, js,其定义名称SbuildPageO的函数。所述buildpage()函数接受所述静态和动态变量作为参量,并执行必要的处理,以解压缩所述静态数据和用来自解压缩的静态变量的对应值来替换所述动态变量中的所述标识符。图6示出对应于服务器端执行之后的实例文档502的实例文档602。因此,图6示出文档,该文档处于要从网络服务器传输到请求网络浏览器的状态中。所述动态变量中的服务器端可执行代码已经被替换为所述代码的结果。在本实例中,所述代码产生一年中的月份列表。图7示出对应于执行buildPage O函数之后的实例文档602的实例文档702。因此,图7示出将被存储在所述页变量中的文档。页的静态和动态部分已经重新组合为如图2和3中所示的它们的初始结构,但是所述服务器端的可执行代码已经被执行并被替换为所述执行结果。因此,实例文档702具有和所述网络服务器已经提供给所述网络浏览器相同的内容,前提是如果它已经以常规的方式送交文档302。图8示出显示由实例文档702产生的内容的网络浏览器窗口 802。图9示出用于准备压缩文档的处理900。处理900开始于步骤902,对将要压缩的一个或多个目标文档进行标识。所述文档可以是网页或其它文档,其包括静态内容和可执行代码的混合。所述文档可包括许多种类的可执行代码,包括可由文档服务器或文档接收器或二者执行的代码。然后,在步骤904中,标识所述文档的静态部分和可执行部分。可以预料的是,在大多数情况下,所述文档将包括静态和可执行两个部分,并且可具有各类型的许多部分,但所述文档也可只包括一个部分,即静态的或可执行的。接下来,在步骤906中,所述静态部分被从网页的可执行部分分离。给所述静态部分分配标识符。优选地,在所述网页中所述标识符是唯一的,并且,它们可以在多个网页中或整个网站上都是唯一的。所述标识符用于标记相对于所述可执行部分的相应的静态部分的位置。替代地,标识符可以分配给所述可执行部分,并用于标记它们相对于所述静态部分的位置。接下来,在步骤908中,所述静态部分被集中起来并被压缩。所述静态部分可以用它们的标识符作标签。替代地,所述静态部分可以连接在一起,并且它们相关的起始点连同它们的对应标识符一起存储。也可存储所述部分的长度,虽然这个信息可能并不必要,因为所述长度可以由两个连续部分的起始位置计算得出。可以使用任何适当的压缩方法,比如ZIP、GZIP、压缩、行程编码、霍夫曼编码、Lempel-ZiV编码、开源ZLib库或任何其它压缩方法。在某些实施例中,可以使用不同于压缩的编码技术。例如,所述内容可以被加密。然后,在步骤908中,通过用对应的转义码替换那些具有特定意义或通常不允许 在文本格式出现的字符,来将所述压缩的静态部分文本化。举例来说,空字符(二进制0x00)被替换为"\0",这是Java脚本中空字符的转义码。因此,产生的输出是”文本安全的”。另一种将所述内容文本化的方案是使用文本编码方案,例如在MIIVIE中使用的base64编码和如RFC 4648所述的它的变型。接着是步骤910,文本安全的被压缩的静态部分与来自步骤906的可执行部分再次组合,以创建最优化网页。所述最优化网页可以是包括客户机端可执行代码的Java脚本网页,用于解压缩所述被压缩的静态部分并将它们与所述服务器端的可执行部分重新结合。图10示出用于送交最优化网页(例如由处理900产生的网页)的处理1000。举例来说,所述处理1000可以由网络服务器施用。处理1000从步骤1002开始,其中接收到对网页的请求。接下来,在步骤1004中,检索所请求的网页的最优化版本。在步骤1006中,由网络服务器执行所述网页的任何服务器可执行部分。接下来,在步骤1008,所述服务器端的结果被文本化。在由所述服务器端的可执行代码产生的所述输出中检索这样的字符——其会在所述最优化网页的客户机端的执行过程中产生错误——例如引号。在前面图2-8所示的实例中,所述服务器端的执行结果被存储在Java脚本变量中,而由所述服务器端的执行所产生的引号会被解释为结束那个变量的定义,从而导致译码器出错。如果所述服务器端代码产生引号,则那个字符必须由它的相应的转义字符串来替换,在引号前加反斜杠(\")。文本化这些字符防止了将要执行所述最优化网页的网络浏览器出错。最后,在步骤1010中,产生的网页被传输到请求者。图11示出用于从网络服务器请求和接收最优化内容的处理1100。处理1100适合于与处理1000结合使用。处理1100开始于步骤1102,传输对网页的请求。所述请求可以是HTTP GET命令。接下来,在步骤1104中,接收最优化网页。在步骤1106中,由请求者执行所述最优化网页。如前所述,所述最优化网页可以是Java脚本文档,也可使用任何适当的程序设计语言。在客户机上执行所述最优化网页产生未压缩网页。接下来,在步骤1108中,显示所述未压缩网页。如果所述未压缩网页包含额外的可执行代码,例如额外的Java脚本代码,则也执行该额外的可执行代码。在另一个实施例中,网页最佳化系统可采用gzip inflate程序,其嵌入在许多常见的网络浏览器中,例如,微软的Internet Explorer、Mozilla的Firefox、谷歌的Chrome和苹果的Safari等等。所述gzip文件格式和压缩标准提供于RFC1951和1952中,其通过引用合并于此。如这些文献中所述,gzip文件格式由数据块序列组成。各数据块可以使用不同的编码技术,包括deflate方法和存储方法。因此,前面在图2_11中所讨论的最优化方案可适用于在使用gzip解压缩的同时仍允许执行已压缩文件内的服务器端代码。使用所述gzip文件格式来最优化网页的处理始于图2中所示的文档202。初步处理与之前参照图3和4所述相同。随后,处理文件以产生图12中所示的实例文档1202。实例文档1202包含定义动态变量的Java脚本代码,所述动态变量包含来自实例文档402的服务器端可执行部分。静态变量包含来自存储器408的服务器端静态部分。如前所述,这些变量定义已经被处理,从而为某些字符(例如,引号)添加转义码。实例文档1202还引用Java脚本函数buildPage2,其定义于单独的Java脚本文件build2. is中。实例文档1202还包括带有"//EKK0_END_DYN !"值的令牌1204,以将所述文档分为两个部分。第一部分1206包括服务器端的可执行部分,第二部分1208只包括服务器端的静态部分。图13示出对应于下一处理步骤之后的文档1202的文档1302。文档1302为gzip 兼容的文件格式,且包括第一块1304和第二块1306。第一块1304包括多字节首部1308,其符合所述gzip文件格式。因为首部1308可包含无法打印的字符,所以在图13中使用字符"X"来表示。首部1308指定第一块使用gzip “存储”编码技术来进行编码。因此,第一部分1206中的人类可读的内容在第一块1304中仍保持人类可读。令牌1204用于确定第一块1304的结尾,并且,如果不再需要则可以从第一块1304除去令牌1204。第二块1306包括多字节首部1310,其符合所述gzip文件格式。首部1310指定第二块使用gzip “deflate”编码技术来进行编码。因此,第二部分1208中的内容已经被压缩,且在第二块1306中不再是人类可读的。将向网络服务器提供文档1302,以便可以执行第一块1304中的服务器端的可执行代码。正如至此所述,文档1302可包含会引起所述网络服务器译码错误的字符。举例来说,首部1308和1310可以包括空字符(0x00),网络服务器会将其错误地译为对文件的结尾进行标记。类似地,第二块1306可包括空字符。并且第二块1306可包括字符串,所述服务器会将其译为对服务器端的可执行内容的开始进行标记,例如,"<%"或" <一"。为了防止这些错误,文档1302中可能引起出错的字符和字符串已经被替换为大写X字符。当然,在X字符的地方可使用任何其它适当的替换字符。为了可在其它处理发生之后恢复文档1302中的这些字符,存储有关替换的信息。作为图12和13所示的替换物,第一和第二块的内容可以交换,以便第一块包含所述服务器端的静态部分而第二块包含所述服务器端的可执行部分。当然,可以理解的是,所述文档可以包括多个块,并且因此保持未压缩的所述服务器端的可执行部分可位于第一块、最末块或中间块中。图14示出替换的字符在存储器1402中的存储位置。存储器1402是带条目的序列,记录着已经被替换的字符的位置1404和值1406。位置1404可从文档1302的开始、文档1302的结尾或从任何其它适当的位置来进行计量。从文档1302的结尾计量所述位置的一个优点是当随后由所述网络服务器执行服务器端的可执行代码时,如果第一块1304的长度改变,则位置1404相对于所述文档1302的结尾并不会改变。如果位置1404是相对于文档1302的开始计量的,那么它们必须根据第一块1304的尺寸或长度的任何后续变化来对账户进行更新。存储器1402可不包括任何在第一块首部1308中被替换的字符的条目,这是因为在执行所述服务器端的可执行代码的时候将不得不被更新这个首部。虽然存储器1402以序列示出,但是可以使用任何适当的存储器结构,例如,链表或动态数组。替代地,可使用多个存储器结构。举例来说,一个存储器结构可存储空字符的位置,而第二存储器结构存储另一个字符的位置,比如百分比符号。因此,字符值可以被暗中存储,而不是明确地。图15示出对应于下一处理步骤之后的文档1302的文档1502。具体地,文档1502显示网络服务器执行文档1302的第一块1304中的服务器端的可执行代码的结果。文档1502包括第一块1504,其中所述服务器端的可执行代码已经被替换为执行结果。在示出的实例中,所述执行结果是一年中的月份列表,但是,当然,所述服务器结果可是任何适当的输出。所述执行结果不包括任何需要转义码的字符。在其它情况中,所述执行结果可包括需要转义码的字符,比如引号字符。在这些情况下,处理所述执行结果,以用它们各自的转义码来替换所述字符。例如,引号字符(")可用反斜杠加引号字符(\")来替换。在完·成此处理之后,确定第一块1504的长度,以便可以根据所述正确的块长度来更新第一块首部1508。最后,使用先前存储在存储器1402中的信息将所述语法字符插入回文档1502。接着,产生的文档可被传输到请求网络浏览器。清楚的是,执行服务器端代码可以提供小于、大于或与服务器端代码本身大小相等的执行结果。因此,第一块1504可以大于所述gzip文件格式,允许单个数据块。通常,所述gzip文件格式支持最多64千字节的单独数据块。为了应付服务器端的执行结果大于可以存储在gzip数据块中的情况,第一块1504可被分成两个或更多的gzip数据块。通过在合适的块边界处简单地插入一个或多个合适的gzip块首部,可以轻易地将第一块1504分成多个块。因此,如果所述服务器端的执行结果的大小为70千字节,则第一块1504被分成两个快,第一个块为64千字节,第二个块为6千字节。第二个块会需要与第一块首部1508相似的块首部。Gzip块首部的长度是5字节,因此,将第一块1504分成两个块将使文档1502的总尺寸增加5个字节。在程序设计的层面上来讲,增加文档1502的大小可能需要分配新的和更大的存储空间以容纳文档1502,因此,在某些实施例中,文档1302和1502可以在第一块1504和第二块1506之间包括一个或多个虚假块首部。虚假块首部指定它的相关数据长度是零。通过将虚假块首部包括在文档1302,文档1502将包括虚假块,需要该虚假块来处理第一块1504大于可以存储在单个gzip块中的情况,而无需增加文档1502的大小。如果不需要虚假块,则它可以要么留在文档1502中,要么被删除。如果留在文档1502中,则所述虚假首部块并不会引起网络浏览器或其它解压缩所述gzip文件格式的程序出错,这是因为所述虚假块首部块指定它的相关块的长度为零。因此,网络浏览器或其它程序将处理所述首部并在预见下一首部块(例如,块1506的首部)之前读取零字节。值得注意的是,第一块1304中的服务器端的可执行代码是否超过64千字节或任何其它由所述gzip文件格式所施加的尺寸限制并非是对所公开的处理的限制。这主要是因为文档1302并非必须是完全严格形成的gzip文件,因为它不能由gzip文件处理机解释。此外,文档1302被传递至网络服务器,用于执行所述服务器端的可执行代码。所述网络服务器并不试图解释所述文件的gzip特征;它只是执行所述服务器端的可执行代码。因此,第一块1304是否超过gzip文件格式下允许的块的大小是无所谓的。只有在执行文档1302之后(并被转换成文档1502),才需要考虑块的大小。图16示出用于准备压缩网页的处理1600。所述处理1600开始于步骤1602,对将要压缩的一个或多个目标网页进行标识。所述网页可包括静态内容和可执行代码的混合,并且,所述可执行代码可以有许多形式,包括可由网络服务器执行的代码和可由网络浏览器执行的代码。然后,在步骤1604中,标识所述网页的静态部分和服务器端的可执行部分。可以预料的是,在大多数情况下,所述网页将包括静态部分和服务器端的可执行部分这两个部分,并且可以有各类型的多个部分,但是,所述网页也有可只包括一个部分,即静态部分或服务器端的可执行部分。接下来,在步骤1606中,所述静态部分被从网页服务器端的可执行部分分离出来。给所述静态部分分配标识符。优选地,在所述网页中所述标识符是唯一的,并且它们在多个网页中或整个网站上都可以是唯一。所述标识符用于标记相应的静态部分相对于所述服务器端的可执行部分的位置。替代地,标识符可分配给所述服务器端的可执行部分,并被用于标记它们相对于所述静态部分的位置。
·
接下来,在步骤1608中,使用网络浏览器可执行程序模板,例如Java脚本模板,将所述静态部分和服务器端的可执行部分重新组合起来。所述Java脚本模板包括可由网络浏览器执行的代码,当被执行时,其将导致网络浏览器按照它们原来在步骤1602中所标识的目标网页中已有的顺序和结构来重建所述静态部分和所述服务器端的可执行部分。所述Java脚本模板还包括标记部分的结尾的令牌,其中,该部分包括所述服务器端的可执行部分。替代地,所述模板可为非Java脚本程序。其它种类的模板的实例包括VB脚本程序、Flash程序、Java程序、Java小程序、AJAX组件、AJAX程序、微软的SilverLight程序、微软的ActiveX程序、动态链接库(DLL)和cabinet (CAB)文件。继续所述处理1600,在步骤1610中,使用修改的gzip编码来压缩所述Java脚本程序。使用所述gzip STORE技术对包括服务器端的可执行代码的所述Java脚本程序的部分进行编码,并使用gzip DEFLATE技术对Java脚本程序的其它部分进行编码。然后,在步骤1612中,将压缩的Java脚本程序文本化。所述文本化处理包括用替换字符,例如字母X,来替换空字符。文本化还包括替换用于指示服务器端的可执行代码的开始的部分或所有标记,例如"<%"。所替换字符的位置也被存储起来,以便以后可将所述字符恢复为它们的初始值。取决于网络服务器软件的能力,某些或所有这些文本化步骤可能是不必要的。举例来说,如果所述网络服务器软件可以处理空字符而不造成错误,则不需要将空字符文本化。图17示出用于送交网页的处理1700,其适用于使用由处理1600压缩的网页。举例来说,可由网络服务器进行所述处理1700。处理1700从步骤1702开始,其中接收到对网页的请求。请求的实例包括HTTPGET或POST消息。接下来,在步骤1704中,检索所请求的网页的最优化版本。所述最优化版本是使用例如处理1600的最优化处理而创建的网页的版本。举例来说,所述网页的最优化版本可以与所述网页的非最优化版本进行比较,以便确定自所述最优化版本被创建以来所述网页的非最优化版本是否已经修改。如果所述非最优化版本已被更新,则所述最优化版本可以例如通过执行处理1600的步骤而得以更新。在步骤1706中,执行所述最优化网页中的所述服务器端的可执行代码。这可以通过向网络服务器执行引擎提供所述最优化网页来实现。执行所述最优化网页使得所述服务器端的可执行代码由所述执行结果来替代。接下来,在步骤1708中,所述服务器端的结果被文本化。在由所述服务器端的可执行代码产生的输出中检索这样的字符——其会在所述最优化网页的客户机端执行过程中产生错误——例如引号。在前面图12-15所示的实例中,所述服务器端的执行结果被存储在Java脚本变量中,而由所述服务器端的执行所产生的引号会被解释为结束那个变量的定义,从而导致译码器出错。如果所述服务器端代码产生引号,则那个字符必须由它的相应的转义字符串来替换,引号前加反斜杠(Y )。文本化这些字符防止了将要执行所述最优化网页的网络浏览器出错。然后,在步骤1710中,存储前面被替换的字符。简而言之,这个步骤涉及消除处理1600中的文本化步骤1612的影响。因此,空字符和百分比字符字符被恢复到存储器(例如,存储器1400)中所存储的位置。在步骤1712中,修改所述HTTP响应首部,以表明所述响应内容是使用gzip编码的。最后,在步骤1714中,所述最优化的网页被传输到请求者。图18示出用于从网络服务器请求和接收内容的处理1800。处理1800适合于与处理1700结合使用。处理1800开始于步骤1802,其传输对网页的请求。所述请求可以是HTTP GET命令、HTTP POST命令或任何其它适当的请求。接下来,在步骤1804中,接收最·优化网页。在步骤1806中,所述最优化网页被解压缩,例如,通过使用gzip inflate方法。因此,所述解压缩步骤可以采用嵌入在许多网络浏览器软件程序中的解压缩程序,其总体·上执行起来要比解释的解压缩程序(例如以Java脚本写就的)更快。接下来,在步骤1808中,执行所述解压缩的网页。如前所述,所述最优化网页可以是Java脚本文档,也可使用任何适当的程序设计语言。在客户机上执行所述最优化网页产生网页结果。最后,在步骤1810中,显示所述网页结果。如果所述网页结果包含额外的可执行代码,例如额外的Java脚本密码,则也执行该额外的可执行代码。上述技术使用由网络浏览器执行的Java脚本程序,来重构和在有些情况下来解压缩由网络服务器提供的最优化网页。如上所述,初始网页的所述静态和动态部分被分离并放入Java脚本变量,例如图5和12中所示的静态和动态变量。将这些网页部分放入Java脚本变量需要将某些字符(例如引号)“转义”,以免执行Java脚本程序时译码器出错。这个要求增加了在准备最优化网页时所必需的处理并且增大了产生的文件的大小,因为所述转义字符序列长于它们所替换的字符。替换将所述静态和动态部分放入Java脚本变量,它们可以被放入HTML DIV部分。这个变化示于图19。图19示出使用DIV标签来存储网页的所述静态内容和服务器端的可执行部分的文档1902。文档1902包括第一 DIV部分1904,其提供所述服务器端的可执行部分。第二DIV部分1906提供所述服务器端的静态部分。在第三部分1908中创建代码的所述Java脚本页面加载两个变量,dyn和stat,分别带有第一 DIV部分1904和第二 DIV部分1906的内容。因为dyn和stat变量的内容是从DIV部分加载的,所以在DIV部分内不需要对字符(例如,引号)进行转义编码。当然,可以理解的是,图19的技术可能无法完全避免处理某些语法字符的需要,例如空字符。总的来说,使用如上所述的技术接收最优化网页的网络浏览器将不能开始为用户描画或显示未压缩、重构的网页,直到该网络浏览器已经接收了完整的最优化网页。举例来说,只是在全部的或几乎全部的网页602被接收以后,接收网页602的网络浏览器才开始创建网页702。一旦所述网络浏览器建立了网页702,那么它必须翻译网页702,以便为用户产生最终输出,如在网络浏览器窗口 802中所示。为了在网络浏览器接收整个最优化网页之前允许该网络浏览器开始解压缩、重构和显示最优化网页,所述最优化网页可能被分成两个或更多个大块,它们可以被分别重构。因此,网络浏览器可以在开始重构和显示第一大块的同时,继续下载第二大块。验证最优化结果对于使用如上所述的最优化技术而作出的网页的显示来说,通常首选的是,在视觉上不能与相应的初始网页的显示区别开来。换句话说,对于所述最优化处理来说,最好是按照从网络浏览器输出的那样而不修改所述网页,无论是在显示器上、通过打印机或是其它方式。为了确保所述最优化处理没有负面地影响网页,可以使用测试。图20示出用于测试最优化网页的处理2000。处理2000开始于步骤2002,其产生最优化网页的定制版本。所述定制版本是使用类似于如上所述的那些处理而创建的,除了Java脚本包装器稍加修改以外。特别地,所述包装器包括声明,以将未压缩网页的内容作为文件保存在计算机可读介质上。这种保存可以补充或替换显示未压缩网页的命令。举例来说,所述Java脚本包装器可以用对file, write O的调用来补充(或替换)对doc. write O 的调用。所述处理继续到步骤2006,检索初始网页。这个步骤可以这样实现通过暂时停止网络服务器上的最优化处理,或通过向不实施上述最优化技术的网络服务器请求网页。产生的网页可被保存为文件,例如,通过许多网络浏览器中可用的“另存为”命令。接下来,在步骤2008中,将初始网页结果与未压缩的网页结果进行比较。如果该比较标识两个结果之间有差异,则可指示所述最优化网页可向终端用户提供不同的显示。其它情况下,所述差异也许没关系。例如,所述差异可以包括网页的空白、注释或其它非功能的特征。用于步骤1508的比较处理可以排除报告差异,其被认为是由某些种类的非功能内容所引起的。如果比较步骤2008没有标识初始网页结果和未压缩网页结果之间有任何差异,则将向终端用户产生相同的网页显示,并且所述最优化处理已经证实未影响网页内容。图21说明另一个用于测试所述最优化处理的处理2100。处理2100始于步骤2102,其中,检索最优化网页。接下来,在步骤2104中,使用网络浏览器渲染引擎渲染所述最优化网页。所述渲染引擎的输出是第一图像,其包含网络浏览器将向终端用户显示的内容。然后,在步骤2106中,检索与所述最优化网页对应的初始网页。并且,在步骤2108中,网络浏览器渲染引擎将初始网页渲染为第二图像。接下来,在步骤2110状,将第一图像与第二图像进行对比。这个比较可以是所述图像的逐个像素的比较。因此,所述比较包括产生初始和最优化网页的直观表示,这可以是有形输出。如果第一图像与第二图像吻合,则所述处理继续到步骤2112,其中,所述最优化处理被确认为没有影响网页内容。如果所述比较标识在第一和第二图像之间有一个或多个差异,在所述处理继续到步骤2114,其中,报告所述差别。替代地,所述比较步骤可以只报告那些满足某个阈值的差异,例如像素的数量或整个图像面积的百分比。在步骤2114中,可以以任何适当的方式报告由步骤2110中的比较所检测到的差异。举例来说,所述处理可以创建高亮度显示所检测到的差异的位置的第三图像,例如,通过使用箭头、圆圈或引起对所检测到图像的差异部分的注意的其它技术。替代或附加地,步骤2114可包括创建文本报告,其标识是检测到的差别的位置。然后,所述处理可以继续进行步骤2116,其中,对造成所述差别的一个或多个原因进行调查和解决。
对于具有动态内容的网页来说,可能希望使用网页渲染引擎的不同设定来重复处理1600。举例来说,网页可以合并基于鼠标光标的位置而动态调整的内容(例如,所述网页具有“鼠标经过”的内容)。取决于鼠标光标的位置,所述网页渲染引擎将产生不同的输出。因此,对于几个不同的鼠标光标位置来说,可以重复处理2100,以确保最优化网页结果与初始网页结果匹配,包括它基于鼠标光标位置的动态反应。可以随意选择鼠标光标的测试位置,也可以由测试操作者来选择以对准网页的某些部分。替代地,可为每个可能的鼠标位置执行处理2100。图20和21中所述的两个比较方法有着各自的优点。图21的图像比较方法使用渲染的网页内容的图像,因此,它以二者之一会呈现给终端用户的形式将所述最优化网页结果与所述初始网页结果进行比较。因此,图21的方法更直接地比较网页的视觉结果。另一方面,图20的所述方法比较用于产生所述网页的底层代码。因此,图20的方法标识可以造成网络浏览器的视觉输出差异的代码。并且,因为图20的所述方法比较所有的底层代码,因此它可标识出最初视觉上并不明显的差别。例如,图20的所述方法可以标识包括动态内容的差别,它不仅仅取决于鼠标光标位置。 容易理解,图20和21的两个方法是相辅相成的。举例来说,视觉差别可以由图21的方法来检测。为了帮助标识视觉差别的根本原因,图20的方法可用于高亮度显示网页被检测到视觉差别的部分的代码差别。现在说明图22,其示出用于将网络服务器计算机2202的服务能力进行最优化的系统2200。可使用软件、硬件或两者相结合的方法来实现系统2200。网络服务器最优化过滤器2204接收来自网络2206的网页请求。网络2206可以是公用的国际互联网、非公用的内部网(例如,公司或本地网络)或任何其它种类的网络。过滤器2204确定所请求的网页是否存在最优化版本。如果存在最优化版本,则过滤器2204确定自从创建该最优化版本以来是否更新了所述网页的初始、非最优化版本。如果需要,过滤器2204重新创建网页的最优化版本。或者,过滤器2204可以使用网页的非最优化版本来处理所接收的请求,并标记所述最优化版本为要求重新创建。随后,可重新创建最优化版本,例如通过分别执行线程或处理,因此防止请求响应延迟。过滤器2204从数据存储器2206检索所请求的网页最新的最优化版本。数据存储器2206可以是一个或多个硬盘驱动器、易失性存储器(例如,RAM)、存储阵列、存储区域网络或任何其它适当的数据存储器或系统。数据存储器2206作为网络服务器计算机2202的部分而示出,但是存储数据2206也可以在计算机以外,并可经由网络2206或另一个网络或接口而得以访问。然后,过滤器2204向网络服务器软件2208提交请求,以处理所请求的网页的最新的最优化版本。网络服务器软件2208可以是可从微软获得的国际互联网络信息服务器、可从阿帕奇软件基金会获得的Apache或任何其它适当的网络服务器软件。过滤器2204可向网络服务器软件2208提供所请求的网页的最新的最优化版本,或者,它可以向网络服务器软件2208提交HTTP或其它请求,其指定所请求的网页的最新的最优化版本为存储在数据存储器2206上的所请求网页。网络服务器软件2208检索所请求的网页,必要时,执行任何服务器端的可执行代码。然后,网络服务器软件2208向过滤器2204提供结果。过滤器2204执行任何需要的后服务器端的执行处理,例如恢复语法字符,如空字符和百分比符号。必要时,过滤器2204还修改HTTP响应首部,以指示最优化网页的编码类型,例如gzip。最后,过滤器2204通过网络2206向请求者提供所述结果。过滤器2204可实现为软件组件,其与网络服务器软件2208结合。举例来说,所述过滤器可以是微软IIS的插件。在其它实施例中,过滤器2204可以是单独的计算机,其逻辑上或物理上位于网络服务器软件2208和网络2206之间。因此,过滤器2204可以是独立的应用类型设备。如系统2300中所示,因此对于两个或更多个服务器来说向客户机2302提供网页源代码的部分是可能的。例如,服务器端的静态部分2312可以由服务器2304提供,作为中间客户机端的可执行程序2314的部分。服务器端的可执行部分2310由服务器2306提供。 因为服务器端的静态部分2312和中间客户机端的可执行程序2314在服务器端处于静态,因此服务器2304不需要访问任何特定用户或特定环境信息以响应于请求而供给它们。因此,它们可以轻易地在许多服务器2304a间复制,这允许在靠近请求者的服务器处对该部分进行预定位。举例来说,这可以通过使用内容分发网络(例如Akamai)而得以实现。服务器2304 (或复制服务器2304a之一)接收请求和按照响应提供中间客户机端的可执行程序2314,其包括服务器端的静态部分2312。可以以压缩格式提供中间客户机端的可执行程序2314,例如gzip或zlib压缩格式。中间客户机端的可执行程序2314包括将由接收客户机2302执行的命令,其将启动指向服务器2306的第二请求,以接收所请求的网页的服务器端的可执行部分2310。优选地,这个命令位置靠近中间客户机端的可执行程序2314的开始,以便可以由所述客户机执行之,而客户机则继续接收包括服务器端的静态部分的后部分程序。当客户机2302从服务器2306接收服务器端的可执行部分2310时,如前所述,服务器端的可执行部分2310和服务器端的静态部分2312被合并,并且产生的网页被呈现给用户。当然,系统2300可以被进一步修改,以便中间客户机端的可执行程序不包括服务器端的静态部分,而是包括由客户机执行的命令,以从服务器2304和2304a之一检索服务器端的静态部分。因此,系统2300说明一种将服务器2306的服务能力最大化的方法,服务器2306是唯一要求访问对请求来说特定的数据的服务器。例如,如果网页用于提供对客户的银行事务的访问,则只有服务器2306要求访问客户的银行财务记录。因为服务器2306不提供对于每个用户相同的网页部分,因此服务器2306可以更加有效地响应客户请求并可以响应更多的顾客请求。本公开在通过网络请求和送交网页的环境中进行描述。但是本领域技术人员会认识到本公开可用于其它环境。例如,所述技术可以用在单个计算机内而不需要网络。作为另一个实例,所公开的技术也可应用于网页以外的文档,例如解释或编译脚本或程序、XML文档、数据库记录或任何其它类型的文档。本公开已经针对优选方案进行了描述。本领域技术人员在阅读本公开之后而做出的显而易见的改进或修改视为在本申请的精神和范围以内。可以理解的是,可以对上述公开进行一些修改、改变和替换,并且在有些情况下本发明的一些特征将被采用,而不用对应使用其它特征。因此,广泛地解释所附的权利要求是合适的,在某种意义上也符合本发明范围。
权利要求
1.一种实现在与计算机可读存储介质通信的计算机上的方法,所述方法包括 选择包括指令的初始源代码,当所述指令被一个或多个计算机执行时产生视觉输出;标识所述初始源代码的服务器端的可执行部分和所述初始源代码的服务器端的静态部分; 给所述初始源代码的服务器端的静态部分分配标识符; 将初始源代码的服务器端的可执行部分与初始源代码的服务器端的静态部分分离; 组合所述初始源代码的服务器端的可执行部分和所述标识符以创建中间源代码,其中,所述标识符替换所述初始源代码的服务器端的静态部分; 创建包含客户机端的可执行程序的服务器端的可执行程序,其可操作为用所述初始源代码的服务器端的静态部分来替换所述中间源代码的标识符,其中,所述服务器端的可执行程序包括所述中间源代码和所述初始源代码的服务器端的静态部分,其中,当服务器端的可执行程序被一个或多个计算机执行时产生视觉输出;和 更新至少一部分计算机可读介质,以包括所述服务器端的可执行程序的表示。
2.如权利要求I所述的方法,还包括 压缩所述服务器端的可执行程序,以创建压缩的服务器端的可执行程序,其中,所述压缩存储所述中间程序。
3.如权利要求2所述的方法,其中所述压缩以其初始格式存储所述中间源代码。
4.如权利要求2所述的方法,其中所述压缩步骤使用下列之一gzip压缩和zlib压缩。
5.如权利要求2所述的方法,其中所述压缩将所述中间源代码存储为第一数据块。
6.如权利要求2所述的方法,其中所述压缩将所述中间源代码存储为最后数据块。
7.如权利要求2所述的方法,其中所述压缩将所述中间源代码存储为数据块,该数据块既不是第一数据块也不是最后数据块。
8.如权利要求2所述的方法,还包括 确定语法字符在所述压缩的服务器端的可执行程序中的位置; 用变更的字符替换所述语法字符;和 存储指示所述替换的语法字符的位置的数据。
9.如权利要求8所述的方法,其中所述数据将相对于所述压缩服务器端的可执行程序的结尾的位置进行编码。
10.如权利要求8所述的方法,还包括 在执行过所述压缩服务器端的可执行程序之后,用语法字符替换所述变更的字符。
11.如权利要求2所述的方法,还包括 确定语法字符在所述压缩的服务器端的可执行程序中的位置;和 用所述语法字符的合乎句法的表示来替换所述语法字符。
12.如权利要求I所述的方法,其中所述客户机端的可执行程序是下列之一Java脚本程序、VB脚本程序、Flash程序、Java程序、Java小程序、AJAX组件、AJAX程序、SiIverLight程序、ActiveX程序、动态链接库和cabinet文件。
13.如权利要求I所述的方法,其中在所述创建步骤中使用程序模板。
14.如权利要求I所述的方法,其中所述初始源代码是部分网络应用程序的源代码。
15.如权利要求14所述的方法,其中所述初始源代码是网页的源代码。
16.如权利要求14所述的方法,其中,所示标识符在所述网络应用中或者在整个网站上都是唯一的。
17.—种控制与计算机可读存储介质通信的服务器计算机的方法,所述方法包括 在服务器计算机处接收请求; 确定对应于所述请求的源代码; 从计算机可读存储介质检索所述源代码的最优化版本; 由所述服务器计算机执行所述源代码的最优化版本的服务器端的可执行部分,以产生服务器端的执行结果; 检索被替换字符的位置; 在所述位置用第二字符替换服务器端的执行结果中的第一字符;和 响应于所述请求,在所述位置向服务器端的执行结果提供第二字符。
18.如权利要求17所述的方法,还包括 修改响应首部,以表明所述响应的内容被压缩。
19.如权利要求18所述的方法,其中所述修改包括表明所述内容选自下列之一gzip编码和zlib编码。
20.如权利要求18所述的方法,其中所述修改包括更新数据块的块首部,以指示所述块的长度。
21.一种装置,包括 包含在计算机上可执行的指令的计算机可读物理介质,并且当该指令被执行时使得计算机 选择初始源代码; 标识初始源代码的服务器端的可执行部分和初始源代码的服务器端的静态部分; 向初始源代码的服务器端的静态部分分配标识符; 将所述初始源代码的服务器端的可执行部分与所述初始源代码的服务器端的静态部分分离; 组合所述初始源代码的服务器端的可执行部分和所述标识符,以创建中间源代码,其中,所述标识符替换所述初始源代码的服务器端的静态部分;和 创建客户机端的可执行程序,其可操作为用所述初始源代码的服务器端的静态部分来替换中间源代码的标识符,其中,所述客户机端的可执行程序包括所述中间源代码和所述初始源代码的服务器端的静态部分,其中,当由一个或多个计算机执行所述客户机端的可执行程序时,产生视觉输出。
22.—种设备,包括 可通信地耦合至网络的网络服务器计算机,其可操作为接收来自请求者的网页请求,并且响应于所述请求的接收,可操作为选择所请求的网页的最优化版本,以执行所述最优化版本中的服务器端的可执行代码,并向请求者提供带应答首部的执行结果,所述应答首部指示所述执行结果为压缩格式,其中所述网络服务器计算机并不响应于所述请求而执行压缩步骤。
23.如权利要求22所述的设备,其中所述最优化版本包括以下列之一编码的数据块gzip压缩格式和zlib压缩格式。
24.如权利要求22所述的设备,其中所述网络服务器计算机以压缩格式向所述请求者提供定制响应,而没有以该定制响应压缩任何数据。
25.如权利要求22所述的设备,其中所述网络服务器计算机以压缩格式向所述请求者提供定制响应,而没有在接收所述请求之后压缩任何数据。
26.如权利要求22所述的设备,其中所述响应首部是HTTP响应首部,并且其中所述网络服务器计算机修改所述HTTP响应首部,以便HTTP响应首部表明所述执行结果为压缩格式。
27.如权利要求22所述的设备,其中所述网络服务器计算机在向请求者提供所述执行结果之前通过用空字符替换结果中的字符来修改所述执行结果。
28.一种实现在与计算机可读存储介质通信的计算机上的方法,所述方法包括 选择包括指令的初始源代码,当所述指令被一个或多个计算机执行时产生视觉输出; 标识初始源代码的服务器端的可执行部分和初始源代码的服务器端的静态部分; 给所述初始源代码的服务器端的可执行部分分配标识符; 将初始源代码的服务器端的静态部分与初始源代码的服务器端的可执行部分分离; 组合所述初始源代码的服务器端的静态部分和所述标识符以创建中间源代码,其中,所述标识符替换所述初始源代码的服务器端的可执行部分; 创建包含客户机端的可执行程序的服务器端的可执行程序,其可操作为用所述初始源代码的服务器端的可执行部分来替换所述中间源代码的标识符,其中,所述服务器端的可执行程序包括所述中间源代码和所述初始源代码的服务器端的可执行部分,其中,当服务器端可执行程序被一个或多个计算机执行时产生视觉输出;和 更新至少一部分计算机可读介质,以包括所述服务器端的可执行程序的表示。
全文摘要
一种送交网页的方法,包括将初始网页分成服务器端的可执行部分和服务器端的静态部分。所述服务器端的静态部分被替换为标识符,然后,创建客户机端的可执行程序,其将用所述服务器端的静态部分来替换所述标识符。可以这样压缩客户机端的可执行程序以初始格式保存服务器端的可执行部分。响应于客户机请求,所述网络服务器执行产生的程序并将所述输出传输到所述请求客户机。在所述客户机处,必要时解压缩所述响应,并且执行客户机端的可执行程序,以将所述服务器端的静态部分与所述服务器端的执行结果相结合。
文档编号G06F17/00GK102804166SQ201080024233
公开日2012年11月28日 申请日期2010年6月1日 优先权日2009年6月3日
发明者D·L·班诺拉, A·安格尔 申请人:克德科软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1