热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

所谓快速的浏览器到底是什么意思?

所谓快速的浏览器到底是什么意思?【51CTO精选译文】本文从技术和用户体验的角度,一一介绍了影响浏览器速度的因素,以及如何判定一个浏览器是
所谓快速的浏览器到底是什么意思?

【51CTO精选译文】本文从技术和用户体验的角度,一一介绍了影响浏览器速度的因素,以及如何判定一个浏览器是否快速。本文作者Evan Martin是Google Chrome项目的开发者,文章来自他的个人博客,与Google官方并无关系。以下为原文编译:

所谓快速的浏览器,到底是什么意思?事实上这是个挺困难的问题。我在最近的Ubuntu开发者峰会上被邀请谈谈这方面的问题,并写下这篇文章进行补充。

基准测试

很多人会先想到基准测试。科技媒体喜爱基准测试,因为基准测试提供了数字,可以用来描绘美丽的对比图。然而从本质上而言,基准测试衡量的都是十分具体的参数,仅能用来模仿用户可能将经历的过程。浏览器最重要的基准测试就是Javascript基准测试,然而虽然没人会否认Javascript的重要性,但Javascript毕竟不是大多数简单网页加载速度的决定性因素。我认为现在针对Javascript引擎所作的改进主要是为了未来将被创建的站,比如这个Javascript NES模拟器。当然了,像是Gmail这样大大得利于快速JS引擎的站也不算少了。

通过Javascript基准测试得出的结论往往是令人乏味的,比如:“Wine实现的Mozilla比Linux编译的Mozilla快,所以Mozilla并不重视Linux”。Javascript基准测试就是能够得出这样缺乏引导性的结论,而事实是,浏览器对于Javascript的实现代码在各个平台上都是几乎完全一样的!上面这个测试的速度差很可能来自编译器质量的不同,所以Mozilla遇到的差别在其他跨平台浏览器上应该也能够看到。这样的评论从各个层面来看都是十分无聊的。第一,该结论毫无依据;第二,Javascript基准测试从设计而言和平台毫无瓜葛;最后,这些基准测试甚至没有针对每个平台特有的代码进行测试。

新的基准测试正尝试覆盖Javascript之外的内容。Dromaeo是个不错的例子,这个测试有一部分是针对DOM的。不过,我们要小心第三方的基准测试!对于Dromaeo还好,它的作者John比其他大多数浏览器开发者对Web开发的理解要来的更深入;但对其他人我就不怎么放心了。写一个看起来不错的性能测试并不难,但它测试的不一定是有用的东西。好比说,SunSpider 0.9.1发布声明中就有一段内容,有关测试框架与能源管理之间交互的一个bug。要知道,这个bug涉及到的作者是一个经验丰富的浏览器开发者,而不是随便哪个Web开发爱好者。

周期计时

一个更好的测量方法可能是观察浏览器从头至尾加载一个真实的网页的性能,这个过程包含了Javascript引擎以及其他部件的工作:HTML解析,字体测量等等。我们和Mozilla(我想其他浏览器厂商应该也都有)都有针对本地页面的测试工具。对于第三方测试者而言,通过使用这些工具来测试比较浏览器的加载速度是很自然的选择,唯一的不同在于他们的测试对象是真实的网页(如Yahoo主页),其测试结果也往往是有版权而无法公开的(就我所知,我们的测试页都被设为隐私;而我在Mozilla也只找到这样一个页面)。

为了使测试数据可以重现,通常的测试方式都是从本地读取一个页面文件,而不是从网络上读取加载(51CTO编者注:记得Google那个切土豆的视频么?有细心的网友发现视频中的测试页面是本地地址,这实际上是浏览器速度测试的通用做法)。目前讨论的基准测试当中,还没有一个将网络速度包含在测试因素内。这是一个遗憾,因为这是个很有趣的领域。比如说,不同的浏览器如何使用不同的单个host连接限制,或者Chrome如何在启动时进行DNS预读取(这个DNS预读取的行为事实上比任何Web渲染或JS处理造成的影响都要大。你可以在Chrome中输入about:dns进行进一步了解)。

Chrome vs 土豆 

网速之外,仍然有其它影响浏览器性能的环节,比如网络协议层以及缓存。我记得在Chrome开发前期,Mike还是Nagle曾经发现过一个网络层的bug,这个bug造成Chrome读取网页的速度迟于IE。上面所有的这些测试都无法呈现出这个bug的效果。另外从某种角度而言,将像素呈现在屏幕之上所花费的时间也可以算作一个环节。Gmail的加载更是一个疯狂的多重过程,这个过程在例常的Javascript和呈现的步骤之外还包含了好几次重新导向、进度条等部分;而就我所知,似乎还没有哪个测试是针对Gmail的加载速度而进行的。

 

秒表

所有的测试在本质上都是虚幻的,并不能代表真正的浏览过程。人们终于意识到这一点似乎是从微软发布IE8开始,当时微软的基准测试声称IE8是最快的浏览器。基准测试的某一项叫做“我们付钱雇了一些志愿者仔细的看,他们说我们是最快的”,然而不幸的是,而这一项测试的结果无论动机如何纯洁,都无法使大多数人接受。事实上,这样的测试比任何一种性能基准测试都更接近于我们的目标,但糟糕的是,这种测试的结果数据完全无法重现。也许浏览器开发者们会针对这点进行优化?

心理作用和Jank

