AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

Google 专家分享网站优化最新技术

  • 2013-12-04
  • 本文字数:2132 字

    阅读完需:约 7 分钟

性能是任何一个网站成功的关键,然而,如今日益丰富的内容和大量使用 Ajax 的 Web 应用程序已迫使浏览器达到其处理能力的极限。在最近举行的 O’Reilly Velocity 会议上,来自 Google 的工程专家 Colt McAnlis 和 Steve Soulders分享了最新的前端优化技术,包括“减少对浏览器GC 垃圾回收机制的依赖”和“页面预获取”等。

Colt McAnlis 目前是 Google 公司的关注于原生客户端的开发工程师,在此之前他曾经作为一名系统和图形程序员就职于游戏行业的 Blizzard、Ensemble 和 Petroglyph 等公司。Colt 讨论和解决了当前移动 Web 开发者们感到最棘手问题之一:JavaScript 的性能。因为 JavaScript 解析引擎使用 GC(垃圾回收机制) 管理内存,所以基于 Web 的 JavaScript 应用程序可能会遭遇性能问题,尤其是在移动客户端上。McAnlis 告诉 Web 开发者听众: “你们不应该依靠垃圾回收器。”

GC 通过自动将程序不再需要的内存返回到操作系统来帮助程序员。不过用 C 和 C++ 等低级别的语言编写代码来管理内存是一个艰苦的过程,并且不管怎样,这样的语言不被浏览器所原生支持。

许多 JavaScript Web 应用存在的问题是,JavaScript 引擎会在看似随机的时间执行其垃圾回收的例行任务,这样会使得应用程序暂时变慢。例如,视频应用的帧频可能会降低,或者应用程序执行操作的时间可能会从标准的 3 至 5 毫秒跳跃到可引起人注意的 20 毫秒。

McAnlis 引用了一个研究结论说,总体而言,若要让 GC 在不被用户察觉的情况下工作,系统内存至少需要六倍于现在的设备所使用的内存。而考虑到移动设备有限的内存与其运行的需要大量内存的应用程序的数量,这会是一个苛刻的要求。

闭包是一种扩大本地定义变量可用性的程序员友好型技术,其使用的增加加剧了这一问题。例如, jQuery 是一种被广泛使用的依靠闭包的 JavaScript 库,其结果是在内存分配中造成大量的挥霍。

当提及闭包在其所消耗的内存的量方面是多么的不可预测时,McAnlis 说:“闭包所引起的问题吓到我了。”他建议,为了提高性能并更好地管理内存,开发人员应该使用一种类似于中间件库 Emscripten 所使用的方法,这种方法正被用于构建高性能的 HTML5 Web 游戏。

Emscripten 把用 C 和 C++ 编写的代码转换成 JavaScript, 使其可以从应用程序自身内部管理内存。基于 Emscripten 的程序会预先从系统中分配出一块内存。程序员连同 Emscripten 一起决定何时不再需要内存,并把这部分未使用的内存归还到其内部的可用内存中。JavaScript 引擎不对程序做任何垃圾回收工作,所以不会影响程序的性能。

McAnlis 说,一般而言,利用这项技术编写的程序可比典型的 JavaScript 程序的运行速率高两至四倍,并免于遭受由于 GC 的操作而带来的偶尔性能滞后。

Steve Soulders 负责 Google 公司的 Web 性能和开源组织。他是 Firebug 性能分析扩展工具——YSlow 的创造者,也是 O’ReillyWeb 性能与运作会议 Velocity 的联合主席。他曾经在 Yahoo! 担任 Chief Performance。Steve 在另一个讲座中,提到了部分新兴浏览器技术,这些新兴技术的作用在于页面被用户请求之前的预获取。Soulders 解释道,这个想法就是,浏览器应该能够在用户请求页面之前便预见到其可能想看的下一页。“你不知道用户的下一步会是什么,但是你能从他 / 她在刚刚请求的页面上的意图找到更多的线索”,Soulders 说。然后他解释了开发利用这一知识的几种技术。

开发人员可以向一个页面的超链接添加 HTML dns-pre-fetch, pre-fetch 和 pre-render 标签。一旦一个页面被加载,此类标签可以在用户请求之前,命令浏览器去获取在这个原始页面中被链接的页面的部分内容。dns-pre-fetch 标记告诉浏览器查找 Web 页面链接所指向的页面的域名,pre-fetch 标签告诉浏览器抓取整个页面,pre-render 告诉浏览器构建整个页面,就好像浏览器正在一个隐藏的选项卡上显示这个页面。当被部署时,所有这三个种标签可以缩短请求 Web 页面和显示那个页面的时间间隔。

Soulders 警告开发者要明智地使用这些标签,因为它们会增加带宽和处理器的使用率。但在许多情况下,例如在一个登陆或者显示搜索结果的页面上,有相当高的可能性,用户将点击其于页面上发现并已经被交付的链接之一。不同的浏览器对于这些标签的支持各不相同,但大多数浏览器制造商似乎在向其即将到来的新版本添加对它们的支持。

