HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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:323431
用户头像

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

关注

评论

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

阿里巴巴研究员吴翰清采访提纲:天才少年之路

Nydia

签约计划

“湘”遇区块链 赋能新业态

CECBC

使用 SpringBoot 的 CommandLineRunner 遇到的坑

Java小咖秀

容器 开发 springboot CommandLineRunner ApplicationRunner

ES 终于可以搜到“悟空哥”了!

悟空聊架构

中文分词 elasticsearch 分词 ES ik

存储成本降低80%!US3在海量数据归档存储下的成本优化技术实践

UCloud技术

存储 海量数据 存储成本

加密原理详解:对称式加密VS非对称式加密

vivo互联网技术

加密 rsa

【Knative系列】看完这篇还不懂 Knative Serving,你来打我~(史上最详细)

公众号:云原生Serverless

Serverless 云原生 Knative

源中瑞区块链农产品溯源--推动农业科技发展

13530558032

快来,告诉你一个赚钱的秘诀:金钱的秘密

帅安技术

赚钱 秘密 金钱的秘密

《采访提纲:声网 Agora.io 资深 iOS 开发工程师--龚宇华》

空城机

签约计划 4月日更 热门活动

AUC/ROC:面试中80%都会问的知识点

华为云开发者联盟

机器学习 面试 mindspore roc AUC

聪明人的训练(二十一)

Changing Lin

4月日更

专访彩食鲜 CTO 乔新亮:CTO的“升级”秘笈

IT蜗壳-Tango

库存溯源之批次管理

Geek_vidmje

溯源 供应链 仓储 冷链 wms

哭了!“日志注入”为什么跟想象中的不一样

华为云开发者联盟

Java 参数 日志注入 log4j2框架 异常堆栈

读《乌克兰拖拉机简史》有感

箭上有毒

读书笔记 4月日更

LiteOS内核源码分析:消息队列Queue

华为云开发者联盟

队列 LiteOS LiteOS内核 消息队列Queue 队列池

四两拨千斤——你不知道的VScode编码TypeScript的技巧

葡萄城技术团队

美国工程院士、谷歌首席架构师 杰夫·迪恩(JeffDean) John 易筋 ARTS 打卡 Week 45

John(易筋)

ARTS 打卡计划

网络安全传奇吴翰清采访提纲 |调查采访能力考核

清秋

网络安全 签约计划 调查采访能力考核

应用区块链技术打通各自为战形成的壁垒

CECBC

【LeetCode】解码方法Java题解

Albert

算法 LeetCode 4月日更

Semaphore自白:限流器用我就对了!

王磊

Java 多线程 Semaphore

张超 - 机锋网联合创始人 - 采访提纲:那些 3 个月就上线的产品,如何去做技术规划?

梦想橡皮擦

签约计划

MySQL内置函数

Sakura

4月日更

智慧平安社区建设--赋能基层治理

13530558032

区块链电子合同签约,推动合同签约数字化转型

13530558032

python内置数据结构list、set、dict、tuple(二)

若尘

List 数据结构 set 元组 Python编程

NumPy之:NumPy简介教程

程序那些事

Python 数据分析 Python3 Numpy 程序那些事

Zookeeper基础原理&应用场景详解

leonsh

zookeeper 中间件 ZooKeeper原理

别再问我 2050 可以干什么,Make a Movie in a Day!

阿里云视频云

电影

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