所以我最近开始研究 ember js,尤其是它的 glimmer 渲染引擎,并试图了解它是如何工作的。
所以我的理解是,Glimmer VM 是一个模拟实际 DOM 并执行功能以对其进行更新的虚拟机。虽然 vdom 维护 DOM 状态的内部表示,但 glimmer VM 没有这样的状态,相反,它执行两组线性指令 - 一组执行模板的初始渲染,第二组对元素进行更新。这种方法的主要好处是这样我们可以完全绕过 JS 的解析/编译瓶颈,只需将二进制文件发送到客户端,然后由 glimmer vm 执行。我做对了吗?
最佳答案
如果只是将模板的语言从 JS 或文本更改为二进制字节码,Glimmer 不会绕过下载/解析/编译,因此下载它要小得多,下载和解析/编译由 Glimmer 完成VM 而不是 JS VM,语法简单,解析和执行速度非常快,而且在未来,VM 可以移动到 WebAssembly 以使其更快。
Glimmer VM 只是执行字节码的 VM,但它是处理状态的 VM,因此当它想要渲染一个组件时,它采用该组件模板并在 VM 中执行模板字节码。呈现模板程序并生成更新程序字节码,并将其与组件关联存储,因此当组件需要重新呈现时,仅更新程序在 VM 中执行。 在 Virtual Dom 环境中,更新调用函数修改虚拟 dom,然后立即或当绘图系统滴答作响(批量更新)时,它会将虚拟 dom 与前一个进行比较,并更新需要更新的节点。
虚拟 DOM 在 React 中很有意义,因为它不使用模板,组件 JSX 被转换为使用 React API 与 DOM 交互的 JS 代码(检查 this)。
Angular Ivy(Angular 的新 View 引擎)似乎与 Glimmer 相似,因为它确实创建了某种 Ivy 代码而不是完整的 JS,但它没有像 Glimmer 那样创建更新程序。 (不太确定那是我从周围发现的 Ivy 文章中得到的)。
Glimmer 和 Angular 做的事情类似于 Virtual DOM,但在组件级别,它们控制更改并且仅重新渲染已更改其数据的组件。主要区别在于 Glimmer 已经知道绘制了什么并执行先前生成的更新模板字节码,而不是拆解和完整渲染。
关于javascript - Glimmer VM 与虚拟 dom 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53919705/
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
我这个模型:classBunny每当我提交一个表单来创建这个模型时,我都会收到以下错误:#的未定义方法“number_before_type_cast” 最佳答案 我通过将此方法添加到我的Bunny模型中解决了这个问题:defnumber_before_type_castnumberend我不喜欢它,但我想在有人发布更好的解决方案之前它会起作用。 关于ruby-on-rails-Rails验证虚拟属性,我们在StackOverflow上找到一个类似的问题: h
这是一个研究案例:......我正在尝试使用WatirRuby的API引用名为“bar”的嵌入元素。该元素由Chrome的DOM检查器显示,但我无法使用Watir的任何查找方法找到它:browser.embeds()#onlyisfoundbrowser.html.include?'bar'#=>false为什么会这样?为什么Watir不显示完整的HTML?如果我有不同框架中的元素或由Javascript初始化函数动态插入的元素,是否可以使用Watir访问它们?谢谢 最佳答案 如果元素在框架中,你必须使用这样的东西:browser.
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click