用pre控件一是为了让字体等宽避免宽度的微小变化,二是可以方便的填空格进去调整宽度而不用填
打开关闭状态可以通过读取元素的c属性,当然也可以直接用标记相应属性的全局变量来代替,免去了再读取元素属性的麻烦:
6月11号
(wwdc2010会场)
(cnn的技术vp在演讲的时候喜欢放很多震撼画面)
(车票)
嗯,在这里要再三强调一下,本人接受过一段时间的自卫术训练,包括如何在这样的情形下与身材比自己大一圈的对手搏斗,我们都是有过若干预案的,比如偷袭(第一预案,当时不具备这个条件);寻找手持武器自卫(第二预案,除了被抢去的ipad,手里只剩一个单反相机了,作为摄影协会老会员,这个预案也必须否决);装疯(扑上去大喊大叫乱打一气,逮到机会就抱紧对手狠咬一口,从气势上吓懵对手————考虑到自己门牙打过补丁,咬人这招不到万不得已不用)。围观群众切勿效仿。
(ipad确实是现在最好玩的成人玩具)
(ipad成这样了)
(对面的美国人民打成一片)
(案件编号)
(救护车内照片)
(病房内偷拍)
(医院给病人套一个腕带,把我的名字拼错了。把写在名字前面的visa的issue place当成first name了)
(处方)
(医嘱)
(胸透x光片)
医生好心要把一份文档打印成中文的给我看,:((
(复诊提示)
(医院只开方不卖药,但是对处方中的药物却提供了通俗易懂的说明。)
(医院只开方不卖药,但是对处方中的药物却提供了通俗易懂的说明。)
(回酒店第一时间发微博。这是旧金山时间11日晚上。)
(微博截屏)
(微薄截屏)
12号
(ipad尸体)
(换机协议)
(网友普遍认为这个apple guy很帅)
(第二封邮件)
(乔帮主的回邮)
13号
(苹果公司的陈梓桥和夏鹏)
14号
早上把美国拍片的结果发给马医生看,马医生初步认为8、9肋骨轻微骨折,无错位。7肋骨可疑。
下午重新排了片,刘主任分析结果,骨头问题不大,主要是软组织拉上,开了些中药,建议静养几天。
第一个cache-read耗时0.2秒多,第二个(并行发起)0.3秒多,第三个0.4秒多,接下去每个图片的耗时差不多都比上一个慢0.1秒以上。结论很明显了,并发的cache-read会相互堵塞,非常严重的相互堵塞。
以上抓包是在ie6下完成的。在ie7和ie8下面情况要好一些,但是问题性质是相同的。
很多我们曾经以为cache的非常好速度应该非常快的web应用,也许其实存在着严重的cache-read速度瓶颈而不为我们所知。
网上没有搜到太多关于cache-read时间的文章,看来真是个盲点。
凯发天生赢家一触即发官网的解决方案和网络延迟是类似的,减少cache-read请求,把多个小文件和小图片合并成大文件和大图片(而不要一厢情愿的以为小文件被浏览器缓存后会有很好的速度表现),区分优先级引用资源。还有一个可能有用的:交错的发起不可避免的异步动态网络请求和cache-read请求,让网络延迟和cache-read延迟时间叠加在一起,来节省用户实际要等待的时间。
文章作者说“跑到微软那一查,给的答复让我吐血:do not enable http compression for the script files 请不要对脚本文件开启http压缩 只好在服务器端增加对浏览器的识别代码,如果是ie6,就不压缩脚本文件了 虽然脚本能运行了,可是用户体验就... 哎,我恨ie 6”
唉,说啥好呢?
真相是,微软的答复() 里面提供了两个凯发天生赢家一触即发官网的解决方案,其中第一个描述的稍微啰嗦了一点,被这个作者直接忽略掉了。第二个凯发天生赢家一触即发官网的解决方案只有一句话,显然更容易被读懂:
if you use a cache-control: no-cache http header to prevent the files from caching, remove that header. in some situations, if you substitute an expires http header, you do not trigger the problem.
-or-
do not enable http compression for the script files.
emu虽然英文比较烂,四级老考不过,为了方便大家还是翻译一下吧,不然又该有人读不下去了。
1.如果你使用了cache-control: no-cache 这个 http 头来防止文件被缓存,移除这个头就好了。有些情况下,如果你用一个expires头来代替(前面这个出问题的http头),(也可以起到相同作用而)不会触发这个问题。
或者
2.不要压缩脚本文件。作者: keekim heng, google web developer
在我们开发互联网富应用(ria)时,我们经常写一些javascript脚本来修改或者增加页面元素,这些工作最终是dom——或者说文档对象模型——来完成的,而我们的实现方式会影响到应用的响应速度。
dom操作会导致浏览器重解析(reflow),这是浏览器的一个决定页面元素如何展现的计算过程。直接修改dom,修改元素的css样式,修改浏览器的窗口大小,都会触发重解析。读取元素的布局属性比如offsetheithe或者offsetwidth也会触发重解析。重解析需要花费计算时间,因此重解析触发的越少,应用就会越快。
dom操作通常要不就是修改已经存在的页面上的元素,要不就是创建新的页面元素。下面的4种优化方案覆盖了修改和创建dom节点两种方式,帮助你减少触发浏览器重解析的次数。
方案一:通过css类名切换来修改dom
这个方案让我们可以一次性修改一个元素和它的子元素的多个样式属性而只触发一次重解析。
需求:
(emu注:原文作者写到这里的时候脑子显然短路了一下,把后面的out-of-the-flow dom manipulation模式要解决的问题给摆到这里来了,不过从示范代码中很容易明白作者真正想描述的问题,因此emu就不照翻原文了)
我们现在需要写一个函数来修改一个超链接的几个样式规则。要实现很简单,把这几个规则对应的属性逐一改了就好了。但是带来的问题是,每修改一个样式属性,都会导致一次页面的重解析。
凯发天生赢家一触即发官网的解决方案
要解决这个问题,我们可以先创建一个样式名,并且把要修改的样式规则都放到这个类名上,然后我们给超链接添加上这个新类名,就可以实现添加几个样式规则而只触发一次重解析了。这个模式还有个好处是也实现了表现和逻辑相分离。
(emu注:作者在这里再次脑子短路,把documentfragment dom generation模式的介绍提前到这里来了,emu只好再次发挥一下)
上一个方案解决的是修改一个超链接的问题,当一次需要对很多个超链接进行相同修改的时候,这个方案就可以大显身手了。
需求
需求是这样的,我们要写一个函数来修改一个指定元素的子元素中所有的超链接的样式名(classname)属性。要实现很简单,我们可以通过遍历每个超链接并且修改它们的样式名来完成任务。但是带来的问题就是,每修改一个超链接都会导致一次重解析。
凯发天生赢家一触即发官网的解决方案
要解决这个问题,我们可以把被修改的指定元素从dom里面移除,再修改所有的超链接,然后在把这个元素插入回到它原来的位置上。为了完成这个复杂的操作,我们可以先写一个可重用的函数,它不但移除了这个dom节点,还返回了一个把元素插回到原来的位置的函数。
方案三:一次性的dom元素生成
这个方案让我们创建一个元素的过程只触发一次重解析。在创建完元素以后,先进行所有需要的修改,最后才把它插入到dom里面去就可以了
需求
需求是这样的,实现一个函数,往一个指定的父元素上插入一个超链接元素。这个函数要同时可以设置这个超链接的显示文字和样式类。我们可以这样做:创建元素,插入到dom里面,然后设置相应的属性。这就要触发3次重解析。
凯发天生赢家一触即发官网的解决方案
很简单,我们只要把插入元素这个操作放到最后做,就可以只进行一次重解析了。
不过,要是我们想要插入很多个超链接到一个元素里面的话,那么这个做法还是有问题:每插入一个超链接还是要触发一次重解析。下一个方案可以解决这个问题。
方案四:通过文档片段对象(documentfragment)创建一组元素
这个方案允许我们创建并插入很多个元素而只触发一次重解析。要实现这点需要用到所谓的文档片段对象(documentfragment)。我们先在dom之外创建一个文档片段对象(这样它也就不需要解析和渲染),然后我们在文档片段对象中创建很多个元素,最后我们把这个文档片段对象中所有的元素一次性放到dom里面去,只触发一次重解析。
需求
我们要写一个函数,往一个指定的元素上面增加10个超链接。如果我们简单的直接插入10个超链接到元素上面,就会触发10次重解析。
凯发天生赢家一触即发官网的解决方案
要解决这个问题,我们要先创建一个文档片段对象,然后把每个新创建的超链接都插入到它里面去。当我们把文档片段对象用appendchild命令插入到指定的节点时,这个文档片段对象的所有子节点就一起被插入到指定的元素里面,而且只需要触发一次重解析。
functions invoked by settimeout are passed an extra "lateness" argument in mozilla, i.e., the lateness of the timeout in milliseconds.
使用谷歌浏览器(chrome)的时候,有的时候脚本程序会捕获到“uncaught typeerror: object #
这个错误应该是由于最新版的谷歌浏览器没有自带完整的google gears组件导致的。看起来最新版的chrome浏览器会在用户第一次使用gears组件的时候自动下载和安装该组件,而在安装成功以前我们虽然可以成功创建 application/x-googlegears 对象,却无法调用它的create方法创建任何有用的东西。
这个时候其实没有太多的事情可以做,基本上我们我们只能检测这个对象的create接口是否存在,发现不存在的时候提示用户耐心等待,过一段时间后再刷新,或者下回再来看看,希望它已经自己安装好了。