惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
L
LangChain Blog
量子位
GbyAI
GbyAI
B
Blog RSS Feed
月光博客
月光博客
人人都是产品经理
人人都是产品经理
腾讯CDC
Recent Announcements
Recent Announcements
Microsoft Azure Blog
Microsoft Azure Blog
I
InfoQ
The Cloudflare Blog
D
Docker
Cyberwarzone
Cyberwarzone
U
Unit 42
NISL@THU
NISL@THU
C
Check Point Blog
B
Blog
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
Recorded Future
Recorded Future
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
P
Proofpoint News Feed
F
Fortinet All Blogs
V
V2EX
T
Threat Research - Cisco Blogs
T
Threatpost
S
SegmentFault 最新的问题
Know Your Adversary
Know Your Adversary
雷峰网
雷峰网
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园 - 司徒正美
P
Privacy & Cybersecurity Law Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
TaoSecurity Blog
TaoSecurity Blog
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Y
Y Combinator Blog
P
Privacy International News Feed
L
Lohrmann on Cybersecurity
AWS News Blog
AWS News Blog
G
Google Developers Blog
美团技术团队

博客园 - 阿凯(china)

程序员的.NET时代 Web 2.0 概念汇总 使用AJAX技术开发新一代Web应用程序 1 Ajax的宣传及现状:改变门户体验的技术 AJAX简介(转) AJAX开发简略 (第二部分) AJAX开发简略 (第一部分) 转载:XMLHTTP介绍 - 阿凯(china) - 博客园 AJAX基础教程 近10年最强的50本计算机图书,您读过几本? 2005年十本最佳商业与管理书籍 Asp.Net 学习资源列表 ASP.NET 2.0 绑定高级技巧 ADO.NET 2.0 功能一览 深度解析Asp.Net2.0中的Callback机制 学习杂记1 关于视图状态 ASP.NET 2.0 中的数据源控件 ASP.NET 2.0 和数据绑定控件:新的角度,新的做法
使用AJAX技术开发新一代Web应用程序 2
阿凯(china) · 2005-12-29 · via 博客园 - 阿凯(china)

  三、网络的潜力

  互联网时代的伟大就在于世界各地所有的计算机互相联系,就象在一个非常大的计算资源之中。远程和本地过程调用变得很难区分,并且发行者已经不再清醒地了解它们在哪些物理机器上工作。

  不幸的是,远程和本地过程调用是根本不相同的技术。

  在网络上的通讯是昂贵的(它们是慢并且不可靠的)。当一部分非网络代码被编译或解释时,各种方法和函数就象在其上操作的数据一样被编码为存储在相同的本地内存中的指令(图6)。这样,把数据传递给一个方法并返回结果就相当直接。


图6 本地过程调用序列图-在此很少的元素如程序逻辑和数据模型都被存储在本地内存并能彼此直接看见。


  其实在底层,为了发送和接收数据,很多计算运行于一个网络连接的两端(图7)。实际上,这种计算远不如沿着物理线路的运行更导致系统的减慢-各级的编码与解码遍及通讯的各个方面,从沿着线路传输的物理信息,把这些信息翻译为二进制的1和0,错误检查和重发送,到重新整合该二进制序列。


图7 一个远程过程调用序列图。在一台机器上的程序逻辑试图操作在另外一台机器上的数据模型。


  调用函数的请求必须被编码为一个稍后将被串行化的对象(也即,被转换成一个线性字节集合)。然后,被串行化的数据被传递到应用程序协议(现在通常为HTTP)并且通过物理传输发送。

  在远程机器上,该应用程序协议被解码,并且数据的字节被反串行化以创建该请求对象的一个副本。然后,这个对象被应用到数据模型和一个生成的响应对象上。为了联系该响应和调用函数,该串行化和传输层必须被再一次导航,最后导致一个响应对象被返回到调用函数。

  这些客户端是复杂的但是适合于自动化实现。现代的编程环境例如Java和微软.NET框架都提供了这种功能的自由使用。尽管如此,当产生一个远程过程调用(RPC)时,在内部有大量的活动在进行并且如果这样的调用太自由的话,性能也会受到影响。

  因此,通过网络的调用永远不会象调用本地内存中的一个方法那么富有效率。而且,网络的不可靠性(并因此需要重新发送失去的信息包)也使得这种低效在不断变化且很难预测。在你的本地机器上的内存响应性不仅更好一些而且相比之下可以被很好地定义。

  这但与可用性有什么关系呢?已证明,其关系相当大。

  一个成功的计算机UI的确需要模仿我们真实的世界期望。该交互的最基本原则之一是,当我们点按某东西时,它能够立即响应。在点按和响应之间的轻微的延迟都会带给用户迷惑并使之分神-把用户的注意力从手头的任务转移到UI本身。

  必须做所有的额外工作来穿越网络常常就足已减慢一个系统,以至于该延迟变得相当引人注意。在一桌面应用程序中,我们需要做出糟糕的可用性设计决策来使得应用程序感觉起来充满错误或不具有响应性,但是在一个联网应用程序中,不需要我们关心这些!

  由于网络潜力的不可预测性,这种可察觉的错误来来去去,并且测试应用程序的响应性也可能变得更为困难。因此,网络潜力是真实世界应用程序具有可怜的交互性的最通常的原因。