当前位置: 首页 > 编程日记 > 正文

表格对决CSS--一场生死之战

表格对决CSS--一场生死之战
作者:阿捷 2004-7-19 21:00:54
  • 原文作者:Sergio Villarreal
  • 作者简介:墨西哥网页设计师,1993年接触网络,个人主页为Overcaffeinated.net
  • 原文出处:sitepoint.com
  • 原文发表时间:2004年5月27日

前言

我第一次在internet上冲浪用的还是哑终端。不久以后,明尼苏达州的一种单色的显示器居然可以通过服务器播放电影"巨蟒和圣杯"。当时没有鼠标,没有良好的操作界面,更不用说24位彩色了。Gopher是唯一可用的工具。搜索则只能用Archie和Veronica。没有人听说过W3( World Wide Web),当时网络看起来已经足够用了。

译者注:
  • 1.哑终端。很像PC,但没有它自己的CPU、内存和硬盘。通过共同的主机来处理事务。
  • 2.Gopher。一个客户/服务器(client/server) 应用程序,它通过执行FTP传输,远程登录(remote login), Archie 查找等,把所有信息以菜单形式显示给最终用户(end-user),使用户能浏览大量信息。这样用户访问 Internet资源时可以不需要知道(或输入)其地址。
  • 3.Archie是第一个自动索引互联网上匿名FTP网站文件的程序,但它还不是真正的搜索引擎。
  • 4.Veronica是一种Gopher型的资源,你可用它在Gopher空间里检索包含指定的特殊单词的所有菜单项。

又过了一段时间,奇怪的代码开始充斥我的搜索结果,我虽然还能够阅读需要的内容,但这些代码却令人讨厌。同事告诉我那是HT ML,一种internet图形化语言,我曾经学习了一些方法试图滤掉HTML。再后来,出现了256色的显示器和Mosaic浏览器的第一个版本,一切都开始变得不同了。

从那时到现在已经很长时间了,技术上已经发生了难以置信的提高,web界面也被无数次地彻底改革、重新思考和重新改造。从我开始成为网页设计师工作,我亲自历经了表格为基础的设计、JavaScript的悲哀、CSS的努力发展以及更重要、更普遍接受的web标准各个发展时期。

一开始,internet只是按照Geek(技术狂热分子)想法创建出来的,internet上只有纯粹的内容,他们没有考虑到背景颜色和漂亮的图片。但事实上,人们都喜欢在冲浪的时候看到更丰富的表现形式。表格(table)设计方法的出现解决了这个困难,我们可以通过表格来控制布局!我们纷纷开始"欺骗"系统,不能做出1 pixel的细线?只要在表格的行中插入一个透明的GIF小点,再设置一个背景色就可以实现了!不能控制字体?那就使用另一个标签<font>!

在我接触CSS和web标准之前,我已经用表格方法设计好多年了。web标准的设计方法完全与以前不同,它是有效率的,它是迷人的。我深深地、热烈的喜欢上新的设计方法。它可以用有意义的代码将内容从布局中分离出来,却依然保持空格和美丽的设计,我一下就"喜新厌旧"了,不再采用老的设计方法。

直到今天。

关于web标准和CSS目前已经有了很多的讨论,就象每一个好的关键词,它将成为web技术发展史上下一个"大人物"。它开始于Dougl as Bowman重新设计连线网站(Wired.com),并不断发展。2003年,Zeldman写的《Designing with Web Standards》一书出版,让我们都看见了曙光,全世界各地的设计师都为新的设计方法而拥抱欢呼。它是结构化的,它是有语义的,它是快速的和轻量级的。

然而,依然有一部分人们再采用传统的表格设计方法,甚至还在用<font>标签,他们说传统方法更容易,更方便维护和快速开发。到底谁是正确的?

我决定亲自做一个实验来看看事情是如何变化的,我们到底选择哪种方法更好。

挑战

我用图象软件设计了一个假想的网站。然后先用HTML4.01制作它,用表格,不用任何CSS;作为对比,再用XHTML1.0 Transitional 制作它,代码符合易用性和可访问性规范,并采用CSS,尽量避免表格(除非表格是用来表现表格化数据。)

