微信
手机版
网站地图

铁皮石斛的功效与作用,磁力兔子-长高的黄金季怎能错过它!含钙量超牛奶10倍

2019-07-16 16:04:38 投稿人 : admin 围观 : 198 次 0 评论

Ajax/REST 架构风格关于融入式 Web 运用程序的长处

在短短 15 年中,World Wide Web 现已从一项研讨试验生长为现代社会的技能支柱。开端发明 Web 的意图是使人们能够轻松发布和链接信息,现在它现已开展为软件运用程序的可行渠道。但跟着运用程序经过运用富运用程序模型和生成个性化内容而取得了更多的融入性,它们的架构对 Web 架构风格 REST(Representational State Transfer)的违反也越来越多。这种违反会下降运用程序的可弹性性,添加体系杂乱性。

新式的 Ajax Web 客户机架构风格让融入式 Web 运用程序与 REST 架构风格协调一致。212ys使它们能够尽享 REST 那些超卓的特性,一同又消除了运用程序违反 REST 原则时带来的不良特性。本文将介绍为融入式 Web 运用程序成功结合 Ajax 和 REST 的办法与原因。

请拜访 Ajax铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍 技能资源中心,这是有关 Ajax 编程模型信息的一站式中心,包含许多文档、教程、论坛、blog、wiki 和新闻。任何新信息都能在这里找到。

REST:Web 架构

虽然 World Wide Web 是在数十年的相关研讨基础上树立起来的,但它的有用诞生日期是 1990 年 12 月,其时 Tim Berners-Lee 完成了 Web 首要组件的作业原型:一致资源标识符(繁花落尽执何手URI)、HTTP、HTML、阅览器和服务器。Web 被迅猛选用,远远超越了先驱者们的预期。在 Roy Fielding 最知名的系列文章中(请参看 参女星裸照考材料),他描绘了自己其时的心境:

“虽然对其成功感到兴奋不已,可是 Int林韦君劈腿事情ernet 开发者社区逐步开端忧虑,Web 运用的这种快速增长,以及前期 HTTP 的一些低劣的网络特性,会快速压倒 Internet 基础设施所能承当的容量,然后导致忽然的坍塌。”

“一种架构在规划时就应该考虑到一组特性,让它能够满意乃至逾越体系的铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍需求。疏忽这些特性或许会导致后期改变搅扰整个架构,就像是运用一扇落地窗去替代承重墙会损坏整个建筑结构的可靠性。” —— Roy Fielding

Fielding 和其他人对 Web 架构及其是否能够足以支撑各种扩展和用法从头进行了审视。这种从头审视的有形成果包含更新比如 URI 和 HTTP 之类的一些重要规范。这种从头审视还取得了一些无形但却十分有意义的成果:为超级媒体运用程序确认了一种新的架构风格,Fielding 将其命名为 REST(Representational State Transfer)。Fielding 断语,运用且契合 REST 规划束缚的 Web 上布置的组件能够充分运用 Web 的有用特性。他还正告说,违反 REST 原则的 Web 组件都将无法运用这些长处。

前期时,大部分 Web 站点和简略的 Web 运用程序实践上都是恪守 REST 原则的。可是跟着融入式 Web 运用程序的日益遍及,Web 运用程序架构逐步开端违反 REST 原则了,尔后因果循环,状况日益恶化。融入式服务器端 Web 架构的问题很难剖析清楚,由于在运用这种架构风格的十年中,现已树立起这样一种崇奉:这些问题都是 Web 运用程序架构所固有的。实践上,这并非是 Web 运用程序架构的问题。而是由服务铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍器端 Web 运用程序架构风格所发生的问题。要打破这种成见,咱们来回忆一下整个架构是怎么开展到现在这种状况的,这会很有协助。咱们将阐明为什么在 Ajax 运用程序创立在商业上可行之后,曩昔承受的许多假定现在都不再成立了。

Web 运用程序的简史

Berners-Lee 发明了 Web,开端是将 Web 作为研讨人员长途同享文档和在文档之间创立简略链接以加快常识和思维传达的一种手法。可是,URI 规范的架构特征很快完成了除静态文件之外更多内容的同享。

供给静态文档的 Web 站点

