【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

不应忽视的 HTML 优化

  • 2010-05-13
  • 本文字数:1057 字

    阅读完需:约 3 分钟

随着 Web2.0 技术的不断发展,Web 前端的优化受到越来越多的关注,特别是 JavaScript 和 CSS 优化的讨论一直是热点,工具也相对丰富,而对 HTML 优化则有所忽视,最近,来自百度泛用户体验团队的工程师 Miller (chenminliang)撰文强调了HTML 优化的重要性和相关技巧。

Miller 首先举例说明了 HTML 优化稍显忽略的事实:

Steve Souders 的大作《 Even Faster Web Sites 》中谈到非常多有效的前端优化方法,例如 Javascript 的加载、CSS 选择符、图片优化、gzip、iframe 问题等,唯独没有细说 HTML 优化。

他强调 HTML 优化虽然看似微小,但是不可忽视:

在整个前端的构成中,HTML 是必不可少的一部分,而且是真正的展示“前端”。虽然与动辄十几 K 的 Javascript 相比,HTML 的大小在整个页面资源中一般不会占太多的比重,而且还有 Gzip,但是事实表明,大多数页面都有较大的压缩余地,即使是 Gzip 过后仍然能减小可观的体积…

Miller 在文中总结了 HTML 优化的各种方法,将其分为两类:绿色规则——在各类页面中适用且无害和橙色规则——在某些具体的情况下才适用或者有违标准。

绿色规则可以概括为以下几种:

  • 使用相对 URL,某些 href、src 属性如果与当前页面处于同一域名下,则使用相对 URL 能够节省至少一个域名的长度。
  • 删除 HTTP 或者 HTTPS,绝对 URL 都以 HTTP 或 HTTPS 等协议头开始,如果能确定 URL 的协议与当前页面 URL 的协议是一致的,或者说该 URL 在多种协议下均是可用的,则可以考虑删除这个协议头。
  • 删除注释,考虑不必要的 IE 条件注释和 CDATA 注释及自定义注释。
  • 压缩空白符,对于多数标签,可以通过删除多余的空白符来减少 HTML 体积,但是对于 pre 等是例外。
  • 压缩 inline css & Javascript,不管 inline 还是 external,都需要压缩,这是减小体积的最直接的方式。
  • CSS&Javascript 尽量外链,不仅可以减少体积,还能够充分利用浏览器的缓存机制。
  • 删除元素默认属性,在 HTML 规范中,很多 HTML 元素的属性是有默认值的,对于这些默认值可以抹去不写。

橙色规则就不一一列举了,感兴趣的读者可以直接查看原文

除了优化技巧之外,Miller 特别推荐了两款相关工具——Absolute HTML Compressor 和 PageSpeed1.6:

HTML 优化工具目前比较理想的是 Absolute HTML Compressor ,另外, PageSpeed1.6 中也引入了 HTML 压缩功能,不过目前只有四个简单的策略,尚处于实验性阶段。

随着 Web 前端性能受到越来越多的关注,包括 HTML 优化在内的各个领域将得到进一步的发展,并不断提高 Web 的用户体验,InfoQ 将继续关注和报道相关进展,感兴趣的读者可以查看富互联网(RIA)专题

2010-05-13 22:144944
用户头像

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

关注

评论

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

flutter系列之:flutter中常用的container layout详解

程序那些事

flutter 程序那些事 6月月更

向线程池提交任务

急需上岸的小谢

6月月更

直播预告|FeatureStore Meetup V3 重磅来袭!

星策开源社区

机器学习 开源 DevOps 特征平台 MLOps

预解析与作用域

Jason199

js 全局作用域 作用域 6月月更

『Three.js』辅助坐标轴

德育处主任

canvas three.js 6月月更

LabVIEW控制Arduino实现超声波测距(进阶篇—5)

不脱发的程序猿

单片机 LabVIEW Arduino VISA 超声波测距

leetcode 257. Binary Tree Paths 二叉树的所有路径(简单)

okokabcd

LeetCode 搜索 数据结构与算法

统一认证中心 Oauth2 高可用坑

Damon

微服务架构 安全架构 6月月更

volatile的解构

卢卡多多

volatile 6月月更

ConcurrentHashMap 源码分析-put方法

zarmnosaj

6月月更

JavaScript闭包

大熊G

JavaScript 前端 6月月更

动态规划之0-1背包问题(详解+分析+原码)

未见花闻

6月月更

LabVIEW控制Arduino实现红外测距(进阶篇—6)

不脱发的程序猿

单片机 LabVIEW VISA Arduino Uno 红外测距

【Python技能树共建】lxml 模块

梦想橡皮擦

Python 6月月更

云原生时代微服务架构设计实践

Damon

6月月更

BaseDexClassLoader那些事

北洋

6月月更

C#入门系列(十二) -- 字符串

陈言必行

C# 6月月更

思科私有动态路由协议:EIGRP

wljslmz

动态路由 6月月更 路由协议 EIGRP

在M1上体验三星T7移动硬盘的性能

IT蜗壳-Tango

IT蜗壳教学 6月月更

SAP HANA 错误消息 SYS_XSA authentication failed SQLSTATE - 28000

Jerry Wang

数据库 SAP hana 6月月更 数据库权限

vue自定义指令

小恺

6月月更

【愚公系列】2022年06月 面向对象设计原则(六)-合成复用原则

愚公搬代码

6月月更

消息队列存储消息数据的 MySQL表

Dean.Zhang

使用 select 切换协程

宇宙之一粟

golang 6月月更

设计消息队列存储消息数据的 MySQL 表格

小虾米

「架构实战营」

数据库每日一题---第9天:销售员

知心宝贝

数据库 算法 前端 后端 6月月更

LabVIEW Arduino电子称重系统(项目篇—1)

不脱发的程序猿

单片机 LabVIEW VISA ​Arduino Uno 电子称重系统

消息队列入门MQ

卢卡多多

MQ 消息队列 6月月更

一文读懂Logstash原理

恒山其若陋兮

6月月更

RF中使用reuqests的两种方式

红毛丹

Python 6月月更

模块八-设计消息队列存储消息数据的 MySQL 表格

凯博无线

不应忽视的HTML优化_Java_崔康_InfoQ精选文章