大家好,我是 Google+ 基础架构团队的工程师。早在 7 月份,当 Joseph Smarr 开发出了 Ask Me Anything 栏目后,很多人都想知道一些关于 Google+ 技术架构方面的信息。我们几个工程师觉得应该写一些关于这个题目的文章,给大家分享。
对于 Google+ 团队,我们头一个要认真处理的问题就是:页面生成速度。在谷歌,我们十分在意速度,下面就是我们用来提升速度的 5 项技术。
1. 我们喜欢 Closure
我们喜欢 Closure。非常的。我们使用 Closure 类库,模板以及编译器来生成 Google+ 所有页面上的所有元素——包括驱动这些页面的 JavaScript。但真正让我们获得速度的是以下几点:
— Closure 模板即能用于 Java 也能用于 JavaScript,生成的页面即能在 Server 端运行,也能在浏览器里运行。通过这种方式,内容总是能理解展现,我们还可以在后台加载 JavaScript (“修饰”页面,在页面元素上挂载事件监听器)
— Closure 能让我们在写 JavaScript 脚本时仍然可以享用严格的类型和错误检查,死代码清除,跨模块提示,以及其它的很多辅助优化便利。
(访问 http://code.google.com/closure/ 来获取更多关于 Closure 的信息)
2. 在正确的时间正确的使用 JavaScript
为了管理驱动 Google+ 的 JavaScript,我们把它分割成小的模块,这样可以异步的分别加载它们。你只需要下载最少的必须的模块。由两种技术来实现这些:
— 客户端保存历史浏览记录的信息(URL 里的字符串信息代表这你当前处在某个页面上),用这种方法来调配 JavaScript 模块。
— 如果 JavaScript 没有加载完成,这个页面上的任何操作都会被禁止,直到加载完成。
这种技术框架也是 Google+ 在客户端页面导航时避免重新加载页面的技术基础。
3. 页面之间切换时避免刷新页面
一旦 JavaScript 被加载,所有的页面内容都使用 JavaScript 生成,不需要再到服务器端去取,这样做效率更高些。我们设置了一个全局的监听器,监听所有标记的点击事件。如果允许的话,我们会把点击转化成页面内部的切换。如果条件不允许,客户端会生成这个页面,如果你在链接上使用鼠标中键或控制键的点击,我们会让浏览器按常规链接打开这个页面。
页面上锚标记总是指向一个常规的 URL (例如,你在 HTML5 里的历史记录里的 URL),这样,你能容易的拷贝/分享这个页面链接。
4. 部分(HTML)页面块刷新
在客户端,一旦我们接收到部分数据,我们就立即生成这块内容,让它可见,不必等到整个页面加载后才能显示。
为了实现这些,我们通过:
— 首次请求时,我们就把所有数据异步的取回
— 只有在需要生成这部分页面数据时,才会遇到延迟现象
这种技术也能让我们尽早的加载 CSS,JavaScript,图片以及其它资源,使网站更快,响应效果更好。
5. iFrame 是我们的朋友
为了能并行的加载 JavaScript,避免浏览器卡住(http://goo.gl/lzGq8),我在页面的 body 标记的顶部的一个 Iframe 里加载 JavaScript。在 iframe 里加载 JavaScript 增加了代码的复杂度(通过 Closure,我们很好的解决了这个问题),但是为了速度的提升,值得这样做。
做一个解释,你们也许注意到了我们是使用 XHR,而不是使用 style 标记来加载 CSS 的 – 这并不是我们做的优化,这是做是因为我们达到了 IE 浏览器里每个样式表文件里 CSS 选择器的上限!
最后注解
这些只是整个 Google+ 面纱下事情如何运转的一小部分介绍,我们以后会写更多像这样的文章。请在评论里留下你的想法!
译者注:Mark Knichel 发布了这篇文章后,很多人在评论里表达了不同的观点,有些人认为 iFrame 是一种应该被淘汰的技术,有些人认为 Closure template 影响了程序的可维护性。但我反过来一些,这似乎正说明了谷歌的程序员在开发上享有很高的自由度,他们可以使用任何他们自己喜欢的技术。
来自: 外刊IT评论
本页链接: http://www.scriptlover.com/static/1257-google-开发-团队-经验
分享到:
相关推荐
同时,Google+还开始探索灵感话题的搜索,尽管当时这一功能仍在开发中,预示着未来平台将提供更加丰富的内容推荐。 其次,Google+的核心更新之一是移动设备上的视频群聊服务。这次更新使得Android和iOS平台的Google...
论文中,Google分享了Dapper在实际生产环境中的应用案例,展示了其在处理海量日志数据、优化服务性能和定位故障等方面的有效性。Dapper的实践经验和设计思想对后来的分布式追踪系统,如Jaeger、Zipkin等,产生了深远...
`overtrue-share.js`就是这样一款强大的JavaScript库,它能够帮助开发者快速实现这一功能,覆盖了包括但不限于微博、QQ、微信、豆瓣、Facebook、Twitter、LinkedIn、Google+以及点点在内的多个国内外主流社交网络。...
专为网页内容提供一键分享功能,它使得用户可以方便地将网页内容分享到各种社交媒体平台,如微博、QQ空间、QQ好友、微信、腾讯微博、豆瓣、Facebook、Twitter、LinkedIn、Google+以及点点等。这款插件的设计理念是...
本书由Michael Purvis、Jeffrey Sambells和Cameron Turner三位作者共同编写,他们都是在Web开发领域有着丰富经验的技术专家。本书的前言由Mike Pegg撰写,他是Google Maps Mania博客的创始人,这为本书增添了不少...
### 社区类iOS应用开发的技术实践分享 本次分享由麻麻帮创始人陈剑飞进行,主要内容涵盖了在iOS开发过程中的一些实用技巧和技术实践。陈剑飞作为一位有着丰富经验的iOS开发者,通过自身的经历和实战案例,为我们...
综上所述,从 Windows 开发到 Java、.Net 技术,再到数据库管理和算法设计,以及分享实践经验,这些都是 IT 领域中非常重要的知识点。通过对这些内容的学习和掌握,可以有效提升个人的开发技能,更好地适应快速发展...
包含资源名称下载地址 Android 开发从入门到精通 ...个人和小团队APP推广的心得、经验、体会 APP应用在google market和appstore上架的区别分析 APP如何推广 介绍ios及android平台app应用的推广方法与渠道
1. **Android Studio入门**:首先,你需要熟悉Android Studio,这是Google官方推荐的Android应用开发集成开发环境(IDE)。了解其界面布局、项目结构以及如何创建新的Android项目是至关重要的。 2. **...
在这个阶段,开发团队会通过调研、访谈和问卷调查等方式收集并整理这些需求。 接下来是系统架构设计,这是将需求转化为实际解决方案的过程。在Android开发中,通常采用MVP(Model-View-Presenter)或MVVM(Model-...
接下来,SpringBoot是基于Java的微服务框架,由Pivotal团队开发,旨在简化Spring应用的初始搭建及开发过程。SpringBoot通过自动配置、内嵌式Web服务器(如Tomcat)、起步依赖等特性,极大地提高了开发效率。在本项目...
它由Google开发,可以轻松地实现客户端和服务器之间的高效通信。 - **特点**: - **高性能**:基于HTTP/2协议,支持双向流、头部压缩等特性,使得通信效率更高。 - **语言和平台无关**:支持多种编程语言,包括...
1. **社区互动**:TechConnect可能拥有一个活跃的用户社区,用户可以在其中发布问题、分享经验,与其他成员进行技术讨论,形成互助的学习氛围。 2. **在线课程**:TechConnect可能会提供各种在线课程,涵盖编程语言...
《IT产品开发与设计》这期内容涵盖了产品创新、产品评测、产品经理的职业发展、招聘信息以及实践经验分享等多个方面,对于从事IT产品开发的专业人士来说是非常有价值的参考资料。通过这些内容,不仅可以了解到最新的...
随着越来越多的企业采用云解决方案,这部分内容提供了当今云市场的主要参与者概览,例如Amazon Web Services (AWS)、Microsoft Azure和Google Cloud Platform等。它还介绍了企业为何选择迁移至云端——无论是为了...
2. **文档协作**:多个团队成员可能同时在编辑这份文档,因此了解如何使用协同编辑工具(如Google Docs或Microsoft Office的协同编辑功能)以减少冲突和确保一致性是必要的。 3. **文件格式**:使用.doc格式的文件...
5. **共享与协作**:如同谷歌日程表,用户可以分享自己的日程给其他人,实现团队协作,共同管理项目或活动。 6. **权限管理**:系统可能包含权限控制,使得用户可以决定谁可以看到他们的日程,增加数据安全性。 7....
3. **商业模式创新**:“互联网+”强调的是跨界融合,大学生创业者应探索新的商业模式,如O2O(线上到线下)、分享经济、电子商务等,打破传统行业的边界。 4. **网络营销**:互联网为营销提供了新渠道,如社交媒体...
Tensorflow是一个广泛使用的开源深度学习库,由Google Brain团队开发。它提供了丰富的API,可以方便地构建、训练和部署机器学习模型。在知识蒸馏的应用中,Tensorflow提供了一个强大的平台,能够灵活地定义教师模型...