平仮名をローマ字表記に変換する。その2 多分こっちが高速?

var toRoman = (function( ) {

  var roman = {

    '1':'1', '2':'2', '3':'3', '4':'4', '5':'5', '6':'6', '7':'7', '8':'8', '9':'9', '0':'0',
    '!':'!', '”':'"', '#':'#', '$':'$', '%':'%', '&':'&', '’':"'", '(':'(', ')':')', '=':'=',
    '〜':'~', '|':'|', '@':'@', '‘':'`', '+':'+', '*':'*', ';':";", ':':':', '<':'<', '>':'>',
    '、':',', '。':'.', '/':'/', '?':'?', '_':'_', '・':'・', '「':'[', '」':']', '{':'{', '}':'}',
    '¥':'\\', '^':'^',
    
    'ふぁ':'fa', 'ふぃ':'fi', 'ふぇ':'fe', 'ふぉ':'fo',

    'きゃ':'kya', 'きゅ':'kyu', 'きょ':'kyo',
    'しゃ':'sha', 'しゅ':'shu', 'しょ':'sho',
    'ちゃ':'tya', 'ちゅ':'tyu', 'ちょ':'tyo',
    'にゃ':'nya', 'にゅ':'nyu', 'にょ':'nyo',
    'ひゃ':'hya', 'ひゅ':'hyu', 'ひょ':'hyo',
    'みゃ':'mya', 'みゅ':'myu', 'みょ':'myo',
    'りゃ':'rya', 'りゅ':'ryu', 'りょ':'ryo',

    'ふゃ':'fya', 'ふゅ':'fyu', 'ふょ':'fyo',
    'ぴゃ':'pya', 'ぴゅ':'pyu', 'ぴょ':'pyo',
    'びゃ':'bya', 'びゅ':'byu', 'びょ':'byo',
    'ぢゃ':'dya', 'ぢゅ':'dyu', 'ぢょ':'dyo',
    'じゃ':'ja',  'じゅ':'ju',  'じょ':'jo',
    'ぎゃ':'gya', 'ぎゅ':'gyu', 'ぎょ':'gyo',

    'ぱ':'pa', 'ぴ':'pi', 'ぷ':'pu', 'ぺ':'pe', 'ぽ':'po',
    'ば':'ba', 'び':'bi', 'ぶ':'bu', 'べ':'be', 'ぼ':'bo',
    'だ':'da', 'ぢ':'di', 'づ':'du', 'で':'de', 'ど':'do',
    'ざ':'za', 'じ':'zi', 'ず':'zu', 'ぜ':'ze', 'ぞ':'zo',
    'が':'ga', 'ぎ':'gi', 'ぐ':'gu', 'げ':'ge', 'ご':'go',

    'わ':'wa', 'ゐ':'wi', 'う':'wu', 'ゑ':'we', 'を':'wo',
    'ら':'ra', 'り':'ri', 'る':'ru', 'れ':'re', 'ろ':'ro',
    'や':'ya',            'ゆ':'yu',            'よ':'yo',
    'ま':'ma', 'み':'mi', 'む':'mu', 'め':'me', 'も':'mo',
    'は':'ha', 'ひ':'hi', 'ふ':'hu', 'へ':'he', 'ほ':'ho',
    'な':'na', 'に':'ni', 'ぬ':'nu', 'ね':'ne', 'の':'no',
    'た':'ta', 'ち':'ti', 'つ':'tu', 'て':'te', 'と':'to',
    'さ':'sa', 'し':'si', 'す':'su', 'せ':'se', 'そ':'so',
    'か':'ka', 'き':'ki', 'く':'ku', 'け':'ke', 'こ':'ko',
    'あ':'a', 'い':'i', 'う':'u', 'え':'e', 'お':'o',
    'ぁ':'la', 'ぃ':'li', 'ぅ':'lu', 'ぇ':'le', 'ぉ':'lo',

    'ヶ':'ke', 'ヵ':'ka',
    'ん':'n',  'ー':'-', ' ':' '

  };
  var reg_tu  = /っ([bcdfghijklmnopqrstuvwyz])/gm;
  var reg_xtu = /っ/gm;

  return function ( str ) {
    var pnt = 0;
    var max = str.length;
    var s, r;
    var txt = '';
    
    while( pnt <= max ) {
      if( r = roman[ str.substring( pnt, pnt + 2 ) ] ) {
        txt += r;
        pnt += 2;
      } else {
        txt += ( r = roman[ s = str.substring( pnt, pnt + 1 ) ] ) ? r: s;
        pnt += 1;
      }
    }
    txt = txt.replace( reg_tu, '$1$1' );
    txt = txt.replace( reg_xtu, 'xtu' );
    return txt;
  };
})();