欢 迎 访 问 卢 昌 海 个 人 主 页

除了自己的无知,
我什么都不懂。

-苏格拉底

 
信 息
 
 
 
All English Contents
作品列表 | 电子图书
站长简介 | 常见问题
版权说明 | 电子邮箱
 
统 计
 
 
 
自 2008-02-01 以来
本文点击数
13,792
自 2008-02-01 以来
本站点击数
33,580,486
昨日点击数 5,942
今日点击数 1,013

站长在 Bluesky 新开了微博帐号
▷▷▷ 敬请关注 ◁◁◁

主页改版说明 (兼论互联网标准)

- 卢昌海 -

我的主页自 2002 年改版至今已有五年半的时间。 虽说设计第三版 (这里保留了 version 3.0 首页的最后形象) 时作过一些诸如格式与内容分离之类的努力, 试图让该版 “千秋万载” (但绝无 “一统江湖” 的野心)。 但实际上, 设计上仍存在着诸多的缺陷。

这其中, 缺陷之一就是采用了 frame 结构——也即 frameset。 这是前三个版本的共同缺陷, 相差者只是具体结构: version 1.0 采用的是 “左—中—右” 结构, version 2.0 是 “左—右上—右下” 结构, 而 version 3.0 则是 “左—右” 结构。 Frameset 的问题很多, 最主要的有这样两个:

  1. 无法让读者 bookmark 内部页面 (bookmark 下来的只是首页)。
  2. 读者通过搜索引擎提供的链接进入本站时, 将直接进入 frame 结构中的内容部分 (对 version 3.0 来说即右侧 frame), 从而会失去目录部分 (因目录部分在其他 frame), 不易进一步浏览。

虽说上述问题不足以难倒有经验的读者, 但对无经验的大多数, 它们足以带来可观的负面影响。 除这两个问题外, frameset 还存在其它一些问题。 有鉴于此, 互联网的两大主流标准——HTML 和 XHTML——均已将之排除在了未来版本之外 (无奈之下, W3C 只能为 “爹不疼妈不爱” 的 frameset 制定了单独标准, 叫做 XFrames)。

前三个版本的另一个共同缺陷, 是它们都由纯粹的 HTML 页面所组成 (后来所建的繁星客栈是唯一例外)。 当初之所以作那样的选择, 首先是因为那时我对 HTML/JavaScript 以外的其它 Web 编程技术并不熟悉; 其次则是由于对 PHP 等技术缺乏信心, 担心网络服务商对它们的支持度不高, 担心它们的标准不稳定, 同时也担心由它们写成的网页不易被搜索引擎所收录。 当然, 归根到底还是因为不熟悉。 但这些年看下来, 上述顾虑早已不复存在。 相反, PHP 等技术所具有的优势却变得越来越明显。 因此我久已有改版的想法, 只是由于经过这些年的积累, 网站上的文章数量已达几百, 改版的工作量太大, 才一拖再拖。 但文章数量就像熵一样, 是恒增加的, 此事越拖难度只会越大。 因此自 2008 年 1 月 21 日开始, 我决定启动改版。

此次改版的主要改动在程序结构, 界面设计方面则延续了 version 3.0 的简约风格——甚至做得比 version 3.0 更彻底, 不再采用任何图片 (包括那个让不少网友抱怨伤眼睛的背景星云)。 当然, 这是指网站结构方面的图片, 文章里的插图不在其列, 那些插图不仅大都会被保留, 且还可能新增, 或将当年因网站空间局促而被迫缩小的某些图片换成大图。

在 version 3.0 的设计中, 我首次对互联网标准给予了一定关注[注一]。 Version 3.0 的网页大都是经过 validation 的——多数是 XHTML 1.1, 少数为 HTML 4.01, 另有极少数 XHTML 1.0 (当然, 个别遗漏或许也是有的)。 Version 3.0 的文字编码则是 UTF-8。 此次改版在文字编码上并无改动——因为 UTF-8 在我看来仍是中英文混合网站的最佳编码。

不过在 markup language 的标准上, 此次改版却作了新的选择。

互联网的 markup language 标准早先一直是 HTML 的天下, 但 HTML 自八年多前 (即 1999 年) HTML 4.01 成为 W3C 的推荐 (Recommendation) 以来, 便未再出台新的推荐。 另一方面, 2000 年初, 一个既与 HTML 保持很大兼容性, 又符合 XML 要求的新标准——XHTML 1.0——成为了 W3C 的推荐。 从理论上讲, 像 XHTML 那样兼具 HTML 及 XML 两家之长的的新标准, 无疑具有很大的优越性。 因此 XHTML 问世之后, 很多人以为这就是 HTML 标准的未来走向。 受此鼓舞, XHTML 工作组 (Working Group) 再接再厉, 在短短一年多的时间里就推出了 XHTML 1.1。 而后又于 2006 年推出了 XHTML 2.0 的草稿。