制作过程分三阶段,并详细记录过程,进行正反两面的比较,看看我们得到了什么?失去了什么?我们应该站在哪一边。

第一阶段:设计站点

我开始设计虚构的站点。我假设为一个叫"Butterfly Watchers Association(蝴蝶观察协会)"的组织制作网站。呵呵,这也许是我最好的客户了,不会参与到设计流程中来。我尽量把它制作的真实一点,假想网站的目标用户,采用传统的布局和比较权威的字体。

我希望站点是结构紧凑的、有效的、简明扼要的。而且,我想页面上应该有蝴蝶,我到处寻找合适的蝴蝶图片,不久就在stock.xchng找到了图片。蓝色的蝴蝶停在绿叶中,非常符合站点的形象。经过一些处理、修饰,这张图就成为我们页面的header。

在设计过程中,我坚持一些易用性原则。例如尽量使图片文件尺寸最小。一开始我准备在导航上采用Garamond字体,后来考虑到用户的机器上可能没有这种字体,我决定采用Georgia字体(这种字体类似 Times New Roman,最差情况下可以用 Times New Roman字体替代)。但在header图片上,我还是采用了Georgia,因为它是图片。

文本使用灰色背景,使用Trebuchet MS字体;新闻采用Verdana字体,这种字体缩小时看起来也很好。有一种不成文的规则,就是在一个设计中采用4种字体,我并不怎么同意这种观点。

对于蝴蝶和那些观察它们的人们我知之甚少,我放了一篇观察稀有蝴蝶的文章在首页重要位置,我想这是用户比较感兴趣的内容。作为组织,应该有很多会员,所以我还放了一些会员信息。同时新闻也是必不可少的,我也加了上去。然后,还加了版权,一些象素装饰图,一个标语口号(They flutter. We watch them.)。整个页面的布局是一个页头(header)紧接着是一行导航菜单,然后是2列内容,最后一行footer。我将"About"菜单设置为高亮,以显示onmouserover的效果,整个页面看起来就象这样:

原始设计图

好了,现在可以开始代码了。

第二阶段:"用以前的做法,使用透明的GIF图片来控制间距."

如果你已经是一位参加过多个项目的网页设计师,下面的结构是你再熟悉不过的:

<table bgcolor="#ffffff" cellspacing="0" cellpadding="0" border="0" align="center" width="200"> <tr> <td colspan="3" bgcolor="#545454"><img src="blank.gif" width="1" height="1" alt=""></td> </tr> <tr> <td bgcolor="#545454"><img src="blank.gif" width="1" height="1" alt=""></td> <td width="100%" align="center">Content goes here.</td> <td bgcolor="#545454"><img src="blank.gif" width="1" height="1" alt=""></td> </tr> <tr> <td colspan="3" bgcolor="#545454"><img src="blank.gif" width="1" height="1" alt=""></td> </tr> </table>

用表格说话,我们已经习惯于用它了,因为它是我们最基本的"积木块"。例如:用透明的GIF图片来控制间距、用表格的各种属性来控制位置。有人这么解释:表格是可靠的,用表格布局的页面可以向前兼容!没有css敢与表格对抗,表格可以适合所有浏览器等等。

让我们开始一步一步再现整个设计过程。

第1小时

噢。好象时光倒流,不用CSS我们用什么来定义背景颜色?哦,对...是bgcolor,谢谢提示。好,开始制作表格,预览效果。我定义了"align=center",这样就可以在所有浏览器中居中,太好了,这多么简单!表格看上去好象并不坏,我有与老友重逢的感觉。我熟练地使用透明的GIF图片来控制间距,工作飞速前进!恩?在header和菜单之间怎么会出现空白呢?哦,原来在images代码后面多了一个空格,IE浏览器会把它显示出来。这改起来简单,删除空格就好了。

第2小时

我使用javaScript制作导航菜单的翻转效果:

<td ... onMouseOver="chBg(this);" onMouseOut="chBg2(this);" >...</td>