Web 上最早的内容由一些静态 HTML 文档组成,其间有许多到其他静态文档的链接,如图 1 所示:

图 1. 供给静态文档的 Web 站点

REST 使静态文档的检索极端高效、可弹性,这是由于它们能够依据 URI 和最终修正日期来轻松缓存。很快开发人员就逾越了静态文档的范畴,开端动态文档的供给。

前期的动态 Web 运用程序

Berners-Lee 和铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍其他人规划了 URI 规范,为资源的一致仅有标识供给支撑,一同使其表明(HTML、文本等)依据 Web 客户机(一般是 Web 阅览器)和 Web 服务器之间的洽谈成果而改变。由于 URI 将资源标识和资源的底层存储机制差异开来,因而 Web 开发人员能够创立一些程序,使之检查 URI 语法,并动态生成文档,将预先界说的 UI 元素和动态检索的数据(一般是从联系数据库中)兼并在一同,如图 2 所示。虽然这些文档是生成的,可是它们的缓存特征与静态文件的彻底相同。

图 2. 以嵌入 HTML 模板溺爱皇室宠公主代码办法供给数据库记载的 Web 站点

此类前期运用程序的一个简略比如是一致目录 Web 运用程序。这种运用程序一般以如下办法作业:

  1. 用户在 Web 表单中输入姓名(例如,Bill Higgins),并单击提交按钮。
  2. 表单依据输入的姓名创立一个 URI,并从服务器上恳求这个 URI 的内容(例如 GET http://psu.edu/Directory/Bill+Higgins)。
  3. 服务器检查这个 URI,并运用这个学生的电话号码和地址来生成一个光良老婆 Web 页面。
  4. 服务器将所生成的页重生写轮眼都市纵横面发回到用户的阅览器上。

这种交互的一个重要特性是它是幂等的(idempotent),也便是说除非底层资源发生改变(例如 Bill 修正了自己的电话号码),不然同一恳求的成果总是相同的。这意味着阅览器或署理服务器都能够在本地对 Bill Higgins 的文档进行缓存,只需底层资源没有发生改变,那就能够从本地缓存中检索资源,而不再需求从长途服务器检索。这种办法能进步用户感受到的呼应性,并添加体系全体功率和可弹性性。这些前期的动态 Web 运用程序能够很好地作业,将许多的信息送至用户指尖。

融入式 Web 运用程序

下一代 Web 运用程序的方针便是高度融入,供给个性化的内容和富运用程序模型。在曩昔十年中,Web 开发人员成功创立了这些融入式运用程序。一个十分恰当的比如是 Amazon.com 电子商务站点。当用户与 Amazon Web 运用程序进行交互时,它会创立杂乱的客户页面来引荐有针对性的产品,显现阅览历史记载,并显现用户购物车中产品的价格。

融入式服务器端运用程序和 REST

融入式 Web 运用程序的确十分有用,但服务器端的融入式 Web 运用程序风格从底子上来说是不契合 REST 架构原则的。具体来说,它违反了一项要害的 REST 束缚,而且没有运用 REST 最为重要的一些长处,因而又发生了一组新问题。

违反了 “无状况服务器” 束缚

REST 的 “客户机-无状况-服务器” 束缚制止在服务器上保存会话状不思议迷宫魔法熔炉态。契合这一束缚进行规划能够进步体系的可见性、可靠性和可弹性性。但范浩明是融入式服务器端 Web 运用程序期望能够为单个用户供给许多个性化内容,因而有必要在两种规划之间作出挑选。第一种规划要在每个客户机恳求中都发送许多状况信息,因而每k8282个恳求都完好地保留了上下文的内容,服务器是无状况的。第二种解决方案表面上来看比较简略,运用程序开发人员和中心件供给商都比较倾向于这种办法,它仅仅简略地发送一个用户标识,并在服务器端为这个标识相关一个 “用户会话”(如图 3 所示)。第二种规划直接违反了客户机-无状况-服务器束缚。虽然它的确能够完成咱们想要的用户功用(具体来说便是指个性化),但却对这个架构进行了极大的改动。

图 3. 融入式服务器端 Web 运用程序,其间包含了许多服务器端会话状况

Java™ Servlet 的 HttpSession API 正是一个此类改变的比如。HttpSession 让咱们能够在状况和特定用户之间树立相关。这个 API 看起来关于开发新手十分铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍简略。实践上,它好像能够将任何目标保存到 HttpSession 中,而且不需求自己完成任何特定的查找逻辑就能够将这些目标取出来。可是当咱们开端在 HttpSession 中放入更多目标时,就会开端注意到咱们的运用服务器要占用的内存和处理资源越来越多。很快咱们就确认自己需求将运用程序布置到集群环境中来应对日益添加的资源需求。然后就会认识到,要让 HttpSession 在集群环境中作业,每个目标都有必要完成 Java 的 Serializable 接口,以使会话数据能够在集群环境中的服务器间传递。然后有必要确认运用服务器在关机/重启过程中是否要持续保护会话数据。很快您就会质疑,违反客户机-无状况-服务器束缚是否真的是一个好主意。(实践上,许多开发人员都不了解这个束缚。)

使散布式缓存变为不或许

融入式服务器端 Web 运用程序的第二个严重后果在于:它实践上不能运用 REST 的第一类支撑进行资源缓存。引证 Fielding 的话来说,“添加缓存束缚的长处是能够部分或彻底避免某些交互操作,然后能够经过削减一系列交互的均匀延迟来进步功率、可弹性性以及用户能够感受到的功能。不过这样做的价值是假如缓存中的陈腐数据与经过将恳求直接发送给服务器而取得的数据有很大差异,那么缓存的可靠性就下降了。”

咱们能够将融入式 Web 运用程序近似地看作一个活动实体,它会依据用户供给的新输入内容、其他人输入的新内容以及新的后台数据而不断发生改变。由于服务器有必要依据多个用户与运用程序的交互来生成每个页面,因而咱们实践上无法两次生成相同的文档。因而,Web 阅览器或署理服务器无法缓存服务器资源。

有几种解决方案能够用来处理资源无法缓存的问题。一种便是创立细粒度的资源在服务器端的缓存,这样服务器就能够经过预先组合好的部分来构建一个粗粒度的页面,而不是经过底子元素(HTML 和数据)从头开端一步步地构建这种页面了。可是问题仍然存在:每个恳求都会导致许多的服务器处理,这会危害体系的可弹性性,还或许会对用户感受到的呼应性形成负面影响。

无法供给可缓存资源的别的一个成果是:动态程度适当高的 Web 运用程序有必要显式地制止搜索引擎和其他类型的 “机器人”作出恳求,由于处理这类恳求的本钱都十分贵重;而在契合 REST 原则的运用程序中,只需一次性地将某个资源供给给那一类 “机器人”,然后对它们的后续拜访发送一条简略的 “Not-modified” 音讯即可。

不运用 Ajax 的客户端的处理

跟着拜访 Web 运用程序的用户越来越多,体系需求的资源也会逐步添加。能够让服务器来处理这一切,但将需求容量更大的服务器或集群服务器(服务器端状况在集群环境中并不太适用)。但假如将处理散布到客户机上,那么每添加一名新用户,您就适当于有了一台支撑部分新负载的新电脑。假如将会话状况散布到客户机上,那么就有了一个无状况的服务器 —— 这是可弹性 Web 运用程序中令人满意的一项特性。这看上去应该是种十分正确的做法,那么为什么不按这种办法规划一切融入式 Web 运用程序呢?在 Ajax 出现之前,答案十分简略:每次用户拜访一个新的 Web 页面时,运用程序状况时就会被毁掉。

每次拜访一个 Web 页面时,都要下载一个或一组包含内容的文件(包含在结构化信息中的数据,例如表和列表),以及影响内容外观的款式(例如,赤色文本)。在 Web 阅览器中,这些信息都是作为文档目标的笼统集来检查的。下面的列表为例:

  • Ford
  • BMW
  • Toyota

阅览器会以为这个 HTML 是一个 “无序清单” 目标,其间包含了 3 个列表元素;每个列表元素都包含文本。整个文档可视为一个杂乱的相关目标树。当咱们从一个页面阅览到别的一个页面时,阅览器就会毁掉当时页面的目标树,并为下一页创立一个新的目标树。

可是为什么要在一个负载过重的服务器上会集这么多的资源耗费呢?从理论上来说,咱们什么时候能够将处理和内存需求散布到客户机呢?简略的答案是给定传统 Web 阅览器束缚,这是不可行的(请参看 不运用 Ajax 的客户端处理)。可是 Ajax 架构风格使开发人员能够将处理和状况需求散布到客户机。请持续阅览,学习为什么挑选运用 Ajax 风格的融入式运用程序能够持续遵从 REST 原则,并充分运用它的优势。

Ajax 和 REST

正如咱们前面看到的相同,传统的服务器端 Web 运用程序将数据的标识和服务器上的动态数据元素合超级特警归纳体系并在了一同,并将所构成的完好 HTML 文档回来给阅览器。Ajax 运用程序在其首要 UI 和阅览器中的首要逻辑方面有所不同;依据阅览器的运用程序代码能够在必要时获取新的服务器数据,并将这些数据织入当时页面(请参看 参考材料 中 Jesse James Garrett 有关 Ajax 的启蒙文章)。出现和数据绑定的方位看起来或许是一个完成细节,可是这种差异会导致彻底不同的架构风格。

运用有状况 Web 客户机的长处

人们一般将 Ajax 运用程序描绘成无需在每次点击时彻底地改写整页的 Web 页面。虽然这个描绘十分切当,可是底子的动机在于彻底改写整页会令用户不耐烦,然后无法取得愉快、融入式的用户体会。从架构的视点来看,整个页面悉数改写的规划乃至十分风险,这种规划使您无法挑选在客户机存储运用程序状况,这或许会导致阻碍运用程序充分运用 Web 最强壮的架构规划点的规划决议计划。

Ajax 让咱们不需求进行彻底改写就能够与服务器进行交互,这一现实使有状况客户机再次成为可徐峰龚俊用挑选。这一点关于动态融入式 Web 运用程序架构的或许性有深远的影响:由于运用程序资源和数据资源的绑定转化到了客户端,因而这些运用程序都能够享用这两个国际中最好的东西 —— 融入式 Web 运用程序中动态、个性化的用户体会,以及恪守 REST 原则的运用哈利泽维尔程序中简略、可弹性的架构。

缓存 Ajax 引擎

想象一下,将 Amazon.com 彻底从头完成为一个 Ajax 运用程序 —— 一个 Web 页面能够从服务器上动态获取一切的数据。(出于商业原因,Amazon 或许并不期望这样做,不过那是其他文章评论的话题了。)由于现在有许多 UI 和运用程序逻辑都能够在客户机而不是在服务器上运转,依据 Garrett 的说法,开端加载页面时需求下载 Amazon 的 Ajax “引擎”。这个引擎包含许多运用程序逻辑(以 JavaScript 代码完成),别的还有尔后将运用从服务器上异步获取的数据填充的 UI 结构(见图 4):

图 4. 融入式 Ajax 运用程序

Ajax 引擎一个风趣的特征便是:虽然它dhfplayer包含了许多运用程序逻辑和表明结构元素,可是假如经过恰当的规划,它能够不包含任何事务数据或个性化内容。运用程序和表明都冻结在布置时。在典型的 Web 环境中,运用程序资源或许 6 个月才会改变一次。这意味着担任阻隔运用程序资源和数据资源的 Ajax 引擎是高度可缓存的。

Dojo Toolkit 便是一个很好的比如(请参看 参考材料)。Dojo 供给了构建时东西来创立一个包含一切运用程序逻辑、表明和风格的紧缩 JavaScript 文件。由于它毕竟仅仅一个文件,因而 Web 阅览器能够对其进行缓存,这意味着咱们第2次拜访启用 Dojo 的 Web 运用程序时,很或许就会从阅览器缓存中加载 Ajax,而不是从服务器上加载它。咱们能够将这种状况方羽心与高度融入化的服务器端 Web 运用程序进行一下比照,后者每次恳求都会导致许多的服务器处理,由于阅览器和网络中介不能对缓存不断改变的资源。

由于 Ajax 运用程序引擎仅仅一个文件,因而它也是能够运用署理缓存的。在大型的企业内部网中,只需有一名职工从前下载过某个特定版别的运用程序的 Ajax 引擎,其他任何人都能够从内部网网关上上获取一个缓存过的复制。

因而关于运用程序资源来说,经过杰出界说的 Ajax 运用程序铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍引擎契合 REST 原则,与服务器端 Web 运用程序比较,它具有明显的可弹性性优势。

缓存 Ajax 数据

用户阅览一个 Ajax Web 站点,加载 Ajax 运用程序引擎,最好是从阅览器缓存中加载的,不然就从本地署理服务器加载。那么关于事务数据来说状况怎么呢?由于运用程序逻辑和状况都在阅览器上驻留并履行,因而运用程序与服务器的交互就与传统 Web 运用程序的办法有很大的不同。不需求获取混合的内容页面,只需求获取事务数据即可。

现在回到 Amazon.com 的比如上来,假定咱们点击了一个链接,要检查有关规划形式的一本书本。在 Amazon.com 现在的运用程序中,链接点击操作会发送许多标识所恳求的资源的信息。它还会发送许多会话状况信息,这让服务器能够创立一个老婆性欲太强新页面,其间能够包含之前的状况(例如最近检查的内容)、个性化信息(例如您在 1999 年购买的书本)以及实践的事务资源自身。运用程序是嘉丽娜杜波动态且高度个性化的 —— 可是却不能缓存,也无法弹性(正如 Amazon 所演示的相同,这些架构问题都能够经过投入许多资金构建基础设施来战胜)。现在咱们考虑一下这个操作在(设想的)Ajax 版别的运用程序中的状况。关于 “最近检查的内容” 并不需求进行处理。当咱们点击某个链接时,这些在页面上现已存在的信息并不会消失。有两个恳求很或许会与规划形式的书本有关:

  • /Books/0201633612(其间 0201633612 是规划形式书的 ISBN 号)
  • /PurchaseHistory/0201633612/bhiggins@us.ibm.com

第一个假定的恳求会回来有关书本的信息(作者、标题、简介等);其间并没有包含特定于用户的数据。特定于用户的数据意味着当更多用户恳求相同的资源时,很或许会从 Internet 上的中心节点上来检索缓存版别,而不是从原始服务器上检索这些资源。这种特性会下降服务器和整体网络负载。别的一方面,第二个恳求包含了特定于用户的信息(Bill Higgins 的购买该书的历史记载)。由于这些数据包含一些个性化信息,因而只要一名用户需求从这个 URI 中获取并缓存数据。虽然这种个性化数据并没有非韩国越轨个性化数据的可弹性特性,可是重要的问题是这些信息都是直接从 URL 中获取的,因而都具有这样的正面特征:它们都不会阻碍其他可缓存的运用程序和数据资源的缓存

Ajax 和健壮性

Ajax 架构风格的别的一个长处是它能够轻松处理服务器的毛病。正如咱们前面介绍的相同,具有融入式用户铁皮石斛的成效与效果,磁力兔子-长高的黄金季怎能错失它!含钙量超牛奶10倍体会的服务器端 Web 运用程序一般会在服务器上保存许多的用户会话状况。假如服务器发生了毛病,会话状况就丢掉了,那么用户就会体会到十分古怪的阅览器行为(“于港妹为什么我又回到主页上来了?我的购物车中的东西都到哪里去了?”)。在选用有状况客户机和无状况服务的 Ajax 运用程序中,服务器溃散/从头启动关于用户来说都是彻底通明的,由于服务器溃散不会影响会话状况,这些都保存在用户的阅览器中;无状况服务的行为是幂等的,能够由用户恳求的内容来独自确认。

许诺和问题

关于咱们称为融入式 Web 运用程序的那些 Web 运用程序来说,规划杰出的 Ajax/REST 运用程序在用户体会、呼应性和可弹性性方面都远远超越传统的服务器端 Web 运用程序。可是,一种架构风格的运转时特征关于软件项目和 Web 运用程序来说并非是决议成功的专一要素。在创立 Ajax/REST 运用程序时有一些十分困难的非运转时问题,包含大规模 JavaScript 开发、文明问题和打包问题。咱们将在别的一篇文章中评论有关文明的问题,其他内容留下我那些研讨 Ajax 的同僚们去处理。

相关文章

标签列表