- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
据我所知,使用 Javascript 删除对象上的条目时,至少使用 chrome 会将对象置于“字典模式”或“慢速模式”
例子:
var user = { name: 'connor', sex: 'male' };
// user is in "fast mode"
delete user.sex;
// user is in ("slow" or "dictionary") mode
这什么时候有益,什么时候有害?
一个具体的例子是,我有一个对象,当应用程序启动时对象是空的,但是随着代码的运行和应用程序内存的增加,它可能会变得非常大并且对象永远不会减少在应用程序关闭之前它的大小将不存在。
还有关于这种模式的任何语义吗?
最佳答案
It is to my knowledge that with Javascript when you delete an entry on a object, at least with chrome it puts the object into "dictionary mode" or "slow mode"
那不是 JavaScript 的东西;这是 Chrome 中 V8 引擎的实现特征。 This thread on the V8 users's list讨论这个:
[ZenWolf] ...Does using the JavaScript "delete" keyword to delete a property from an object effect (sic) how v8 will optimize the object? ...
[Sven Panne] ...Deleting a property results in going to "slow mode", i.e. using a dictionary for the object's properties. So as a general rule of thumb, using 'delete' makes thing slower...
可以看到这个效果in this JSPerf .请注意使用 V8 的浏览器(Chrome、Opera 20)在使用 delete
时比不使用它时速度更慢。无论哪种方式,Firefox 最新的 SpiderMonkey 都快得令人眼花缭乱,IE10 和 11 轻微受到影响。 (有趣的是,用于 10.5 到 12 [我认为是]Carakan 的引擎 Opera 比 V8 更受 delete
的影响。)
如果您正在编写要在网络浏览器中使用的代码,那么针对特定引擎进行优化往往是浪费时间,除非您在该引擎上面临特定的、真实的性能问题。 (如果你是,一旦你处理了那个,确保这些改变不会弄乱其他引擎!)
如果您正在为 NodeJS、SilkJS 等编写代码,那么当然可以针对 V8 进行优化(尽管过早优化的正常规则仍然适用),因为它们是专门使用 V8 构建的。
Also is there any semantics around this mode?
没有。 JavaScript 的语义由规范定义,如果对象的行为与规范的语义相匹配,该规范并不规定如何实现对象;该规范根本不涉及性能。 V8 通过即时生成动态类并将它们编译为机器代码来实现对象,但是当您从它们中删除属性时会退回到“慢速”(字典)模式。 (如果您添加 属性,如 Sven Panne 在上面的引用中所说的更常见的操作,它会动态创建一个派生类,即 doesn't slow things down。)但是其他引擎可以自由地将它们实现为 HashMap 、属性链接列表或其他任何内容。
关于javascript - "dictionary mode"的优点和缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23455678/
我正在开发基于桌面 (Windows 7) 的应用程序,并使用 Qt Creator v 5.6.0 开发程序。我有一个非常奇怪的问题,即 我的程序在 DEBUG 模式下崩溃,但在 RELEASE 模
我爱org-tables ,我用它们来记录各种事情。我现在正在为 Nix 记录一些单行代码(在阅读了 Domen Kožar 的 excellent guide 后,在 this year's Eur
org-mode 是否有一个键绑定(bind)可以在编号/项目符号列表项之间移动,就像您可以对标题一样? 喜欢的功能: org-forward-heading-same-level 大纲下一个可见标题
我知道这有点小,但它一直困扰着我。我正在为一个项目使用 Org-mode,我倾向于经常导出为 PDF 或 HTML,这使我的目录中散落着 PDF、Tex 和 HTML 文件。有没有办法将 Org 模式
有什么方法可以让 org-mode 继续编号列表而不是重新启动? 这是情况。你列了一个类似的列表: Sometimes you can restart the display by doing som
如何在组织模式文件中生成所有标签的枚举列表(例如 :tag:)?假设我有一个以下形式的列表: * Head1 :foo:bar: ** Subhead1 :foo: * Head2
我正在使用 org-mode(Emacs:24.3.1,org-mode: 7.9.3f 8.0.6)作为不同代码片段的数据库语言(目前主要是 elisp 和 python)。这在使用 org-mod
相关问题:org-mode: fontify code blocks natively 截至 2012 年 11 月 1 日,我已经获得了最新的 org-mode 和 emacs 版本(组织存储在 o
有谁知道在使用 ido 模式时区分 dired 模式缓冲区名称与迷你缓冲区中其他类型缓冲区的好方法吗?例如...在 dired 模式缓冲区名称末尾显示正斜杠? 最佳答案 您可以简单地更改dired-m
在这个示例脚本中 import argparse parser = argparse.ArgumentParser() parser.add_argument('--modes', help="tes
我第一次学习“操作系统”。在我的书中,我发现了关于“用户模式”和“内核模式”的这句话: "Switch from user to kernel mode" instruction is execute
我刚刚下载了 Processing 2.0 并尝试从“模式管理器”安装 Android 模式。但是在安装时出现错误提示:“无法将模式“Android 模式”移动到速写本”。我怎样才能摆脱这个错误? 最
在 android L 中,我尝试将相机闪光灯模式设置为 TORCH,它工作正常,但我无法将其更改回闪光灯模式 AUTO 或闪光灯模式 打开。我只能返回闪存模式 OFF。我尝试了像 camera360
有 2 台机器,A 和 B。有 2 个分支,p16 和 c2。 A 有一个 ext3 文件系统,但在 B 上,存档位于带有 vfat 的 truecrypt 驱动器上,mount 显示 rw,uid=
我有 linum-mode在我的 Emacs 配置中全局启用。全局启用意味着它也适用于不受欢迎的速度条。 我为这个问题找到的唯一建议是在存档的 Emacs 帮助邮件列表中,它建议以下 speedbar
Google Cloud Firestore 将很快取代旧的 Google Cloud Datastore。然后可以选择在“ native 模式”或“数据存储模式”下使用 Cloud Firestor
org-mode的版本我的版本 Emacs 附带的(24.5.2) 是 8.2.10 .我已安装版本 8.3.1从 ELPA 并将其添加到我的 init 文件中: (add-to-list 'load
The org-mode manual指出 org-mode 将“”“...在 shell 链接”“”中执行命令,但它不显示此类链接的语法。 我希望能有一个简单完整的示例来说明这种 shell 链接是
我正在尝试在 emacs 24 中使用 dart 模式和 d 模式。如果我单独使用任何一种模式,一切都很好。如果我分别对每种类型的文件使用这两种模式,我在尝试缩进 D 代码时会出错。 以下是在初始化时
我的应用程序中有 CupertinoDatePicker 以使用以下代码选择日期和时间: formatColumn( widget: Consumer( builder: (_, mcProvide
我是一名优秀的程序员,十分优秀!