JavaScript这样写:

function chBg(obj) { obj.bgColor = "#E1E5DB"; } function chBg2(obj) { obj.bgColor = "#CBD1C3"; }

除了我对老设计方法有点忘记以外,整个进度还是相当快的。虽然,我尽量减少表格的嵌套,但代码看上去还是有些复杂,所以我加了一些注释上去,以方便找到我们需要修改的地方。

遇到了一个小问题:不用css就无法消除链接的下划线。也许有解决办法,让我们用google来搜索一下。

第3小时

google搜索后还是没有找到办法,如何才能制作没有下划线的链接?一定有一个解决办法!

第4小时

可恶!因为不能消除下划线,我不能继续制作图片菜单。不过这个实验的规则是我自己制定的,我可以破例违反一下。我用一点点 css来解决,只要放一句style="text-decoration: none;"在链接的地方就可以了,yay!解决了菜单下划线的问题。

好了,我们接下来可以制作主要的2列。正文中的蝴蝶图片我用了2个表格来实现细边框效果,就象这样:

用表格实现细边框

让我们来看看前4个小时的成果在IE6以外浏览器上的效果。噢!在Firefox中非常丑陋,在Opera和Netscape中看起来还不错。

第5小时

继续代码...,调试和修改。

工作中,我认识到<font>标签控制字体尺寸的局限性,我不能定义多种尺寸。真是该死!

News部分的文字排版也遇到了问题,为了缩进,我不得不用更多的表格嵌套来实现效果。为了使正文中的蝴蝶图片排列在文字的右面,我也不得不增加表格来解决。这种“欺骗”式的排版让我感到很无奈。

第6小时

设计结束了,看上去和最初的设计差不多,你可以点击这里看看

其中包含了多少表格,点击这里查看

第三阶段:我们不需要表格!

下面我们将看看什么是基于web标准的、用CSS布局的设计。我将从内容的标识开始。我将尽量使标识有语义,避免多余的标签。

页头是一个图片,但它也是一个标题,所以我这样写代码:

<h1>Butterfly Watchers Association. They flutter. We watch them.</h1>

我将稍后再考虑如何正确显示这个标题(理想情况下,我们尽可能多的关心内容,尽可能少的关心布局)。其他标题(news,Sightin gs and Membership)将被标识为<h2>。

菜单从根本上讲就是一个无序列表(list),所以将被标识为list。段落不需要分类(我们采用继承选择器来把它们"挂"在包含的层中)。我将对比原始的内容文本,看为了实现布局需要增加多少额外的标签(我将尽力避免增加标签)。

这就是原始的内容文本。看看原代码,它符合xhtml1.0 transitional规范。注意所有的元素都已经被包含在定义了名称的<div>中。新闻中的日期也被加上了date的类(class)。你可以看到代码非常简单。

第1小时

定义"container" 层的border为1px。通过在body样式中定义"text-align: center"将内容居中。为了在所有浏览器中都居中,还在"container"中定义了margin: 0 auto;(意思就是top=0, right=auto, bottom=0, left=auto)。居中的处理方法和表格一样容易。

定义"body"的padding"top"和"bottom"数值为20px(不直接在"container"中定义padding是为了适合所有浏览器)。

无序列表(li)必须定义为"display:inline",这样菜单会被显示在一行内。我在菜单间增加了导航图标。这些导航图标是用不重复背景方法定义的,可以精确定义(x,y)位置,类似这样:

background: url(menuBullet2.gif) no-repeat 4px 9px;

菜单的点击颜色变化效果采用链接的hover样式,不再需要JavaScript。

我设置页头的蝴蝶图片为<h1>的背景,这样可以不用担心易用性,在不能显示图片的设备中(如屏幕阅读机和搜索机器人)也可以正常阅读标题。

第2小时

菜单的第一项(HOME)使用一个不同的图标,我不得不隐藏原来的背景,为HOME菜单增加一个额外的id(frst):

#hMenu ul li#frst

再另外一个(CONTACT)图标:

background: transparent url(menuBullet3.gif) no-repeat 615px 9px;

