问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

为什么看到人肉的血肉模糊会恶心,而看到生猪肉牛肉不

发布网友 发布时间:2022-05-13 07:13

我来回答

2个回答

懂视网 时间:2022-05-13 11:35

CSS选择器的执行效率已经改变了(增强)

像Dave Hyatt的Writing Efficient CSS这样优秀的文章已经帮助开发者们掌握了基本的选择器匹配优化原理. 我们从Steve Souders等大牛那里学到, 选择器是从右到左进行匹配的. 有的选择器匹配方式比较复杂所以应尽量避免使用. 比如说,后代选择器的匹配速度就比较慢,尤其是最右侧的选择器匹配了页面中大量元素的时候. 这些知识在早些年是很有用的. 但随着时间的发展, 感谢Antti Koivisto的努力, 很多选择器的效率问题我们已经无须过于担心了.

Antti致力于Webkit内核的改进工作. 他最近对CSS选择器的匹配机制进行了重要优化. 这些工作已经完成. 他表示:"我认为网页开发者已经无须对选择器进行优化了,那是浏览器引擎开发工程师的工作."

听起来很棒. 我喜欢以对文档结构更有意义的方式来使用选择器,选择器匹配效率优化这方面交给浏览器渲染引擎就好. 那么Antti到底对渲染引擎作了哪些优化呢? 事实上他对webkit渲染引擎的选择器匹配机制进行了多方面的优化. 我们来看看其中最主要的4项:

  1. 样式共享(Style Sharing)
  2. 规则散列(Rule Hashes)
  3. 祖先过滤器(Ancestor Filters)
  4. 快速路径(Fast Path)

    样式共享

样式共享使得浏览器允许样式列表中的元素与之前的相同元素重复相同的样式而不是重复计算渲染.

例如:

foo


bar


如果浏览器内核已经计算好第一个

标签的样式,它就无须再次计算第二个

标签的样式. 这个简单但智慧的改进减少了浏览器的大量工作.

规则散列(Rule Hashes)

现在,我们都知道选择器是从右到左进行匹配的,所以最右侧的选择器十分重要. 规则散列将样式表以最右选择器为基准进行分组,例如下面的样式表将会被分成3组:
a {}
div p {}
div p.legal {}
#sidebar a {}
#sidebar p {}
|a|p|p.legal|
|-|-|-|
|a {}|div p {}|div p.legal {}|
|-|-|-|
|#sidebar a {}|#sidebar p {}|

当浏览器运用规则散列时,它无须分别解析整个样式表中的单个选择器,而是对范围小得多的可能存在匹配的分组进行解析. 规则散列也是个小巧简单却能大幅减少对单个HTML元素进行解析的改进.

祖先过滤器(Ancestor Filters)

祖先过滤器有一点复杂,它会对选择器匹配的可能性进行计算. 因此,当涉及的元素不需要与祖先相匹配时.祖先过滤器可以迅速排除相关规则. 于是,它检测后代选择器和子选择器并且基于class,ID,tag进行匹配.在以前,后代选择器是需要被特别在意的,它需要在各个祖先节点中循环以进行匹配,而布隆过滤器可以拯救这个问题.

布隆过滤器是测试特定选择器是否在某一集合中的数据结构. 看起来和选择器匹配很相似不是吗? 布隆过滤器会检测一条CSS规则是不是匹配当前正在测试的元素的CSS规则的子集. 关于布隆过滤器很棒的一点是,正误识是有可能的,负误识不是. 就是说,如果布隆过滤器指出某选择器没有匹配当前元素,浏览器会停止查询并前进至下一个选择器. 这样可以节省大量时间. 另一方面, 布隆过滤器指出当前当前选择器是匹配的, 浏览器会执行常规匹配策略直至100%确定匹配为止. 复杂的样式表会导致更多的正误识,所以建议为你的样式表保持合理的长度.

祖先过滤器加快了后代选择器和子选择器的匹配速度,它也可以用来将其他较慢的选择器划分为很小的子树,然后浏览器只有很少的几率需要处理那些低效率的选择器.

快速路径(Fast Path)

快速路径使用非递归、完全内联的循环重新实现了更多通用匹配逻辑. 它被用来匹配包含以下任意一种组合的选择器:
1.后代选择器,子选择器,向下派生选择器
2.标签选择器,id选择器,class选择器和属性构成的选择器

快速路径提升了大量关系选择器的性能. 事实上,选择器的总体效能被提升了25%,其中后代选择器和子选择的效能被提升了2倍,另外它也被用于querySelectorAll()方法的样式匹配上.

