Sunday, January 11, 2009

网页中的汉字反锯齿和其他字体应用探索

由于IE的失职,导致网页开发者们都在研究如何使用字体让网页更好看、修改最方便、SEO效果最好。

老外想了两种法子,我都尝试了一下,也跟大家说说我尝试中的所得。

一种方案是纯客户端的解决方案,采用sIFR实现,主要用了Flash、js、css实现,对于英语站点来说,这绝对是一个不错的解决方案。
技术上是这样的,通过swf文件嵌入特殊的字体,然后通过js将div中的文字读出,作为FlashVars参数传给Flash,这样Flash就出现了特殊字体的文字,然后通过css将原有的文字隐藏掉,再通过js把Flash显示到该位置。
英文字体才几k,真的很好,26个字母,一些标点符号,就可以形成一个常用字体库了,相比之下,中文汉字真的是博大精深,一个黑体字库就需要9M,即使仅选择了1级简体汉字,也还有3M左右。
于是乎,我做了这么一个调整:让浏览器在背后下载这个包含黑体的3M多的Flash,当下载完成以后便回调js,告知js开始替换,并通过Cookie记录这个flash已经下载来了,以后进入的时候就直接使用缓存中的这个字体Flash。
展示一个案例:
http://www.liubros.com/sites/wanran/index.html
第一次进入的时候导航条使用的是宋体14px加粗,而背后便开始下载3M的字体文件,一旦下载完成,以后浏览时便使用Flash显示的黑体来替换。
但要浏览者下载3M的字体文件真的是有点难为人了……所以这种方案最终认为不太可实际使用。

另一种方案是服务器端生成图片的解决方案,采用DTR实现,主要是使用php生成特定文字、特定字体的图片,并替换div中原有的文字。这样对于浏览者而言,字体文件不用下载,每次只需要下载特定的图片即可。值得一提的是,他通过ob_start控制了服务器发送的内容,先经过php的替换处理后再发送给客户端,这个技术我以前没见过,倒是觉得蛮新鲜。
但生成图片很消耗服务器资源,跟phpThumb一样,而且有可能因为服务器内存限制导致生成失败。
DTR有些限制,它的存在仅限于替换headings,也就是标题,所以它只对h1 - h4生效。

如果在汉字上实际使用的话,我想可能还是DTR的可能性要大一些,毕竟服务器忙一些还可以通过增加服务器来解决,但让客户下载字体Flash确实有点不太可能。

话说回来,这两种方案都考虑了SEO,因为内容是直接写在div中的,如果浏览器不支持js或者是爬虫过来看,也能看到所有的文字内容。

其实要解决这个问题的根本之道还在于IE提升对字体的支持,我想如果IE能够开放字体插件接口,那我想大家都会愿意花一些时间来下载黑体字库的,没有黑体,这个事情真的很困难。

我只能低声下气的说,M$大爷,求你早点把IE的中文字体给完善一下吧,哪怕另外插一个包也行啊。

Tags: 技术 , 设计 , js , php , html , css , 工具

No comments: