- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
CSS Selectors Level 4引入了快速剖面和完整剖面的概念。
一个“普通的css解析器”not suppose that id
is unique(!),也就是说,解析器算法假设文档具有具有具有重复(非唯一)值的属性id
的元素因此,在“普通的CSS解析器”中,像#myID {...}
这样的CSS行的解析具有与解析.myClass {...}
相同的算法将来,随着css4标准和快速配置文件的采用,render engine将在“更快地解析快速配置文件文档”或“解析完整的配置文件文档”之间进行选择。
这是一个简单的问题。。。
当假设文档具有唯一的id时,快速配置文件的css解析算法解析“好文档”会更快吗?
... 如果你需要更多的上下文
当我用dom实现css解析时,答案是肯定的,因为当解析“好文档”(不是重复id的丑陋文档)时,我可以使用computational performance方法,这样更快(!)…但这个问题不是关于dom解决方案,而是关于流行/严肃的渲染引擎(如blink、geckoor或webkit)中使用的算法。
... 总结使用唯一id(使用非唯一id时丢失的id)可能进行的优化:
在第一个元素出现id
值时停止(并将其缓存在散列中)。(和带有“hasid”的标志元素)
使用简单的getElementById()将id值转换为元素指针(缓存在哈希中)。
使用getElementById()
这样的(更快)方法来解析#myID {...}
这样的CSS行。
…
当涉及id时,lookup table关系伪类的快速解析,如:has()
所以,也许,我们可以将:has(#myId)
添加到快速配置文件定义中!
…它们只是我的“个人假设”,对于现实生活中的渲染引擎来说可能是不正确的,即使在渲染好的(不难看的)文档时也是如此。
最佳答案
这里有很多,我不知道从哪里开始我想tl;dr只是简单的几点:
事情并不像你想象的那样运作,但这是相当复杂的,我正在考虑写一篇关于它的文章。
您误解了快速/完整配置文件的意图/原因。我想这些名字可能对我没有帮助,我最近为了避免这种特殊的困惑,我做了很多工作——但是理解/真正理解它的重要性仍然需要理解1。
因此,事实上,您所建议的更改将降低性能,而不是提高性能,并且最终不会改变:has()
的实际问题。
试图用尽可能少的词来说明:css,也就是说,应用样式的部分是针对动态树的,包括它仍然在下载和解析html的时候。很难简单地说明(如果我能完成的话,我会在我的文章中尝试)但是一个非常简单的方法的纯粹数学爆炸式的像suggested we change them,这是绝对必要的-至少如果你真的想以我们一贯的方式查看页面-我们保留了智能观察固有的某些方面在现有的CSS约束条件下。实际上,所有这些观察结果都与规则如何与动态树相关,以及如何通过消除必须检查的元素数量和必须根据突变类型检查的规则数量(在解析期间创建元素也被认为是突变)已经发生了。然而,当您编写javascript时,您只需要对树(或树的一部分)评估一个规则一次作为快照,这实际上是一个完全不同的问题,对于如何优化它有不同的答案。简单的回答是:你不需要优化它(实际上,你不可能优化得太多——成本通常大于收益),它实际上非常简单快速因此,像QuerySelector或Find这样的东西有一个策略(树行走),而动态或“实时”CSS有另一个策略(同样,它很复杂,我将尝试在其他地方解释它,并在可能的情况下链接起来)。
考虑到所有这些,对于querySelector来说,:has()
这样的计算实际上很简单,但是如何在实时应用/动态树中实现这一点却完全未知我们想,只是没人能想出如何让它不烂。因此,我们目前拥有的是“个人资料”。像JavaScript,甚至print这样的东西都可以支持完整的/静态的配置文件,但是目前,浏览器(就您可以在样式表中编写并动态应用的内容而言)只能支持快速/动态的配置文件正如您所说,建议浏览器不要选择是解析一个概要文件还是解析另一个概要文件,而是选择一种模式(可以在样式表中编写的内容)来支持一个子集,而选择另一种模式(可以在javascript中的树快照上计算一次的内容)来支持整个wax球。
尽管如此,我确实认为我们可以找出如何在一个合理的树上获得足够的性能增益,在一个具有合理数量的规则和一些围绕部分呈现的新期望(可能是显示模式)的树上,这不会很糟糕我个人认为,如果你能做到这一点,而不伤害任何现有的网页,这就够了。各方意见不一,到目前为止,由于担心最坏的情况需要几分钟才能画出一页纸,再加上许多其他建议,时间有限,因此在这方面无法取得太多进展。
至于ID,具体来说,改变他们的意思将打破现有的网页,没有某种“选择”,这真的使事情复杂化。这不仅是因为它们“丑陋”,而且它们几乎不可能完全避免,从统计上看,当前“文档顺序第一个”的定义在已知情况下实际上更有用/更可靠,虽然我意识到这是违反直觉的,但在动态情况下也更快,在静态情况下,内存占用较少,速度稍慢(但弹性更强)为了说明为什么不难-如果你开始渲染一个页面并找到一个id,你就设计它的样式。在您的模型中,如果我到达文档的末尾并找到一个id,我必须返回并取消前一个样式的样式,处理影响和回流,然后返回并在此应用样式。另一种选择(当前课程)是根据遇到的情况应用它们。ID在CSS中之所以特别,真正的原因在于它的特殊性,它只是“更独特”所以更重要对于css来说,属性、类和id之间的内部本质上没有区别,它们只是关于我们如何根据dom变异来划分规则和筛选规则。在javascript中,性能并不是主要问题,浏览器应该实现完整/静态的配置文件,包括:has()
和/或不带id限制:)
关于performance - 假设ID唯一,CSS快速配置文件可以更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295824/
好吧,我知道这个问题已经被问了无数次了。但是,对于我在谷歌搜索中似乎无法找到的问题,我还有一个小补充。 我当然不是 FFMPEG 的专家……我一直在使用 FFMPEG 的标准加速/减速模板,我正在使用
考虑这三个文档... [ { _id: "...", _rev: "...", title: "Foo", body: "...
我想知道访问我的全局变量的最快方法...它们只会在 Beta 测试阶段发生变化。在我们上线之前。从那时起,它们将永远不会改变。 我认为从 web.config 中获取内容会产生开销,而且编写 App.
这个问题在这里已经有了答案: 11 年前关闭。 Possible Duplicate: Is there a performance difference between BETWEEN and IN
我很想知道对通常作为查询目标的数字列进行分区是否有性能优势。目前我有一个包含约 5000 万条记录的物化 View 。当使用常规 b 树索引并按此数字列搜索时,我得到的成本为 7,查询结果大约需要 0
我需要编写一个库,它执行许多远程 HTTP 调用来获取内容。我可以按照描述做here ,但是有没有更好的方法(在性能方面)如何做到这一点?如果我按照示例中所述进行操作,我总是会创建一个 URL 对象,
该代码非常不言自明。只是有很多我需要独立随机化的范围。例如,范围('W1:W4')不应与范围('W5:W8')混淆,因此我不能只是随机化范围('W1:W80')。任何帮助或建议都会很棒!多谢。目前,代
我正在使用 ADT 模拟器。我在我的模拟器中使用默认的 Android 虚拟设备。我创建了一个版本 4.0.3。 问题 太慢了。有时我在尝试更改 fragment 时会收到加载点击。 我使用的代码是有
我正在尝试获取一个包含三个表中的信息的数组。结果应该是一个数组,我可以在其中循环遍历第一个表、第二个表中的相关行以及第三个表到第二个表中的相关行。目前,我有三个独立的 SQL 查询,然后将它们重组为一
我已经学会了两种在服务器上上传图像的方法(可能还有更多..)。 1) 创建 NSData 并将其添加到请求正文中 2)创建字节数组并像简单数组一样以json形式发送 1) 创建 NSData 并将其添
我有一个 UItextview,我可以在里面写入数据类,我可以在我的 View 中的任何地方提供数据,在 ViewDidAppear 函数中我传递了我的数据,但它有点慢。文本在 0.2-0.3 秒后出
如何为 discoverAllContactUserInfosWithCompletionHandler 创建优先级高于默认值的 CKOperation? 我找不到不使用 [[CKContainer
我在 unix 模块下编写了一个内核级函数,用于对系统负载进行采样。我在 clock.c 下的 clock() 中调用示例函数,以在每个时钟(例如,我的系统上每 10 毫秒)拍摄系统负载的快照。有没有
我正在制作一个应用程序,该应用程序将根据变量的值使用鼠标/键盘(宏)模拟操作。 这里有我制作的 de 扫描代码: void ReadMemory(int value){ DWORD p
我想知道在计算上调用嵌套在对象中的函数的最快方法是什么,所以我做了一个快速的 jsPerf.com 基准测试,其中我考虑了三种可能性——从数组中调用函数,从“核心”中调用函数对象和函数对象: var
我用 php 做了一个图像缩放器。调整图像大小时,它会缓存一个具有新尺寸的新 jpg 文件。下次您调用确切的 img.php?file=hello.jpg&size=400 时,它会检查是否已经创建了
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: Which is best for data store Struct/Classes? 考虑我有一个 Em
我正在尝试为多组列自动计算每行的平均分数。例如。一组列可以代表不同比例的项目。这些列也被系统地命名 (scale_itemnumber)。 例如,下面的虚拟数据框包含来自三个不同比例的项目。(可能会出
所以我知道散列图使用桶和散列码等等。根据我的经验,Java 哈希码并不小,但通常很大,所以我假设它没有在内部建立索引。除非哈希码质量很差导致桶长度和桶数量大致相等,否则 HashMap 比名称-> 值
假设我有一个非常缓慢和大的 for 循环。 如何将其拆分为多个线程以使其运行速度更快? for (int a = 0; a { slowMet
我是一名优秀的程序员,十分优秀!