<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Table</title>
</head>
<body >
<input id='tt' type="text" >
<br>
<input type="button" value="asadf" onclick="xx(document.getElementById('tt').value)">
<div id='x1' style="height:400px; width:200px;border:1px solid #003300"></div><script language="javascript">
var $ = function(id){
 return document.getElementById(id);
}
var cc="北京-01$上海-02$天津-03$重庆-04$辽宁-05$吉林-06$黑龙江-07$河北-08$山西-09$陕西-10$甘肃-11$青海-12$山东-13$安徽-14$江苏-15$浙江-16$河南-17$湖北-18$湖南-19$江西-20$台湾-21$福建-22$云南-23$海南-24$四川-25$贵州-26$广东-27$内蒙古-28$新疆-29$广西-30$西藏-31$宁夏-32$香港-33$澳门-34";
var str="";
for(var i=0;i<=600;i++)
{
if(str==""){
str = cc;
}
str= str+'$'+cc;
}
//var t= new Date().getTime();
function xx(s){
if(!/^[\u4e00-\u9fa5]+$/.test(s)) return;
$('x1').innerHTML = '';
var reg =new RegExp('('+s+'[\u4e00-\u9fa5]*)-(\\d{2})', "g"),arr=[],str1='',t=new Date().getTime();
  while(reg.exec(str)){
  arr[arr.length]=RegExp.$2;
  str1 = str1+RegExp.$1+"<br>";
  };
  $('x1').innerHTML =str1;
  alert(new Date().getTime()-t)
}
</script></body>
</html>

解决方案 »

  1.   

    性能是消耗在innerHTML的赋值解析上。
      

  2.   

    优化下^_^
    var reg =new RegExp('('+s+'[\u4e00-\u9fa5]*)-(\\d{2})', "g"),arr=[],str1='',t=new Date().getTime();
    //改成
    var reg =new RegExp('([\u4e00-\u9fa5]*'+s+'[\u4e00-\u9fa5]*)-(\\d{2})', "g"),arr=[],str1='',t=new Date().getTime();
      

  3.   

    可用DocumentFragment加快渲染速度 var
    result = document.getElementById('x1'),
    frag = document.createDocumentFragment(),
    parent = result.parentNode,
    str = "北京-01$上海-02$天津-03$重庆-04$辽宁-05$吉林-06$黑龙江-07$河北-08$山西-09$陕西-10$甘肃-11$青海-12$山东-13$安徽-14$江苏-15$浙江-16$河南-17$湖北-18$湖南-19$江西-20$台湾-21$福建-22$云南-23$海南-24$四川-25$贵州-26$广东-27$内蒙古-28$新疆-29$广西-30$西藏-31$宁夏-32$香港-33$澳门-34";
    str = new Array(600 + 1).join(str);
    function xx(s){
        var
        repeat = 5,
        start = new Date().getTime();
        frag.appendChild(result);
        while(repeat--){
            if (!/^[\u4e00-\u9fa5]+$/.test(s)) return;
            
            var arr = [],
            reg = new RegExp('(' + s + '[\u4e00-\u9fa5]*)-(\\d{2})', "g");
            
            str.replace(reg, function(m, $1, $2){
                arr[arr.length] = $1;
            });
            
            result.innerHTML = arr.join('<br>');
            parent.appendChild(frag);
        }
        alert((new Date().getTime() - start) / 5);
    }