我无法用CSS控制2列有一样的高度,幸运的是,我可以用背景图片来变通实现。我定义了"container"纵向重复背景。

background: #fff url(bgMain.gif) repeat-y; 背景图片

第3小时

CSS定义盒比表格方便多了,特别是边框的许多属性非常有用。

现在我开始定义<h2>标题。图标的定义和上面的方法一样。

我将"news"层浮动(float)在"sightings" 和 "membership"的右面。 定义"copyright"层" clear: both;",这样它可以跟在浮动层的下面。将正文中的蝴蝶图片浮动在右面,文字可以自动环绕在图片周围。定义图片的1px border和设置padding距离就可以实现原来2个表格嵌套的效果。

又发现一些问题:版权层与内容层有部分重叠。

第4小时

显示的错误与"sightings" and "membership"的float:right; 定义有关。将它们浮动在左面就可以解决这个问题,这看上去很奇怪。我用firefox进行第一次测试,恩,看上去还不坏,只是菜单的图标有几pixel的移位。

有一些CSS技巧可以修正在非IE浏览器的显示效果,例如给不同浏览器不同的属性值。

我同一元素定义中使用了!important 值,相同的定义写在前面可以优先执行,这个值不被IE浏览器支持。

background: url(menuBullet2.gif) no-repeat 4px 6px !important;
background: url(menuBullet2.gif) no-repeat 4px 9px;

在CSS中,如果同一元素有多个定义,最后一个是有效的。但是因为IE不支持!important,所以IE将使用第二个定义值,而其他浏览器将采用第一个定义值。

全部完成,看这里的结果

结论

基于表格的设计

我用各种能找到的浏览器来测试页面,包括linux、windows和Macintosh平台的浏览器。表格布局的页面在不同浏览器中看上去都一样。"它象岩石一样坚固",这是给表格布局的第一评价。

然而,当需要修改页面部分内容时,表格布局改起来相当费力。这是一个问题,如果我们使用CMS(内容管理系统),内容需要被格式化就比较麻烦。

整个设计时间有点长,是因为我已经有点遗忘了老方法,如果重新再来一次,我想可能会节省1-2个小时。

我形容基于表格的设计是大量"老土的(grunt work)"工作,虽然我经常吃惊于那些高级设计技巧。使用基于纯CSS的设计,我通常习惯于分解设计和逐步分析bug。而用表格设计则不需要这些工作,你只要不断往设计里面扔table就可以了。让我们再来看看CSS的过程。

基于CSS的设计

用CSS设计的感觉好多了。代码的改变直接而透明,我能清楚得控制整个过程,反观表格的设计就象在垒砖头。页面的改变越大,越感到CSS设计的方便和效率。

CSS设计对节省带宽也非常有意义,将所有样式提取出来放在单独的文件中,整个站点用一个或几个样式表文件,可以使整个站点尺寸更小。

将布局信息从内容中分离出来,也有许多的好处。在将来,我可以随时改版整个站点而不需要修改任何内容,就象CSS Zen Garden 。同时也增加了易用性,搜索机器人将更加方便发现你的页面(记住:google是你最重要的访客来源)。

在制作完毕,我同样在不同平台不同浏览器上进行测试。IE5.5和IE6.0表现完美。IE5.0上出现了错误,菜单和一些缩进失效,错位的页头效果看下面图片:

Ie5.0上的错误

好无疑问这个bug可以被修复,但是考虑到这篇文章的主题范围,我不展开讲了。如果这是一个真实的客户项目,我肯定不能牺牲I E5.0的用户。在更老一点的浏览器中,CSS的设计表现得一团糟。

IE4

在IE4中的错误情况

Netscape 4.7x

在Netscape4.7中的错误情况

如果对不支持CSS的浏览器做一些代码处理(例如对Netscape用@import)看上去会好一些。

尽管当你熟悉基于CSS的设计后工作效率非常高,但是之前你必须花费大量的时间学习规则、盒模型的不同、浏览器的处理技巧以及许多的理论,并需要不断的实践来掌握。简而言之,CSS比tables更简单,但如果你想使用纯CSS设计,请准备投资大量的时间学习。即使你是一位经验老到的开发高手,也要准备好应对各种bug,有时候处理一个bug会花费几个小时。

