我正在将一些Java代码移植到JavaScript.我有很多成员元素char.使这些数字或字符串(字符串始终是单个字符)更有效率?
更新: 目前在Java中使用的方式是:
/** alignment is left. */
public static final char TAB_STOP_LEFT = 'l';
/** alignment is center. */
public static final char TAB_STOP_CENTER = 'c';
/** alignment is right. */
public static final char TAB_STOP_RIGHT = 'r';
private char tabStop;
Run Code Online (Sandbox Code Playgroud)
然后我有很多地方可以将其中一个TAB_STOP_*值分配给tabStop,或者根据特定值测试tabStop的值.它没有必要是l/c/r,我只是用它们来使它更容易在调试器中读取(这段代码来自Java 1.3,早在枚举之前).
最简洁的方法是将它们设为枚举,然后tabStop就是一个数字.但是,如果它更快并且使用更少的内存,如果每个是1个字符的字符串,我可以这样做.
更新2: 非常感谢Juan Mendes和JLRishe - 非常好的细节.我决定做的是使用枚举(即数字),因为两者之间的差异很小,而且枚举使一切都更加清晰.
好吧,这里首先要记住的是“过早的优化是万恶之源”,除非您合理地担心这会影响应用程序的效率,否则这不太可能成为其应用程序的瓶颈。表现。
如果您的目标是提供类似枚举的功能,那么我认为这更可能是数字与字符串不太可能成为问题的原因,但为了进一步减轻这些担忧,如果您在整个应用程序中一致地引用它们,那么您可以随时来回切换以测试哪个更有效,然后使用最好的那个。
与在 Java 中一样,JavaScript 中的字符串和其他对象是通过引用存储的,因此在您的情况下,单字符字符串的内存占用量在很大程度上是无关紧要的,问题是对该字符串的引用需要花费多少成本。我无法找到任何关于此的决定性信息,但我强烈怀疑这最多是 64 位,因为这是典型现代机器上最大的地址大小。
所以摆在桌面上的问题是:
字符串、数字和对象在 #1 上都应该相等,因为数字占用 64 位,而引用占用 64 位。
再次在 #2 上,它们是相当均匀匹配的,因为我们可以非常安全地假设 JavaScript 引擎设计者将在比较两个字符串的值之前对它们进行引用相等性检查,因此如果两个变量引用字符串的同一个实例,则这应该与比较两个数字具有可比性。
在#3 上,字符串比数字稍有优势,因为您可以直接打印它们,而您需要一个转换步骤将数字转换为可理解的值。
因此,我建议短期内坚持使用字符串,然后在遇到一些性能问题时重新评估。如果代码写得好,应该很容易关掉。如上所述,如果您使用对一小组字符串的引用,那么这些字符串的实际大小在很大程度上是微不足道的。因此,如果这能让您的调试更容易理解,请随意使用"left", "center","right"作为实际值。
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |