JavaScript の文字列の最大の長さ
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ Chrome Firefox ともに 512MB 弱 (2億7000万文字弱)
◆ Chrome は若干少ない
◆ Chrome は若干少ない
Chrome は
268,435,440 文字
Firefox は
268,435,455 文字
JavaScript は UTF-16 が内部の文字コードなので一文字 2 バイト
Chrome は
536,870,880 byte
Firefox は
536,870,910 byte
512MB (1024 * 1024 * 512) は
536,870,912 byte
Firefox はちょうどだけど Chrome はなぜかちょっと少ない
手抜きです
ですが手抜きし過ぎで 一向に終わりません
Node.js だと 2分ちょっと
Chrome は10分ほど経っても反応なかったので強制終了させました
もうちょっとちゃんとしたのを作らないとですね
ってことで 2分岐探索
chrome は内部でキャッシュされるのか2回目以降が早いです
コレにかぎらず速度測るとよく起きます
268,435,440 文字
Firefox は
268,435,455 文字
JavaScript は UTF-16 が内部の文字コードなので一文字 2 バイト
Chrome は
536,870,880 byte
Firefox は
536,870,910 byte
512MB (1024 * 1024 * 512) は
536,870,912 byte
Firefox はちょうどだけど Chrome はなぜかちょっと少ない
おまけ
これを求めるために 自分で適当な値入れてそれより上か下かを探すのがめんどうになってきたのでこんなものを作りましたconsole.time(" ")
var s = ""
try{
for(var i=0;true;i++) s = " ".repeat(i)
}catch(e){
console.log(s.length)
}
console.timeEnd(" ")
var s = ""
try{
for(var i=0;true;i++) s = " ".repeat(i)
}catch(e){
console.log(s.length)
}
console.timeEnd(" ")
手抜きです
ですが手抜きし過ぎで 一向に終わりません
Node.js: 134868.116ms
chrome: unknown
chrome: unknown
Node.js だと 2分ちょっと
Chrome は10分ほど経っても反応なかったので強制終了させました
もうちょっとちゃんとしたのを作らないとですね
ってことで 2分岐探索
console.time(" ")
function try_ok(len){
try{
var s = ""
s = " ".repeat(len)
return true
}catch(e){
return false
}
}
var mx_guard = Number.MAX_SAFE_INTEGER
var mn_guard = 0
var p = parseInt(mx_guard/2)
while(p !== mn_guard){
try_ok(p) ?(
mn_guard = p,
p = parseInt((p + mx_guard) / 2)
):(
mx_guard = p,
p = parseInt((p + mn_guard) / 2)
)
}
console.log(p)
console.timeEnd(" ")
function try_ok(len){
try{
var s = ""
s = " ".repeat(len)
return true
}catch(e){
return false
}
}
var mx_guard = Number.MAX_SAFE_INTEGER
var mn_guard = 0
var p = parseInt(mx_guard/2)
while(p !== mn_guard){
try_ok(p) ?(
mn_guard = p,
p = parseInt((p + mx_guard) / 2)
):(
mx_guard = p,
p = parseInt((p + mn_guard) / 2)
)
}
console.log(p)
console.timeEnd(" ")
Node.js: 4ms
chrome: 2-4ms
chrome: 2-4ms
chrome は内部でキャッシュされるのか2回目以降が早いです
コレにかぎらず速度測るとよく起きます