胜者

CSS和基于web标准的设计胜出。只要看看两种方法的代码就足以做出选择了。CSS提供了更多的好处(主要在易用性方面)。其实根本的原因是我的懒惰。如果用表格设计,客户一年后联系我说需要改版,我可能会告诉他我参军了,正在国外某个乡村。如果我使用的是CSS,我将毫不思索地为客户改版,因为我不需要全部推翻重来。

感谢

谢谢Ava McBride,使用Browsercam 帮助测试我的设计。

相关文章:

使用Docker-Docker for Web Developers(2)

1. 使用镜像 1.1 在Docker Hub上查找镜像 我们查找一下之前博客里面&#xff0c;推送到Docker Hub里面的bage88/docker-demo&#xff0c;能看到有2个仓库&#xff0c;第一个就是我们上次上传的镜像。点击“Details”进入到详细页面。 1.2 拉取镜像到本地机器 在我们本地虚拟机上…

赠书 | 图像分类问题建模方案探索实践

作者 | 中国农业银行 陆春晖责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国*文末有赠书福利背景图像分类&#xff0c;是计算机视觉领域的一个核心问题&#xff0c;顾名思义就是输入一张图像&#xff0c;根据内容将其划分到某一个特定的类别。与其他分类问题相比&a…

数据库开发个人总结(ADO.NET小结)

一&#xff0e;用SqlConnection连接SQL Server 1..加入命名空间using System.Data.SqlClient;2.连接数据库SqlConnection myConnection new SqlConnection();myConnection.ConnectionString "user idsa;passwordsinofindb;initial catalogtest;data source127.0.0.1;Con…

PHP 调用C的代码

用php调用C函数&#xff0c;常通过调用系统命令函数的方式来实现&#xff0c;其中主要有system()和exec()两种&#xff0c;还有一种是passthru(),这种方法没有尝试&#xff0c;暂不作讨论。 system()方法输出并返回最后一行的shell结果。 exec()不输出结果&#xff0c;返回最后…

态势“知”多少,点开就知道

2019独角兽企业重金招聘Python工程师标准>>> 态势感知&#xff0c;最核心的是“知” 关于“知” 典故不少 《孙子兵法》六千多字&#xff0c;“知”出现了79次&#xff0c;只有《势篇》与《行军篇》中没有“知”字。 史称两个半完人之一的王阳明 在经过五溺三变的曲…

17 种正则表达式

作者&#xff1a;http://blog.csdn.net/hivak47/archive/2004/10/31/161006.aspx"^/d$" //非负整数&#xff08;正整数 0&#xff09; "^[0-9]*[1-9][0-9]*$" //正整数 "^((-/d)|(0))$" //非正整数&#xff08;负整数 0&#xff09…

程序员如何乘风破浪?从数据库历史看技术人发展 | CSDN 高校俱乐部

2009 年我国数据库软件市场规模为 35.03 亿元&#xff0c;2017 年我国数据库软件市场规模增长至 120.00 亿元。8年时间内&#xff0c;我国数据库软件市场始终保持平稳增长&#xff0c;年均复合增长率为 17.5%&#xff0c;且增速呈现递增趋势。根据中研产业研究院估计&#xff0…

陶哲轩实分析 定理 13.3.5 :紧致度量空间上的连续函数一致连续

设 $(X,d_X)$ 和 $(Y,d_Y)$ 都是度量空间,假定 $(X,d_X)$ 是紧致的,如果 $f:X\to Y$ 是函数,那么 $f$ 是连续的当且仅当 $f$ 是一致连续的.证明:当 $f$ 是一致连续时,$f$ 显然是连续的.我们主要证明 $f$ 连续时一致连续.我们采用反证法,假若 $f$ 不是一致收敛的,意味着无论如何…

SQLServer------插入数据时出现IDENTITY_INSERT错误

