客户端模板的应用(2)
作者:Sheneyan 来源:蓝色经典 发布时间:2007-05-11 16:50:00
模板这个概念我想大家都很熟悉了吧,就好像dw里的模板、php里的模板、word里的模板……这里就不多解释了。我们来说说我们用模板的目的。
一般来说,我们应用模板的原因都不外乎这两点:我不想老是做重复的劳动(如dw和word的模板),我想把表现和数据分开,因为我是程序员,我不懂界面的事或者我希望能够很方便地修改(如php的模板或jsp的taglib)。而我现在要说的,就是要做第二点:分离表现和数据,让html做它该做的事情,而其它的,交给模板来做吧。
呵呵,其实这两个理由是有相当一部分重复的,因为避免做重复的劳动,实际上就是将需要重复做的事情抽取出来做成模板,而对于网站、对于程序来说,这块重复的工作就是表现!而我一开始考虑客户端模板的原因也是因为我不想做三个页面,而这三个页面的修改频率也许会非常高
那模板应该用在哪里呢?到处都用吗?错!客户端模板的技术其实现在应该算相当成熟了,我在不少地方都看见过类似的实现,而目前最有名的就是q-zone了,你在q-zone的某处查看源代码,你会发现一大堆类似[%或<%或{%的标记,有时候会觉得自己是不是眼花,居然在客户端看见asp的代码?下面就是q-zone的典型代码:
<li><a href="javascript:checkGoCmtPriv('[%=@albumid%]','[%=@lloccode%]')" title="[%=@content%] 由 [%=@nick[('__VAR__').unHtmlReplace()]%] 于[%=@datetime%]发表 " class="mode_photo_a">[%=@content[procContent('__VAR__')]%]</a><img class="author-display" style="cursor:hand" onclick="DelRecentCmt('[%=@albumid%]', '[%=@lloccode%]', '[%=@cmt_id%]')" src="http://imgcache.qq.com/qzone/client/photo/images/icon_del.gif" alt="删除该最新评论" /></li>
我为什么反对到处使用客户端模板呢?理由有二:
我希望能够对搜索引擎友好!就现状来说,搜索引擎并不认识利用js加载的数据,而如果你希望客户能够从搜索引擎中看到你的网站,那你就得对搜索引擎好一点,投其所好,多给它一点它喜欢的内容。呵呵,不信的话,去baidu或google搜索内容吧,比如搜索周杰伦,你会不会对这样的结果觉得吃惊呢??
baidu:http://www.baidu.com/s?wd=%D6%DC ... one.qq.com&cl=3
google:http://www.google.cn/search?comp ... ne.qq.com&meta=js的性能问题要求我们必须尽可能地将它用在刀刃上。你可以反驳说你的js很牛,你可以构架出完善的js体系,对客户端的要求很低,等等诸如此类的理由。但我可以肯定地说,大部分人在实现中大项目的js体系时,并没法将js的性能要求摆在第一块,因为大系统的需求纷繁复杂,能够把客户的需求全部实现就要偷笑了,谁能保证性能一定特别好?了不起我把内存泄露的问题尽量解决就算很对得起客户了~呵呵,别摇头,至少这是我现在工作的现状。
合理地使用一项技术,无论它多么时髦,多么酷,被多少专家目为不二选择,适合你才最重要!
我的想法是将客户端模板技术应用于那些使用ajax(或类似技术)来动态增改页面内容的地方,因为使用了ajax的技术的目的首要就是提高用户的体验,而不是搜索引擎的友好,比如留言的动态加载,比如评价的异步写入,比如rss内容的自动抓取(如果你告诉我你整个站都应用了ajax,你的整个站完全不需要刷新,你认为你给用户非常好的体验,请容许我bs你,谢谢)。对于这种需求,我们就可以放心大胆地使用客户端模板技术而不用担心我上面提及的两个理由(当然,性能还是得注意,别太大意了)。


猜你喜欢
- 今天用python实现了一下简单的聚类分析,顺便熟悉了numpy数组操作和绘图的一些技巧,在这里做个记录。from pylab import
- 什么是协程协程是python种一种实现多任务的方式,他是一种比线程更加小的单元,占用更小的执行单元(资源),为啥说他是一个执行单元,因为他自
- 在python中,用于数组拼接的主要来自numpy包,当然pandas包也可以完成。而,numpy中可以使用append和concatena
- Win7安装mysql的具体过程,我的版本是5.5.21 以下是我的安装步骤:1、首先单击MySQL5.5.21的安装文件,出现该数据库的安
- 使用到的函数是curl_init, curl_setopt, curl_exec,curl_close。默认是GET方法,可以选择是否使用H
- 描述:输入一个大于0的整数n,输出1到n的全排列:例如:n=3,输出[[3, 2, 1], [2, 3, 1], [2, 1, 3], [3
- FastText是一个三层的神经网络,输入层、隐含层和输出层。FastText的优点:使用浅层的神经网络实现了word2vec以及文本分类功
- 前言Yolov5比较Yolov4,Yolov3等其他识别框架,速度快,代码结构简单,识别效率高,对硬件要求比较低。这篇博客针对Python+
- 1、由于 Python 列表的切片会在内存中创建新对象,因此需要注意的另一个重要函数是itertools.islice。2、通常需要遍历切片
- 关于Markdown在刚才的导语里提到,Markdown 是一种用来写作的轻量级「标记语言」,它用简洁的语法代替排版,而不像一般我们用的字处
- 进制转换进制之间的转换主要是利用十进制完成的。在进制转换的过程中,可以首先将相关进制转换为十进制的,再进行二次转换达到想要的效果。当然在进制
- 字体设计是人类商业活动的需求,它随着时代和科学技术的进步而不断地变化着。被广泛应用于网络生活的各个方面。现代字体设计在计算机技术的应用中已经
- 图片优化1、图片大小优化,部分图片使用WebP(需要考虑webp兼容性)在线生成,如智图、又拍云gulp生成,gulp-webp或gulp-
- 1. 安装clickClick 是 Flask 的开发团队 Pallets 的另一款开源项目,它是用于快速创建命令行的第三方模块。官网文档地
- MySQL超长字符截断又名"SQL-Column-Truncation",是安全研究者Stefan Esser在2008
- 如何在双python下设置python3为默认在C:\Program下举例第一步安装好python2和python3后设置好环境变量第二步去
- 如下所示:import http.client, urllib.parseimport http.client, urllib.parsei
- 由于js的代码逻辑越来越重,一个js文件可能会有上千行,十分不利于开发与维护。最近正在把逻辑很重的js拆分成模块,在一顿纠结是使用requi
- 本文以实例形式介绍了python turtle模块即海龟绘图的使用方法,对于需要进行图形编程的朋友相信会有一定的借鉴价值。python tu
- 前言针对于一维数组的存储方式,即(n,)存储为列向量一、创建一个array使用np.arange()创建一个一维数组,或者np.array(