人们称一个浏览器为快速的原因不仅是上面提到的这些。从可测量的数字到模糊的秒表测试,我可以确认一点:比测试性能更重要的是,用户感觉你快不快。下面我来讲讲这几个和网页无关的有趣因素。

其中一个叫做UI延迟(我们称之为jank)。当你在地址栏里输入的时候,浏览器的反应快么?创建新标签页的时候呢?Peter曾经就此做过一次演讲,虽然我没看,但应该是十分深入的一次课程。在对Ubuntu开发者演讲时我也十分希望强调此点,那就是即使你的应用能够在一秒之内呈现上千页面,一个小小的问题仍会让用户感觉你的应用很慢(比如Ubuntu的软件包更新工具在这方面我觉得就做的很糟)。我觉得这才是我们在性能上“超越”Mozilla,以及我们在Linux上日益流行的最大原因。当然,这是一个很难量化的因素。

减少jank的一个很好的例子就是Chrome中自动完成的实现。当你输入URL时,我们从您的浏览历史中提取URL的自动完成,以及相似地址的推荐。当你按下Enter键时,我们让Chrome进行了同步自动完成,以确保你进入的地址正是你所看到的地址。当然这也便意味着我们不能从磁盘读取数据,因为从磁盘读取的过程会令自动完成有所延时。因此我们的做法是,将整个自动完成的数据在浏览器启动时加载到内存当中(相比你的所有浏览历史,这部分数据并不是很大)。

启动

另一个有关性能的环节和上面所有的因素几乎完全没有关系,那就是启动速度。我在之前的演讲中提到了GNOME的计算器,不过他们现在已经修复了这个问题。好在类似的问题很多,比如Ubuntu的菜单也是,我每次都要数到5才能弹出菜单。对于Chrome的启动我写过十分详细的技术文档,从基准测试和适应低配系统等两个方面阐述。现在我们来看看为什么这十分重要。

我相信一个应用的启动速度确立了用户对其性能的期待。事情总是这样的:用户认为你很快总是要比你事实上快不快来的重要。当你的启动速度和轻量级应用一样快时,用户会觉得他们在使用一个轻量级应用,尽管事实并非如此(事实上,任何一个可以呈现页面的浏览器都是庞大的应用,包括我们的Chrome)。比如说,即使到今天我还是习惯时不时的使用vi编辑器,因为emacs启动实在太慢了。我甚至没有意识到我在下意识的拒绝使用emacs。

当然,快速的启动意味着在启动时做更少的工作,因此整个代码都需要进行仔细的工程。

结论

在Chrome工作三年,我从中学到的一大原则就是:如果你没有考虑某个性能,那么这项性能必然会退步。这是软件开发的一个自然现象,因为我们总是在为应用添加而非减少东西。因此,我们使用buildbots来为所有的性能测试创建图表(该页面巨大,当心浏览器崩溃)。每个退步的性能项都会变红,这事经常发生,然后我们就要修改代码。

总之一句话:基准测试仅仅在你了解该测试的技术细节时才有他的用处。如果你并非一个浏览器开发者,那么身为一个“专业人士”,我要说的是,自己打开网页尝试一下才是判断哪个浏览器最快的最佳方法。

原文:http://neugierig.org/software/chromium/notes/2010/05/fast.html

posted on 2015-05-18 09:17 玲儿灵 阅读(...) 评论(...) 编辑 收藏

转:https://www.cnblogs.com/jymz/p/4511086.html



推荐阅读
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • 在前一篇文章中,我们介绍了如何使用Requests库发送GET请求。本文将深入探讨如何通过Requests库发送POST请求,包括参数格式、请求封装等关键技巧,并通过“历史上的今天”API实例进行详细说明。 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • Git基础操作指南:掌握必备技能
    掌握 Git 基础操作是每个开发者必备的技能。本文详细介绍了 Git 的基本命令和使用方法,包括初始化仓库、配置用户信息、添加文件、提交更改以及查看版本历史等关键步骤。通过这些操作,读者可以快速上手并高效管理代码版本。例如,使用 `git config --global user.name` 和 `git config --global user.email` 来设置全局用户名和邮箱,确保每次提交时都能正确标识提交者信息。 ... [详细]
  • 我正在使用 Ruby on Rails 构建个人网站。总体而言,RoR 是一个非常出色的工具,它提供了丰富的功能和灵活性,使得创建自定义页面变得既高效又便捷。通过利用其强大的框架和模块化设计,我可以轻松实现复杂的功能,同时保持代码的整洁和可维护性。此外,Rails 的社区支持也非常强大,为开发过程中遇到的问题提供了丰富的资源和解决方案。 ... [详细]
  • jQuery Flot 数据可视化插件:高效绘制图表的专业工具
    jQuery Flot 是一款高效的数据可视化插件,专为绘制各种图表而设计。该工具支持丰富的图表类型和自定义选项,适用于多种应用场景。用户可以通过其官方网站获取示例代码和下载资源,以便快速上手和使用。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 在《PHP应用性能优化实战指南:从理论到实践的全面解析》一文中,作者分享了一次实际的PHP应用优化经验。文章回顾了先前进行的一次优化项目,指出即使系统运行时间较长后出现的各种问题和性能瓶颈,通过采用一些通用的优化策略仍然能够有效解决。文中不仅详细阐述了优化的具体步骤和方法,还结合实例分析了优化前后的性能对比,为读者提供了宝贵的参考和借鉴。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
author-avatar
多米音乐_34429718
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有