0

它是加载和解析日志文件的最佳方式(就性能而言) - 为(在 HTML 中)所有“错误”实例着色?

<div class="mydiv"></div>

 $.get(path, function(data) {

    var lines = $(data.toString().split(/\n/));

    for (var i = 0, len = lines.length; i < len; i++) {

        if (lines[i].indexOf("error") >= 0){  

            lines[i]=lines[i].replace("error", "<span     class='error'>error</span>");                             
                     $(".mydiv").append(lines[i]);                                  

            }
 })

.error {    
    background-color:red ;      
} 
4

2 回答 2

0

查看如何使用 JavaScript 替换字符串中的所有点,其中为字符串创建了 replaceAll 方法。它似乎具有“比使用正则表达式更快”的出色性能,并且我使用了它并且效果很好。如果大小写不是问题,您还可以删除函数中的 toLowerCase 并提高性能。

来自 Fagner Brack 关于如何使用 JavaScript 替换字符串中的所有点

/**
 * ReplaceAll by Fagner Brack (MIT Licensed)
 * Replaces all occurrences of a substring in a string
 */
String.prototype.replaceAll = function( token, newToken, ignoreCase ) {
    var _token;
    var str = this + "";
    var i = -1;

    if ( typeof token === "string" ) {

        if ( ignoreCase ) {

            _token = token.toLowerCase();

            while( (
                i = str.toLowerCase().indexOf(
                    token, i >= 0 ? i + newToken.length : 0
                ) ) !== -1
            ) {
                str = str.substring( 0, i ) +
                    newToken +
                    str.substring( i + token.length );
            }

        } else {
            return this.split( token ).join( newToken );
        }

    }
return str;
};

alert('okay.this.is.a.string'.replaceAll('.', ' '));

所以对于你的代码,我会使用这样的东西

$.get(path, function(data) {
    var strData = data.toString();
    strData.replaceAll("error", "<span class='error'>error</span>");    
    $(".mydiv").append($(strData));
 })

编辑:

正如 Sergey Kochetov 所建议的那样, .replace 明显更快。所以这将是一种更快的方法。

$.get(path, function(data) {
    var strData = data.toString();
    strData.replace(/error/gi, "<span class='error'>error</span>");  
    $(".mydiv").append($(strData));
 })
于 2013-08-15T08:41:12.690 回答
0

最好一次附加所有行:

for (...){
...
}
$(".mydiv").append(lines.join(''));
于 2013-08-15T08:43:10.787 回答