【问题标题】:Does defining a frequently used string as a variable improve performance? [duplicate]将常用字符串定义为变量会提高性能吗? [复制]
【发布时间】:2016-05-17 14:16:09
【问题描述】:

在某些语言中,经常使用的字符串被定义为变量/常量,它们被调用而不是文字字符串。这和 JavaScript 一样吗?特别是,我经常使用字符串'none'。与其在代码中随处写 'none',不如在我定义时提高性能:

var none = 'none';

并在代码中的任何地方使用none?或者,有没有办法实习一个文字字符串表达式,以便它只被评估一次?

【问题讨论】:

  • 将字符串存储在变量中将减少源代码本身使用的字节数。在这方面,您的代码可以执行得更快。
  • 你分析过你的代码吗?你确定这种微优化真的有用吗?
  • 如果您使用变量并更改字符串,则只有一个地方可以查找错字(假设您最初检查并验证了变量名称)。至于“它会提高性能吗”——请转到JS Perf 并自己检查。
  • “在某些语言中,经常使用的字符串被定义为变量/常量,它们被调用而不是文字字符串” --- 比如在哪些语言中?这听起来很奇怪而且没用。
  • 这既是一种在任何实际软件项目中都绝对无关紧要的微优化,也是一种对于解释器自动优化来说微不足道的事情。

标签: javascript string performance


【解决方案1】:

大多数 Javascript 编译器会自动嵌入文字字符串。所以var a = 'hello'var b = 'hello' 可能已经指向内存中'hello' 字符串的同一个副本,您无需进一步优化。

确保为相同的字符串值创建不同的字符串对象的唯一方法是通过 String 全局对象定义每个对象,即:

var a = new String('hello');
var b = new String('hello');

【讨论】:

  • "automatically interned in Javascript" ---这句话需要改变:ES标准甚至没有定义字符串实习。所以它是实现的一个可选属性。
  • “Javascript 唯一一次为相同的字符串值创建不同的字符串对象是如果你通过 String 全局对象定义每个对象” --- 你怎么知道底层数据没有被实习?你的假设是基于什么?
  • 改写后仍然不清楚为什么你认为hello字符串文字不能被实习。
  • @Pedro 感谢您的帮助。看来你是对的。
  • @sawa “看来你是对的”——你怎么知道的?这个答案在任何地方都提供零引用。软件工程是关于处理事实,而不是信任互联网上的某个人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-12
  • 2012-01-26
  • 2012-03-04
  • 1970-01-01
  • 2023-03-18
  • 2011-04-27
  • 2019-09-30
相关资源
最近更新 更多