首页 > 编程知识 正文

resnet18和resnet50区别,iec101规约

时间:2023-05-05 02:33:25 阅读:16770 作者:2330

resnet101网络

我来告诉你个故事吧。 如果为我们的设计系统构建另一个日期选择器组件。 由文本输入和带有日历的弹出窗口组成,单击以显示日历。 然后,可以在外部单击或选择日期以关闭弹出窗口。

大多数外部单击逻辑的实现都是通过将实际的单击侦听器附加到DOM来实现的。 但是,因为想构建可访问的日期选择器,所以可以使用选项卡打开日历,并以相同的方式关闭。 此外,如果在页面上放置了多个日期选择器,则单击监听程序可能会发生冲突。

如果我只能依靠本地焦点和模糊事件而不是检测外部点击,该怎么办? 它自然支持选项卡,触摸并单击事件,并在浏览器中实现。 在这种情况下,唯一需要解决的问题是,单击弹出窗口没有选择日期。 焦点将转移到日历上,文本输入将触发模糊事件,最终关闭弹出窗口。

在这一点上,我开始怀疑是否可以点击,但没有转移焦点。 在快速游览之后,我找到了一种方法来阻止mouseDown事件对弹出窗口的默认操作。 所有点击都有效,例如一行,但重点是文本输入。

这似乎就是解决办法,让我们继续前进,但我心中的某件事阻止了我。 为什么指定mouseDown而不是mouseUp来阻止焦点,但要传播单击? 这是生活水平的一部分吗? 我们可以依靠吗? 可以在浏览器之间工作吗? 也不支持用于集成测试的React Testing库。 需要变更模拟功能。

什么是网络标准?

那么,堆栈概述的答案对我来说还不够,所以有什么地方比Web标准更了解浏览器的行为呢?

你可能听说过W3C或全球网络联盟。 这是一个为网络开发开放标准的国际社区。 W3C保证每个人都遵循相同的准则,不需要支持几十种截然不同的环境。 访问他们的网站,就会找到他们制定的所有标准的列表。

查看可能回答我们问题的文档- ui事件标准。 本文档指定DOM事件流,并定义事件列表及其执行顺序。 如果您认为标准无聊、难以理解和难以理解,请直接转至DOM Event Architecture部分。 在此部分中,事件会冒泡、捕获和显示漂亮的图像,但仍然是标准的。 它的质量令人吃惊。 它确实写得很好,附有很多例子和建议。

它还定义mouseDown事件及其默认操作。

“许多实现都使用mousedown事件来启动各种上下文相关的默认操作。 取消此事件可以防止使用这些默认操作。 默认操作包括:拖动图像和链接&; 包括开始放下操作、开始文本选择等。 此外,一些实现还提供了鼠标驱动平移功能,在调度mousedown事件时按鼠标中键可以激活该功能。 ”

是的。 因此,我们的事件有一些缺省操作,但实际上取决于浏览器的实现,因此没有具体说明焦点。 检查一下吧。

浏览器引擎概述

现代浏览器是一个非常复杂的软件,代码库包含数千万行代码。 因此,通常分为几个部分。

要找到定义焦点事件的位置,必须获取每个部分负责的摘要。 让我们使用Chrome及其设计文档来查看Chrome的源代码。 如你所见,有很多模块负责各种逻辑。

让我简单说明一下它们是如何协同工作的。

chrome:这是具有启动逻辑、UI和所有窗口的基本APP应用程序。 包含chrome.exe和chrome.dll项目。 图标和光标等资源也在这里。content:处理与子进程通信的APP应用程序的后端。net:这是一个有助于联系网站的网站库。base:所有子项目之间共享公共代码的位置。 这可能包括字符串操作、通用实用程序等。眨眼:这是一个渲染引擎,负责整个渲染管道,包括DOM树、样式、事件和V8集成。v8:浏览器的最后一部分-Javascript引擎。 它的工作是将JavaScript编译成本地计算机代码。

如您所见,浏览器由几个独立的部分组成,这些部分通过API相互通信。 对于开发人员来说,dsdsb的部分通常是Blink和V8。 浏览器定义的默认操作不是V8的一部分,但Blink必须定义和实现所有这些操作。 但是里面有

Blink代码库之前,让我们从用户的角度了解Web浏览器的工作方式。


渲染管线


假设您在浏览器中输入域名,然后它会获取并加载一堆资产:HTML,CSS和JS文件,图像,图标。 但是接下来会发生什么呢?

第一步,将解析HTML文件并将其转换为DOM树 。 DOM不仅是页面的内部表示形式,还是暴露给Javascript的API,用于通过称为“绑定”的系统查询或修改呈现。


在DOM树之后,下一步是处理CSS样式。 为此,浏览器具有一个CSS解析器,可构建样式规则的模型。 建立了样式规则模型之后,我们可以将它们与浏览器提供的一组默认样式合并在一起,并为每个DOM元素计算每个样式属性的最终值。 此过程称为样式解析(或recalc)


在下一个布局部分,我们需要确定所有元素的视觉几何形状。 在此阶段,每个元素都会获得其坐标(x和y),宽度和高度。 布局引擎计算并保留所有溢出区域的记录-哪些部分可见,哪些不可见。