如果这么多选择器效能都被提升了,有哪些仍然是比较缓慢的呢?

哪些仍然比较慢?

Antti说,直接和间接的后代关系选择器仍然速度缓慢. 不管怎样,祖先过滤器和规则散列可以降低它们的影响因为它们很少被匹配. 他也提到Webkit还有很大空间来提升伪类和伪元素的解析效率. 但不论如何他们的解析速度比Javascript操作DOM快得多. 事实上,尽管仍有提升空间,他说:

"从样式匹配的角度说,适度使用一切选择器会表现得刚刚好."

我喜欢听他这么说. 总之如果我们把样式表控制在正常大小,并且合理使用各种选择器,就无须强迫自己迎合过去的选择器优化标准. 感谢Antti.

想知道更多? 点击Paul Irish’s presentation on CSS performance.

原作者Nicole Sullivan

热心网友 时间:2022-05-13 08:43

这是一种生理反应。猪肉司空见惯了,我们自然就习惯了。若是人肉的话,人们脑中情不自禁会脑补到人类被杀时候的血腥场景,自然就感到恶心了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
草青青,青青草,草上接谢珍珠宝,怕日晒怕风摇,摇看珍珠得起早 谜底是... 一加9R要不要升级ColorOS 13正式版 一加9pro怎么coloros12一加9pro升级coloros12的方法 coloros12支持哪些一加机型?coloros12支持一加机型介绍 一加9pro如何coloros12?一加9pro升级coloros12的方法 一加9pro升级coloros12拍照改善吗 我是一个高中生,职教的,我们班上有5个女生,我喜欢有一个,但追她又有... 自动挡d挡旁边的 -是什么意思? 自动挡位上的加减是什么意思? 宣传这个职位是干什么的 车载空气净化器的用途 17年7月19日11点4分出生 的宝宝取什么名字好? 苹果版QQ发送压缩文件显示不存在什么原因 我的QQ为什么不能发送压缩好的文件?有懂的吗? 我孩子2017年农历6月初6出生的男孩取什么名字好呢 2o17年3月8日10时52分出生的小孩起名 打印图纸的时候打印机显示“添加正确纸张,添加LTR纸”,什么意思 佳能打印机提示coad correct paper cassette:ltr是什么意思 打印时显示“检查打印机模式”是怎么回事? 鱿鱼怎么煨制烤出来好吃 在“还原为数据库”中填上你希望恢复的数据库名字。,怎么填啊 有一部电影一个女的偷看男人在撒尿那个男的在用尿浇老鼠是什么电影啊 一个娘们在楼道里撒子蹲着撒尿我房门有眼能看到她的大白*她真是不要脸啊? - 信息提示 有一个短片 一个老头和一个小伙子在悬崖边撒尿 那个小伙子把尿射出去把瀑布都切断了的 有部日本还是韩国的电影 站在山坡上比撒尿 的 一个尿到了 火星 求名字或网站 一群小男孩在厕所撒尿,小女孩在门口看,这是什么电视剧? 有一部电影女主角相亲时在桌子上撒尿是什么电影 我想去宝马4s店定一辆车 大概交多少定金合适 因为我暂时没那么多钱 快手卸载后草稿箱怎么恢复 CAD识图,有图纸,请大家看一下 如何识别CAD图纸中重点 相邻三颗牙掉了,种植牙需种几颗 连续缺失三颗牙,中间一颗不能种植,两边的牙可以种植后搭桥吗 连续缺失3颗牙,烤瓷能固定稳吗? 连续三个牙齿缺失该怎样镶牙啊 牙齿缺失后做种植牙还是连坐三颗搭桥烤瓷牙?不用考虑经济状况,只求好的方案对牙 缺失一颗牙,三颗牙,整口无牙怎么种植 小米渠道服换绑后会找回嘛 种植牙和真牙之间好搭桥吗 北京全口牙齿缺失能做种植牙吗? 牙齿缺失什么修复方法好 我哥的门牙被别人打掉三颗,我们要求安种植牙,他们不愿意。要求我们安一般的牙,该怎么办, 牙齿缺失了是不是都可以进行种植牙啊??? 我缺了好几颗牙,怎么办? 牙齿缺失,做种植牙好还是镶牙好呢?镶牙的话需要磨掉两边的邻牙搭桥吗? 关于小米账号能否找回的问题? 深圳注册公司注册资金最低是多少?最高又是多少? 在深圳注册公司至少需要多少注册资金? 深圳注册公司资金要多少钱