XHTML 的这些气势如虹的推进, 几乎是一场没有竞争对手的独脚戏。 但可惜的是, 仿佛应了许茹芸那首动人歌曲的歌词, 这场独脚戏虽然 “对白总是自言自语”, “对手都是回忆”, 却也 “看不出什么结局”。 之所以如此, 是因为 XHTML 虽一度没有对手, 同时却也没有强有力的 “后台”。 尤其是 XHTML 2.0, 迄今没有任何浏览器开发者表示过支持。 因此, XHTML 的发展虽有良好的理论动机, 也具备优越的设计理念, 却面临一个非常实际的困难。 这困难在 XHTML 1.1 的设计中就露出了端倪。 XHTML 1.1 在陈述其与 XHTML 1.0 的差异时明确写道: “XHTML 1.1 represents a departure from both HTML 4 and XHTML 1.0”。 问题就出在了这 departure 上。 沿这条 departure 之路, XHTML 变得越来越学究, 离互联网的 “人间烟火” 越来越远, 变得优美而不实用。 这一点在 XHTML 1.1 中还只是初步显现, 因为 XHTML 1.1 与 XHTML 1.0 的实际差别很小 (这是本站能在 version 3.0 中大量采用 XHTML 1.1 的原因)。

但严格讲, 即便是 XHTML 1.1, 假如完全按 W3C 的建议来用, 也足以对网站造成重大障碍。 这是因为, XHTML 1.1 文件的类型 (media type) 原则上应定义为 application/xhtml+xml, 而非互联网上普遍使用的 text/html (当然, W3C 并未对此作强制规定, 按照其在说明文件 XHTML Media Types 中的说法是: XHTML 1.1 的类型 should not 设置为 text/html)。 那么这两种类型究竟有什么差别呢? 它们的差别就在于: 类型为 text/html 的文件是由浏览器的 parser 来处理的, 而浏览器的 parser 素以宽松著称。 这种宽松虽然 “娇惯” 出了千奇百怪的 HTML 错误 (即便像 Google、 微软、 Yahoo 那样著名的网站, 它们的 HTML 也是错误百出, 完全通不过 validation 的), 但同时也造就了互联网上最牢不可破的既成事实。 任何浏览器如果不支持那些错误, 网民就会很生气, 后果就会很严重。 因此, 一代代的浏览器为了支持尽可能多的 “错误”, 不得不无限期地延续传统; 而一批批的网站编程人员则放心大胆地延续错误, 甚至将某些错误当成特殊技巧、 乃至独门绝活来用。

另一方面, 文件类型如果被设置为 application/xhtml+xml, 则是向浏览器发出一个信号, 表示这一文件可以交由 XML parser 来处理。 这样一来, 立刻就会出现两个非常严重的问题: 一个是 XML parser 与浏览器的 parser 截然不同, 它对错误的忍耐是有限的——且这限度是零。 XML parser 一遇到错误就会终止, 而用户在浏览器上看到的就只有 error report。 对于网页来说, 这就是死刑。 另一个严重问题则是, 目前用户数最多的浏览器——微软的 IE——并不支持文件类型为 application/xhtml+xml 的网页, 虽然这一点未必不会改变, 但就目前而言, 它足以让类型为 application/xhtml+xml 的网页被边缘化。 有鉴于此, 目前互联网上几乎所有的 XHTML 文件都被设置成了 text/html 类型 (本站的 version 3.0 也是如此), 以便能得到 “从宽对待”。 而这只在 XHTML 1.0 下才是完全 “合法” 的 (W3C 在说明文件 XHTML Media Types 中的说法是: XHTML 1.0 的类型 may 设置为 text/html)。

如果说 XHTML 1.1 的 departure 还只是初露端倪, 那么到了 XHTML 2.0, departure 的势头就变得相当迅猛, 甚至连目前网站设计中广泛使用的 <img /> 之类的 tag 也被摒弃了。 XHTML 2.0 与 PHP 等技术的配合也颇成问题 (主要根源也在于 media type)。 因此, 尽管在 XHTML 的 roadmap 上, XHTML 2.0 将在几个月之后的 2008 年 9 月成为推荐, 但目前我还看不到它被网站编程人员广泛而严格使用的前景。

时间跨入了 2008 年, 在互联网标准之中又杀入了一匹 “黑马”: 2008 年 1 月 22 日, W3C 公布了 HTML 5.0 的早期草稿。 当然, 把 HTML 5.0 称为 “黑马” 是不太合适的 (因此要加引号), 因为 HTML 系列一直是主流标准, 毛色其实是很白的。 只不过自 1999 年以来, 很多人已习惯将多年不变的 4.01 视为其最后版本。

