我只是想知道GMail遵循的客户端架构的优势是什么。 我的意思是页面上多个iframe的优点是什么;一个是html布局,另一个是所有的javascripts?
执行所有DOM操作不是更复杂吗? (你需要搜索js ifram< - > top< - > html iframe)。
你有什么专家的想法?
答案 0 :(得分:7)
简而言之:为了客户端的表现。
因为GMail有很多Javascript(大约700 KB),所以下载和运行所有内容需要一些时间。通过使用单独的iframe,下载并运行Javascript不会阻止浏览器UI。流行浏览器将并行执行单独iframe中的脚本和UI事件。此方法还允许您在其他iframe 中为接口构建完整的DOM,而脚本仍在执行中。 This article describes阻塞脚本问题的常见解决方案。
需要使用另一个iframe才能使浏览器历史记录正常工作。如何正常工作可以在Google的Closure Library中的implementation中看到。
至于确保正确操作DOM的复杂性的影响:GMail中的UI组件的构造函数(也是Closure库的一部分)都采用可选的DOM辅助参数。此帮助程序绑定到特定的DOM,该DOM可能位于不同的框架中。操作不同的DOM完全内置于这些UI组件的设计中。
答案 1 :(得分:5)
我很确定iframe不是用于推送“反向ajax”的东西。 Gmail使用Google Closure Library的goog.net.BrowserChannel系统来处理这些系统,并使用xhr和activex htmlfile传输。 (见:http://closure-library.googlecode.com/svn/docs/class_goog_net_BrowserChannel.html)
这就是我所知道的,但我想至少有一个框架可用于管理历史。
答案 2 :(得分:4)
这是一个用于反向ajax的“无限帧”(服务器在事件发生时向客户端发送消息,而不是客户端询问服务器的正常ajax)。来自wikipedia:
动态网络的基本技术 应用程序是使用隐藏的IFrame HTML元素(内联框架,其中 允许网站嵌入一个HTML 文件在另一个内部)。这个 隐形IFrame作为分块发送 block,隐式声明为 无限长(有时称为 “永远的框架”)。随着事件的发生, iframe逐渐被脚本填充 标签,包含JavaScript 在浏览器中执行。因为 浏览器呈现HTML页面 逐步地,每个脚本标记是 在接收时执行。
IFrame方法的一个好处是 它适用于每个常见的浏览器。 这种技术的两个缺点是 缺乏可靠的错误处理 方法,和不可能性 跟踪请求的状态 呼叫过程。