Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

使用JavaScript来避免冗余数据

  页面的原始源中经常都会存在很多重复的东西,这些重复的东西是有规律可循的,可以通过简短的程序来处理,避免从服务器加载这些大量重复的内容。而且这些简短的处理对程序的维护成本影响并不大,在存在大量重复内容的页面上可以试着使用。
  比如有这样的超链接列表
<nav>
  <a href="JavaScript:">a</a>
  <a href="JavaScript:">b</a>
  <a href="JavaScript:">c</a>
  <a href="JavaScript:">d</a>
  ······
</nav>
  这些超链接都是由程序处理的,但需要加href属性以确保超链接的行为正常。但是这么写显然是冗余的,公共部分可以使用程序来添加。
<nav>
  <a>a</a>
  <a>b</a>
  <a>c</a>
  <a>d</a>
  ······
</nav>
<script>
(function(){
  var nav=document.getElementsByTagName("nav")[0];
  var i=0,s=nav.children,o;
  while(o=s[i++])o.setAttribute("href","JavaScript:");
})();
</script>
  虽然程序也是挺大一段,但如果需要处理的标签量大的话还是很划算的。或者如果使用了jQuery的话程序只需要一句 $("nav a").attr("href","JavaScript:");   除了A标签的href属性,还有很多标签的属性也可以这么做。比如同样是A标签的 target="_blank" 如果一堆超链接都需要新选项卡打开,我们就可以从程序上解决,而不是为每个A标签添加同样的属性。还一些很常用的标签属性如,*:title、IMG:alt,等。它们都可以通过程序从其它地方复制过去。以文章列表为例,文章标题文字可能被 text-overflow:ellipsis 省略,所以需要title来让鼠标悬停时看到完整的文章标题。而直接从服务器输出文章标题就需要传输多余的数据,所以我们可以通过程序来复制这些属性。
  也许有人会问,GZIP不是可以把这些重复数据压缩掉吗?GZIP确实可以压缩,但LZ77算法的实现是在每一个重复位置都放置标识符,对于单个重复的内容不多,但是数量很大的东西GZIP的压缩率并不高。而且HTTP上的数据未必是一次性传输给客户端的,GZIP的窗口压缩模式未必能一次性就处理完所有数据。所以在原始源中避免一些力所能及的数据是有效的。
  也许有人会考虑另一个极端,数据归数据,模板归模板,模板复用数据,数据复用模板。这个思想很好,而且是可以实现的,这么一来就不存在数据传输冗余的问题了,目前的很多模板框架都是基于这样的思想。但这个思想的实施需要考虑的就是前端模板框架SEO的问题了。
  随着现在互联网的发展,大网站越来越大,小网站越来越少,也许以后SEO真会变得不再重要。所以前端模板式编程很可能是未来的主流,而目前如果无法使用前端模板框架的话,以上的这些优化方式也是可以带来一定效果的。
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^