HTML 5.0 作为 HTML 家族的最新成员, 很好地继承了以前各版 HTML 的传统, 以互联网的现状为核心考虑, 在此基础上, 一方面对 HTML 的缺陷进行适度弥补, 另一方面则对浏览器处理 “错误” 的方式进行适度规范。 这些都是与 XHTML 截然不同, 却让 web 编程人员感到欣慰的考虑。 更重要的是, 与 XHTML 没有强有力的 “后台” 完全不同, HTML 5.0 的出台直接受到了除微软之外所有主要浏览器开发者的支持, 而微软虽尚未公开支持, 但 HTML 5.0 的工作组核心成员中却有来自微软的成员, 支持恐怕只是时间问题。 按照 HTML 5.0 的 roadmap, 它将在 2010 年 9 月成为推荐。 虽然在时间上会比 XHTML 2.0 晚两年, 但 HTML 5.0 被浏览器支持的前景很可能要比 XHTML 2.0 更好[补注一]

经过了这些冗长介绍, 现在回到本站的改版上来。

对于本站 markup language 的标准选择来说, HTML 5.0 还有一个重要特点, 那就是它包含了一个类似于 XHTML 1.0 的, 与 HTML 具有一定兼容性的 XHTML 标准: XHTML 5.0。 这个名字容易让人迷糊, 以为它是比 XHTML 2.0 更后续——从而更远离 “人间烟火”——的版本。 但实际上, 它跟 XHTML 系列完全是同床异梦。 考虑到所有这些发展, 尽管现在预言互联网标准花落谁家也许还为时过早, 但有一个标准已经显出了它在当前网站开发中的重要性或便利性来, 那就是 XHTML 1.0。 因为这是一个——并且是唯一一个——处于 HTML 与 XHTML 分界点上的标准, 与两者都有一定的融合度: XHTML 从这里开始 departure, HTML 则维持了一个类似于它的版本。 由于这一特点, 无论互联网的标准走向何方, 以 XHTML 1.0 为标准的网站都会有较好的适用性。 因此在我看来, 这是目前在 markup language 方面的最佳选择。 有鉴于此, 在本站的新版中, 我选择了 XHTML 1.0 作为标准。

最后再聊聊改版的其他事宜。 如前所述, 此次改版的重点不在界面设计 (虽然这方面也有所变动), 而在程序结构。 具体地说, 新版主页不再使用 frameset, 编程语言则改为了 PHP。 新版主页在功能上的增加目前主要有两项: 一项是在网页左侧显示本页及全站 (但不包括繁星档案馆) 的点击次数 (“点击次数” 这一术语直译的话, 对应于网站统计中的 hits, 但本站统计的其实是网页的浏览次数, 即所谓 pageviews[注二])。 另一项则是用 “随机文选” 替代原先首页上的 “昔日热点”, 这是以随机选取的作品取代固定的文章。 今后, 我还将编写类似博客所具有的读者留言功能——为诸如此类的功能扩展提供框架支持, 也正是此次改版的动机之一。

在未来几个月内, 除撰新作外, 我将大致依时间顺序, 对多数旧作进行改版 (少数将被删除), 并逐一发布。 这一过程中, 多数旧作将会在 “最近更新” 中 “露面” 一到两天。 在改版的同时, 我也将对部分文章进行内容修订——但多为纠正错别字一类的细微改动, 若有大的变更, 则将通过序言、 补注或附录等方式进行。 此外, 某些主题相近的旧作将会被合并, 某些篇幅较长的文章则会被分解。

注释

  1. 需要说明的是, “互联网标准” 是一个很大的概念, 本文所述的只是其中有关 markup language 的部分。
  2. Pageview 与 hit 的区别在于, 前者是以网页作为统计单元, 后者则是以网络服务器 (web server) 向用户提供的文件作为统计单元。 举例来说, 如果一个网页带有 10 张图片, 则用户点击该网页所产生的 pageview 为 1 (因为用户浏览了 1 个网页), hit 则为 11 (因为在这一过程中, 网络服务器向用户提供了 1 个网页文件外加 10 个图片文件——总计 11 个文件)。

补注

  1. “HTML 5.0 被浏览器支持的前景很可能要比 XHTML 2.0 更好” 的推测基本得到了证实。 近日, W3C 已在网站上宣布 XHTML 2.0 工作组将在 2009 年底停止运作, 对 HTML 5.0 的资源投入则将增加。 另一方面, 最新版本的 Firefox 已经开始提供对 HTML 5.0 的部分支持。 这一切都说明 HTML 5.0 已后来居上。 [2009-07-04]

相关链接

站长近期发表的作品

本文的讨论期限已过, 如果您仍想讨论本文,
请在每个月前七天的 “读者周” 期间前来讨论。

>> 查阅目前尚在讨论期限内的文章 <<