Javascript 如何将线展平?
JavaScript V8引擎(Chrome,node)在内部使用constring结构来表示连接的字符串 我可以在网上找到一种将此结构展平为简单字符串的方法,即使用Javascript 如何将线展平?,javascript,node.js,google-chrome,v8,Javascript,Node.js,Google Chrome,V8,JavaScript V8引擎(Chrome,node)在内部使用constring结构来表示连接的字符串 我可以在网上找到一种将此结构展平为简单字符串的方法,即使用String.charCodeAt(0)。然而,这似乎不再有效(在Chrome54上测试) 有没有另一种方法可以强制V8压扁字符串结构 创建后我使用这些字符串的方式将受益于扁平化字符串(例如,减少内存使用)。Number(str)仍然扁平化内部字符串。有一个npm模块,flatstr,就是这样做的。这样,您的代码就不会充满看似随机的
String.charCodeAt(0)
。然而,这似乎不再有效(在Chrome54上测试)
有没有另一种方法可以强制V8压扁字符串结构
创建后我使用这些字符串的方式将受益于扁平化字符串(例如,减少内存使用)。
Number(str)
仍然扁平化内部字符串。有一个npm模块,flatstr,就是这样做的。这样,您的代码就不会充满看似随机的Number()
调用。请参阅。我对节点的内部工作原理一无所知,但是从连接的字符串创建新的字符串是否会达到您的目的?例如,新字符串(myConcatString)
。或者这对性能影响太大?@ChrisW-no,newstring()
不执行展平。相反,它只是围绕着与源代码相同的内部表示创建一个包装器。我想我没有什么有用的输入:/I我不认为应该有办法强制引擎使用特定的内部表示,因为这可能很容易改变。你在做什么呢?a)你非常关心内部格式,b)扁平字符串会大大改进内部格式?请发布一些代码。@Bergi-我的案例是一个BI应用程序,它可以在浏览器中处理多达一百万行。我预先做了很多索引工作,扁平化有助于减少内存使用,并可能提高indexOf
调用之类的性能。虽然这似乎确实扁平化了constring
实例,还有一个潜在的缺点-在我的测试中,如果字符串在内部存储为InternalizedString
,调用Number(str)
似乎会将其转换为简单的string
或OneByteString
,因此可能会增加内存使用。因此,如果解决方案不会产生更糟糕的结果,则必须单独调查每个用例。