当我们获得了所有元素的所有坐标时,就该绘画了 。 对于此操作,我们使用上一步中的坐标和样式规则中的颜色,并将它们组合为绘画说明列表。 重要的是,以正确的顺序绘制元素,以便在重叠时正确堆叠它们。 您可以通过z-index样式规则修改订单。


让我们执行绘画指令列表,并将其转换为颜色值的位图。 这个阶段称为光栅 。 此刻,我们还拍摄图像并将其解码为位图。


稍后,栅格化的位图将存储在GPU内存中。 此阶段包括提取硬件的库,并在Windows上发出对OpenGL和DirectX的调用。 GPU收到显示位图的指令时,会在屏幕上绘制像素。


现在,我们有了渲染管线中最重要的部分。 但是,如果滚动页面或应用某些动画会发生什么? 实际上,渲染不是静态的。 变化通过动画帧表示。 每个帧都是在特定时间点的内容状态的完整呈现。 在此过程中,真正的挑战是其性能。 流畅的动画需要每秒至少生成60帧。 几乎不可能在一秒钟内完成60条完整的流水线,特别是在速度较慢的设备上。


如果不是总是重新渲染所有内容,而是提供一种在特定阶段使元素无效的方法,该怎么办? 例如,如果您动态更改按钮的颜色,浏览器会将该节点标记为无效,并将在下一个动画帧上重新渲染该节点。 如果什么都没有改变,我们可以重用旧框架。


这是优化内容中较小动态变化的好方法。 让我们考虑一下大内容区域的变化。 例如,如果滚动页面,则所有像素现在必须都不同。 为此,页面被分解为独立栅格化的图层。 一层可能很小,仅代表一个DOM节点。 然后,这些层将在另一个称为合成器线程的线程上组合在一起。 通过此优化,您无需重新栅格化所有内容,而只需对较小的图层进行栅格化,然后将它们正确组合在一起即可。


现在,我们对Blink的功能以及渲染管道的外观有了一些概述。 让我们深入研究代码。


导航眨眼代码库


看来我们终于到了终点线。 让我们打开Blink存储库 ,环顾四周。

我们很快就能意识到,尽管我们从最初的问题中缩小了很多范围,但仍然无法手动找到负责防止焦点的特定代码行。


让我们尝试通过Google中的活动名称进行搜索:

mousedown site:https://chromium.googlesource.com/chromium/blink/+/master/Source

它将我们引至EventHandler文件,您可以在其中找到许多输入事件的实现细节。 包括对我们来说最重要的一行:

bool swallowEvent = !dispatchMouseEvent(EventTypeNames::mousedown, mev.innerNode(), m_clickCount, mouseEvent);


dispatchMouseEvent返回值的意思是“继续默认处理”,因此在使用preventDefault情况下swallowEvent为true 。


在下面,有一个对焦点事件的调用,只有在swallowEvent == false才会触发该事件。

swallowEvent = swallowEvent || handleMouseFocus(MouseEventWithHitTestResults(mouseEvent, hitTestResult), sourceCapabilities);

除了焦点处理之外,您还可以浏览鼠标按下事件的所有默认操作,包括选择,拖放和滚动条大小写。 它还实现了鼠标释放和双击事件-一切都在那里。


壁虎和WebKit


至此,我们已经花了一些时间来发现浏览器的源代码,并且对它们的结构有了很好的了解,所以为什么不一起检查Firefox和Safari。 Firefox的浏览器引擎称为Gecko,而Safari的-WebKit。


Gecko还为开发人员提供了概述页面 ,因此您可以了解它的主要概念。 根据Chrome的经验,您可以找到整齐的6000行代码EventStateManager文件,其中包含事件的默认操作和行为。 我在链接中包含了特定的行,因此您不必全部经历。


WebKit是Safari和其他Apple产品中使用的Apple浏览器引擎。 Chrome浏览器的Blink是从WebKit派生的,因此它们有很多共同点,并且在EventHandler文件的版本中查找事件实现不是问题。


现在,由于我们确定可以安全地阻止mousedown事件,因此我可以退后一步,并使用日期选择器完成PR。


结论


我们一起走过了一个简单的问题,开始介绍Web标准和浏览器实现细节。


即使是浏览器或编译器,也不必担心现有模块的隐藏复杂性。 最后,这将是一次有趣的旅程。 您有机会轻松找到需要改进的地方,更重要的是,获得对事情实际运行方式的独特见解。 在这次深入学习中,我学到了很多东西,并鼓励每个人都做同样的事情。 在我不确定为什么还需要其他任何内容的过程中,浏览器会提供出色的文档。


相关链接以供进一步阅读 您知道什么是DOM吗? 它如何在内部表示? 事件的目的是什么? 我向从初学者到经验丰富的开发人员的所有人都强烈推荐DOM Standard 。 “一个事件表示一个事件,而不是一个动作。” -我最喜欢的部分。 W3C社区的官方网站。 四处浏览Chromium代码库 。 Chromium开发人员发布的设计文件 。 像素寿命 -Chrome渲染管道简介。

翻译自: https://hackernoon.com/web-standards-101-ku9w3wg7

resnet101网络

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。