浏览器本身也有一些加快网页交付速度的方法,如 DNS 预解析和 TCP 预连接。利用 DNS 预解析,通过观察用户在导航栏中开始键入的字母是什么,或者甚至通过例行获取用户最常访问的 Web 网站的 IP 地址等操作,浏览器可以预见到下一个将被访问的站点的域名。TCP 预连接通过类似的手段预见用户的下一步行动。Soulders 说,它通过打开端口并针对一个最终请求设置所有协议,来“预热”与站点的连接。

提起网站优化,许多前端开发者会立刻想到 Yahoo 的网站优化准则,随着研究和技术的不断发展,规则也从最初的 14 条增长到了如今的 34 条,但是最核心的一些基本原则依然被网站开发者作为圣谕,包括:

  • 减少 HTTP 请求
  • 使用 CDN 技术
  • 设置 HTTP 文件头过期和缓存控制字段
  • 启用 Gzip 压缩
  • 尽量把样式表放在页面顶部
  • 尽量把 Javascript 代码放在页面底部
  • 避免 CSS 表达式
  • 将 Javascript 和 CSS 外链
  • 减少 DNS 查找
  • 避免重定向
  • 删除重复脚本
  • 配置 Etags
  • 缓存 Ajax
  • ……
2013-12-04 23:323616
用户头像

发布了 501 篇内容, 共 267.2 次阅读, 收获喜欢 62 次。

关注

评论

发布
暂无评论
发现更多内容

2021百度之星报名开启 特设“小星星”奖项鼓励少年AI人才

百度大脑

AI 百度之星 少年

并发王者课-青铜5:一探究竟-如何从synchronized理解Java对象头中的锁

MetaThoughts

Java 多线程 并发 并发王者课

从源码中来,到业务中去,React性能优化终极指南

有道技术团队

大前端 React 有道精品课

聊聊微服务治理的落地问题 | Geek大咖说第二期

百度Geek说

微服务 自动化

索信达控股:金融机构如何打造最适合自己的个性化推荐系统?

索信达控股

大数据 金融科技 金融 个性化推荐 营销数字化

阿里云联合中国信通院发布《云计算开放应用架构》标准,加速云原生应用规模化落地进程

阿里巴巴云原生

容器 开发者 运维 云原生 k8s

另一种总结的方式

Nydia

学习

2021年爆火的低代码开发技术,对企业而言有什么好处?

优秀

低代码

Django 之视图篇

若尘

django 视图 Python编程 5月日更

网格策略交易软件,量化马丁倍投交易机器人

教你用User Story设计BI驾驶舱

薄荷点点

数据产品经理 用户故事地图 产品需求

并发王者课-青铜6:借花献佛-如何格式化Java内存工具JOL输出

MetaThoughts

Java 多线程 并发 并发王者课

吾日三省 - DAY 16

Qien Z.

5月日更 半年总结

☕️【Java 技术之旅】从底层分析LockSupport原理机制

码界西柚

Java JVM lock锁 5月日更 LockSupport

要想成为牛人,推荐学习哪种编程语言?

实力程序员

出于信仰,我去考了一个证

大可不加冰

云计算 IaC Terraform HashiCorp

如何通过别名扩展Git

kenny

bash git git扩展

OCR性能优化:从神经网络到橡皮泥

华为云开发者联盟

神经网络 机器学习 OCR 橡皮泥 CNN网络

最佳入门系列 | 何为服务网关?

架构精进之路

微服务 5月日更

Terraform中使用prevent_destroy搭配override文件防止误删资源

大可不加冰

云计算 基础设施即代码 IaC Terraform HashiCorp

Qemu KVM Guest增强简述

焱融科技

云计算 虚拟机 高性能 存储 qemu

【Flutter 专题】124 日常问题小结 (三) 自定义 Dialog 二三事

阿策小和尚

5月日更 Flutter 小菜 0 基础学习 Flutter Android 小菜鸟

谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘

华为云开发者联盟

计划 数仓 GaussDB(DWS) 查询语句 估算

BI系统里的数据赋能与业务决策

薄荷点点

数据产品经理 决策 BI 数据驱动 风险识别

合作伙伴眼中的HarmonyOS 专访方太智能厨电专家俞贵涛

科技汇

这可能是中文互联网第一本系统性讲解Terraform的入门教程

大可不加冰

云计算 IaC Terraform HashiCorp 不可变基础设施

用Terraform申请Letsencrypt证书

大可不加冰

云计算 证书 IaC Terraform HashiCorp

集群镜像:实现高效的分布式应用交付

阿里巴巴云原生

数据库 容器 开发者 云原生 存储

MySQL 数据库救火:磁盘爆满了,怎么办?

华为云开发者联盟

数据库 磁盘 MySQL 数据库 日志文件 磁盘爆满

安全专栏加餐

escray

学习 极客时间 安全 5月日更 安全攻防技能30讲

Dubbo 序列化

青年IT男

dubbo

Google专家分享网站优化最新技术_Google_崔康_InfoQ精选文章