详细错误信息&#xff1a; 当 IDENTITY_INSERT 设置为 OFF 时&#xff0c;不能为表 Student 中的标识列插入显式值。 原因&#xff1a; 表中存在某个字段是自动增长的标识符 解决方法&#xff1a; set IDENTITY_INSERT Student ON //设置为OFF时表示不能手动给拥有标识符的列插…

ASP.NET 制作让搜索引擎可以友好访问的链接

作者&#xff1a;http://www.donews.net/lealting/archive/2004/03/31/9759.aspx今天看了一篇文章&#xff0c;主要是讲&#xff0c;如何制作让搜索引擎可以友好访问的链接&#xff0c;大概的内容是这样的&#xff1a;很多的时候我们在进行查询的时候&#xff0c;总是会以这样的…

机器学习中的7种数据偏见

作者 | Hengtee Lim翻译 | Katie&#xff0c;责编 | 晋兆雨出品 | AI科技大本营头图 | 付费下载于视觉中国机器学习中的数据偏差是一种错误&#xff0c;其中数据集的某些元素比其他元素具有更大的权重和或表示。有偏见的数据集不能准确地表示模型的用例&#xff0c;从而导致结果…

windows7 下arp 绑定的实现

局域网的arp***常常让人头痛&#xff0c;绑定IP/MAC地址是解决方式之一&#xff1b; 在xp下面绑定mac地址很简单&#xff0c;只需“arp -s IP地址 MAC地址 ”就ok&#xff0c; 在win7下的命令有所不同&#xff1b; 首先&#xff0c;需要查看可用网卡的id&#xff0c;使用命令n…

Asp.net(c#)实现多线程断点续传

http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html以前一直错误的认为在ASP.NET中无法通过编程方式实现多线程断点续传&#xff0c;今天终于获得了这样一个解决方案&#xff0c;让我明白要学习的东西还很多。此解决方案基于其它解决方案及相关资料&#xff0c;根…

0.7秒完成动漫线稿上色,爱奇艺发布AI上色引擎

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;中国漫画的需求量在不断增加&#xff0c;而动漫制作成本一直居高不下。究其原因为动漫制作是一个复杂且耗时的过程&#xff0c;需要大量工作人员在不同阶段进行协作。动漫制作过程中&#xff0c;需先创作关键帧草图&am…

Java Web整合开发读书笔记

下载JDK&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 下载Eclipse: http://www.eclipse.org/downloads/ 下载Tomcat: http://tomcat.apache.org/download-70.cgi 正则表达式&#xff1a;http://www.cnblogs.com/deerchao…

ListView中CheckBox使用问题

因为CheckBox的点击事件优先级比ListView的高&#xff0c;所以当ListView中使用CheckBox会导致ListView的setOnItemClickListener失去响应。 解决的方法&#xff1a;在CheckBox中加入android:focusable"false"。使得CheckBox初始的时候没有获取焦点。 假设想在单击C…

网页播放的视频代码

网页播放的视频代码 第一种是通过调用window media player进行播放诸如&#xff1a;wmv,asf等格式文件: <object alignmiddle classOBJECT classidCLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95 height320 idMediaPlayer width356> <param name"ShowStatusBar…

[Ruby] 模块

1. 命名空间模块定义了一个命名空间&#xff0c;方法和常量可以在其中任意使用而不必担心被其他方法或常量干扰&#xff0c;例如&#xff1a;module Testdef Test.method()end end模块常量的命名和类常量一样&#xff0c;都以大写字母开头&#xff0c;方法定义类似于类方法的定…

10个工程师,9个不合格!

如果你想问最近这些年什么编程语言最值得学习&#xff0c;我会毫不犹豫的告诉你是Python。无论是刚入门的程序员&#xff0c;还是年薪BATJ的技术大牛&#xff0c;都无可否认现在Python对于一个程序员职业发展的重要性。所以不仅是开发小白&#xff0c;甚至很多开发老手&#xf…

云计算(2)it 是什么

2015年&#xff0c;全世界在it上面的花费达到3亿8千亿美金之多。 云数据中心&#xff1a;核心基础架构&#xff0c;云计算的物理载体&#xff0c;提供数据处理、存储和高性能计算支撑&#xff0c;包括服务器、存储、冷却、机房空间和能耗管理等。 超大规模的云数据中心&#xf…

大批量生成假数据,faker.js获得近28k个Star

整理 | 夕颜图源 | 视觉中国来源 | CSDN&#xff08;ID:CSDNnews&#xff09;近日&#xff0c;GitHub上一个生成假数据的项目faker.js火了&#xff0c;攀升Trendinging榜单第二&#xff0c;标星目前已超过27.1k。只需要简单几步操作&#xff0c;就可以在浏览器和node.js中生成大…

C++代理类,句柄(智能指针)_C++沉思录笔记

代理类 首先定义三个类: class Animal{ public:virtual void getName()0;virtual void clone()0; };class Cat:public Animal{ public:void getName(){cout<<"this is Cat"<<endl;}Animal* clone(){return new Cat;} };class Dog:public Animal{ public:…

浅析C语言的一个关键字——register

1、register修饰符暗示编译程序相应的变量将被频繁地使用&#xff0c;如果可能的话&#xff0c;应将其保存在CPU的寄存器中&#xff0c;以加快其存储速度。例如下面的内存块拷贝代码&#xff0c; /* Procedure for the assignment of structures, */ /* if the C compiler doe…

《Haskell趣学指南》—— 第1章,第1.2节小朋友的第一个函数

本节书摘来自异步社区《Haskell趣学指南》一书中的第1章&#xff0c;第1.2节小朋友的第一个函数&#xff0c;作者 【斯洛文尼亚】Miran Lipovaca&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 1.2 小朋友的第一个函数函数的声明与它的调用形式大体相同&…

ASP.NET中利用DataGrid的自定义分页功能和存储过程结合实现高效分页

关键字&#xff1a;DataGrid、存储过程、分页出自&#xff1a; http://blog.csdn.net/yzx110/archive/2004/08/18/78525.aspx摘要&#xff1a;在最进的一个项目中因为一个管理页面要管理的数据量非常大,所以必须分页显示,并且不能用DataGrid的内置分页功能,于是自己实现分页. 下…

看清头秃元凶,腾讯AI首度揭示真相

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;11月17日&#xff0c;腾讯公布了一项人工智能助力药物发现的新进展。通过腾讯自研的提升蛋白质结构预测精度的新方法&#xff0c;联合研究团队首次解析了II型5a还原酶&#xff08;SRD5A2&#xff09;的三维结构&#x…

UNIX--stat、fstat和lstat函数

2019独角兽企业重金招聘Python工程师标准>>> stat、fstat和lstat函数(UNIX) #include #include int stat(const char *restrict pathname, struct stat *restrict buf); 供给文件姓名&#xff0c;获取文件对应特点。感受通常是文件没有翻开的时分这样操作。 int fst…

UVA 1482 - Playing With Stones(SG打表规律)

UVA 1482 - Playing With Stones 题目链接 题意&#xff1a;给定n堆石头&#xff0c;每次选一堆取至少一个。不超过一半的石子&#xff0c;最后不能取的输&#xff0c;问是否先手必胜 思路&#xff1a;数值非常大。无法直接递推sg函数。打出前30项的sg函数找规律 代码&#xff…

Google和网易有道合作开课了

11月16日&#xff0c;2020年Google开发者大会正式开幕。受疫情影响&#xff0c;本次大会首次以线上形式举办&#xff0c;这也是Google首次以全线上形式与中国开发者相聚。本届大会主题聚焦“代码不止”&#xff0c;其中“学习”成为本次大会重要板块之一。在该主题下&#xff0…

Node.js v0.10版本发布

Node.js研发团队发布了node.js v0.10版本&#xff0c;它是个基于Javascript、用于构建高性能异步服务器的平台。该版本主要更新如下&#xff1a;更易于使用的数据流处理模块&#xff0c;通过域更好地处理错误&#xff0c;此外还带来了性能方面的提升。该团队还宣布在v0.10之后、…