JavaScript 和非常长的字符串

2024-01-09

我在使用以下代码时遇到问题:

function showTableData()
{
    var tableArray;
    var x = 0;
    var theHTML;

    for (i = 0; i < 7032; i++)
    {
        if (x = 0)
        {
            theHTML = '<tr>' + 
                '<th scope="row" class="spec">' + partNum[i] + '</th>' + 
                '<td>' + Msrp[i] + '</td>' + 
                '<td>' + blah[i] + '</td>' + 
                '<td>' + blahs[i] + '</td>' + 
            '</tr>' + theHTML;
            x++;
        }else{
            theHTML = '<tr>' + 
                '<th scope="row" class="specalt">' + partNum[i] + '</th>' + 
                '<td class="alt">' + Msrp[i] + '</td>' + 
                '<td class="alt">' + blah[i] + '</td>' + 
                '<td class="alt">' + blahs[i] + '</td>' + 
            '</tr>' + theHTML;
            x--;
        }
    }
    theHTML = '<table id="mytable" cellspacing="0">' + 
    '<tr>' + 
        '<th scope="col" abbr="Configurations" class="nobg">Part Number</th>' + 
        '<th scope="col" abbr="Dual 1.8">Msrp Price</th>' + 
        '<th scope="col" abbr="Dual 2">blahs Price</th>' + 
    '<th scope="col" abbr="Dual 2.5">Low Price</th>' + 
    '</tr>' + theHTML + '</table>';

    $('#example').append(theHTML);
}
 </script>

 <div id="example">
 </div>

问题在于$('#example').append(theHTML);从不执行(或显示在页面上)。我想是因为绳子太长了!它的数组中有超过 7,000 个项目,所以我不确定这是原因还是其他原因?

任何帮助都会很棒!谢谢!

David


除了if (x = 0)那确实应该是if (i % 2 === 0),您确实应该通过使用 Array.join() 方法而不是连接字符串来提高性能。这将产生类似的效果字符串生成器 http://www.yoda.arachsys.com/csharp/stringbuilder.html在 C# 或 Java 中。

例如:

function showTableData()
{
    var tableArray;
    var theHTML = [];
    theHTML.push('<table id="mytable" cellspacing="0">',
    '<tr>', 
        '<th scope="col" abbr="Configurations" class="nobg">Part Number</th>', 
        '<th scope="col" abbr="Dual 1.8">Msrp Price</th>',
        '<th scope="col" abbr="Dual 2">blahs Price</th>', 
    '<th scope="col" abbr="Dual 2.5">Low Price</th>', 
    '</tr>');

    for (var i = 0; i < 7032; i++)
    {
        if (i % 2 == 0)
        {
             theHTML.push('<tr>', 
                 '<th scope="row" class="spec">', partNum[i], '</th>',
                 '<td>', Msrp[i], '</td>', 
                 '<td>', blah[i], '</td>', 
                 '<td>', blahs[i], '</td>', 
             '</tr>');
        } else {
             theHTML.push('<tr>',
                 '<th scope="row" class="specalt">', partNum[i], '</th>', 
                 '<td class="alt">', Msrp[i], '</td>', 
                 '<td class="alt">', blah[i], '</td>', 
                 '<td class="alt">', blahs[i], '</td>',
             '</tr>');
        }
    }
    theHTML.push('</table>');

    $('#example').append(theHTML.join(''));
}
 </script>

 <div id="example">
 </div>

附加字符串的原因'my' + ' appended' + ' string'比连接字符串慢['my', ' joined', ' string'].join('')是因为JavaScript 字符串是不可变的 https://stackoverflow.com/questions/51185/are-javascript-strings-immutable-do-i-need-a-string-builder-in-js因此,在前一个示例中,每次连接 2 个字符串时都会创建第三个字符串,与向数组中添加新条目相比,这是一个非常昂贵的操作。

另请参阅JavaScript StringBuilder 项目 http://www.codeproject.com/KB/scripting/stringbuilder.aspx使用 Array.push() 和 Array.join() 相同的原理构建。

该项目在 IE 中进行 10,000 次串联的性能改进从 1 分钟多降至 0.23 秒。

UPDATE:添加了对 Array.join() 的额外调用来替换 for 循环内的字符串连接,这是为了进一步提高客户端渲染速度。 + 添加了更好的 StringBuilder 链接。

进一步更新:Hemlock 添加了建议:

  1. 通过定义删除了全局范围变量的使用var i = 0在for循环中
  2. 使用 Array.push() 的多个参数一次推送多个字符串。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 和非常长的字符串 的相关文章

  • 如何通过 jQuery onblur 提交表单

    所以我尝试通过 jQuery onblur 提交表单 即一旦焦点离开密码字段 表单就会通过 jQuery 提交 有类似的问题 但这不是我要找的 我尝试使用 document getElementById 但它不起作用 任何帮助表示赞赏 提前
  • 散列 hash_hmac 时,Convert.ToChar(0) 散列结果与 PHP 中的 chr(0) 不同的字符串

    我在 PHP 中有一个字符串 它被转换为字节数组并进行哈希处理 转换为字节数组的字符串如下所示 G 字符 0 便便 我需要 C 中的等效字节数组 这样我才能得到相同的哈希值 编辑 这是完整的问题 生成的哈希值不同 PHP api secre
  • React Router 1.0 使用 router.transitionTo() 而不使用导航 mixin

    有没有更简单的方法来访问Router组件中的对象执行诸如调用之类的操作transitionTo 不使用导航混合 这是一个 ES6 组件 目前 在像按钮单击这样的事件上 我一直在写这样的内容 class Button extends Reac
  • NodeJS 超级测试对会话对象的访问

    我正在使用 supertest 测试我的 Node js 应用程序 在我的控制器中 我访问会话对象 为了发出有效的请求 该会话对象需要填充一些数据 控制器 determine whether it is user s own profile
  • Jquery Fancybox 2 添加了右边距?

    当我使用 Fancybox 2 jquery 插件时 会添加 23px 的右边距 滚动条的宽度 这是网站 单击 站点地图 按钮 http kevinlouisdesign com projects Canu web http kevinlo
  • 使用 Twitter 的 Bootstrap 时,如何更改弹出窗口的内容?

    我正在使用 Twitter 的 Bootstrap js 的弹出窗口功能 我有一个按钮 当单击该按钮时 会执行以下 javascript popover anchor popover trigger manual placement bel
  • 获取真实的HTML5视频宽度和高度

    我有一个视频元素 var video window content document createElement video video width width video height height video style backgro
  • 如何强制 YouTube 播放器 API iframe 嵌入高质量缩略图?

    缩略图在一年多的时间里看起来都很好 但突然变得模糊了 页面加载时显示的缩略图看起来是正确的 但每当使用 player cueVideoById 显示新缩略图时 它看起来都非常模糊 文档中没有提及如何控制缩略图质量 仅视频质量设置 例如 se
  • 在闭包上下文中 for 循环内声明的 let 变量的行为

    在下面的代码片段中 函数传递给setTimeout与变量形成闭包i这是存在于script范围 所以该函数包含一个参考到变量i 的价值i之前更新为5i已记录到控制台 输出是 5 5 5 5 5 带换行符 script js let i for
  • 在浏览器中创建 bash shell 的可行性如何?

    主要是 我是 Unix 机器上的 C C 程序员 但是我会因为基于浏览器的 shell 访问 Linux 机器而放弃 所以 问题是 这有多难 什么方法最适合在网页中构建真正的 shell 级访问 闪光 JavaScript 我知道这确实是所
  • 无法在 Chrome 扩展中添加侦听器

    我正在尝试创建 chromium 扩展 但无法以正确的方式将侦听器附加到按钮 必须注意的是 我对js不是很熟悉 所以mb问题在于一些误解概念或某些元素加载时机 background page kbm html 我正在使用清单 v2 因此内联
  • 为什么Scala语言中的++:运算符这么奇怪?

    我正在使用 运算符来获取两个集合的集合 但是我使用这两种方法得到的结果不一致 scala gt var r Array 1 2 r Array Int Array 1 2 scala gt r Array 3 scala gt r res2
  • 如何在 jQuery 中禁用 Font-Awesome 按钮?

    如何禁用 jQuery 中的 font awesome 按钮 a class btn btn primary btn sm href i class fa fa upload i OK a 当我尝试以下操作时 jQuery 并未禁用此按钮
  • Swiper.js 幻灯片宽度

    Swiper js 有一个大问题是否有可能以某种方式使幻灯片的宽度再次等于内容的宽度 目前 所有幻灯片都拉伸到父级的整个宽度 很可能是因为我设置了容器网格元素我已经尝试解决这个问题很长时间了 但我就是不能告诉我我会感激不已 附截图 在此输入
  • 如何禁用单个视图的客户端验证?

    我需要在单个视图上禁用表单的客户端验证 我该怎么做呢 我不想只禁用以下 JS 文件 Scripts jquery jquery validate min js type text javascript gt Scripts jquery j
  • Google Maps API V3:捕捉到另一个多边形的节点

    我正在绘制相邻且共享边界的多边形 看下面的示例图片 如果我要为蒙大拿州绘制一个多边形 我希望能够单击爱达荷州多边形的节点以获得相同的边界部分 以确保边界不会重叠或有孔 但是 节点不允许直接单击它们 如果我使节点不可见 那么准确性会恶化 并且
  • 单击时如何来回交换文本?

    我需要的是来回交换文本 一个间隙 到Word单击它 我不想有按钮 用户只需单击间隙的位置即可 I see 这一页 https css tricks com swapping out text five different ways 准确地描
  • 一个JS文件用于多个页面[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我通常将所有 JavaScript 脚本放入一个文件中 例如scripts js HTTP 请求越少越好 因此 正如预期的那样 某些页
  • Angular 2 反应形式的嵌套数组?

    我使用以下教程在 Angular 2 中创建反应式表单 效果很好 https scotch io tutorials how to build nested model driven forms in angular 2 https sco
  • 设置 Gatsby 博客分层 URL slug 结构

    我目前正在使用 Gatsby Starter 博客 https github com gatsbyjs gatsby starter blog https github com gatsbyjs gatsby starter blog 我可

随机推荐

  • 沿着贝塞尔曲线路径放置图像

    有谁知道如何沿着贝塞尔路径放置图像 我可以很好地编写路径并沿着路径为精灵设置动画 但我想让路径成为一系列箭头而不是虚线 我认为一定有一种方法可以在整个路径上添加箭头图像 但找不到它 而且路径都是弯曲的 UIBezierPath path U
  • 如何复制带有指向内部数据的指针的结构(以便复制它们指向的指针和数据)?

    所以我有一个像这样的结构 struct GetResultStructure int length char ptr 我需要一种方法来制作它的完整副本 这意味着我需要一个副本来拥有一个结构 其中新的 ptr 指向我在原始结构中拥有的数据副本
  • 自定义 datagridview 的结果

    当我的客户 BindingSource 从 datagridview 搜索客户时 当找不到匹配项时 我需要一个显示 未找到结果 的消息框 而不仅仅是 什么也不显示 尝试这个 Dim emptyRowCount As Integer IIf
  • 使用调色板功能时使 NA 透明

    这是我的数据框 Test structure list Corr p c 0 65 0 64 0 64 NA 0 79 0 77 Case p c 24 57 12 89 20 92 NA 11 1 12 2 Control p c 16
  • 为绘图应用程序添加撤消功能

    我关注了一个raywenderlich 教程 http www raywenderlich com 87899 make simple drawing app uikit swift关于使用 UIKit 制作绘图应用程序 我现在正在尝试添加
  • 居中位图标记(Google 地图 Android API v2)

    当我从自定义位图中添加标记时 标记未以我指定的点为中心 我这样添加 ID tramo final int tramoId tr getId Nodos final Nodo nodos tr getNodos final PolylineO
  • 如何使用 php 解析 .plist 文件?

    我可以用 php 解析 plist 文件并将其放入数组中吗 POST 这样我就可以打电话 POST body 并获取具有以下内容的字符串
  • 如何在 Emacs 中突出显示选项卡

    我在源代码中使用空格进行缩进 如何突出显示 标记代码中的选项卡 可能是红色的 和我用的时候一样 setq default show trailing whitespace t 作为 abo abo 的提示 我发现我可以在以下代码中使用空白模
  • HttpClient 存储在哪个程序集中

    我想使用HttpClient来自 WCF Rest Service 的类 用于创建调用 Rest 的客户端 服务 我听说它已被纳入 net 4 0 但不知道它存储在哪个程序集中 根据这个 MSDN 页面 http msdn microsof
  • ViewModel 中的 ASP.NET MVC SelectList

    我正在使用 ASP NET MVC 5 但这很可能也适用于以前的版本 提出这个问题的最佳方法是向您展示代码 这是视图模型 public class PersonCreateViewModel public SelectList cities
  • 有没有办法将 UNC 路径映射到 Windows 2003 上的本地文件夹?

    我知道我可以将 UNC 路径映射到本地驱动器号 但是 我想知道是否有办法将 UNC 路径映射到本地文件夹 我有一个程序 其中硬编码到程序中的特定文件夹 我想尝试创建一个映射到 UNC 路径的同名文件夹 以便可以从网络共享访问数据 这可行吗
  • R 中的跟踪函数

    我想跟踪一个函数 以便它在调用时打印它的所有参数 当它返回结果时 它会打印返回值和参数 函数跟踪允许定义在进入和退出函数调用时要执行的操作 是否有一个函数返回函数内的参数列表 是否有一种方法无需执行多个分支中的每个分支即可获取结果值 每个分
  • 查找矩阵中的面积数

    假设我有一个像这样的矩阵 1 1 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 1 如果两个 1 彼此相邻 仅水平和垂直 因此属于同一区域 我需要找出矩阵中有多少个这些区域 您可以看到该矩阵中有两个区域为 1 我已经尝试解决这
  • 当是公共存储库时,什么应该包含 .gitignore 文件?

    我一直在学习有关 gitignore 文件的所有内容 但有一个问题我想解决 gitignore 应包含您要忽略的所有文件 因此 您应该忽略操作系统 您正在使用的 IDE 生成的文件 当存储库位于 Github 上并且人们可以克隆它并推送更改
  • Sass 数组中的随机颜色[重复]

    这个问题在这里已经有答案了 我想指定一个颜色数组 然后将颜色随机应用到列表中 到目前为止 我已经做到了颜色会按顺序循环 我怎样才能随机化它 这是到目前为止的 Sass 代码 colors red orange yellow green bl
  • 根据异常类型调用ContainerStoppingErrorHandler

    我使用的是 spring kafka 版本 2 2 4 Release 和 Kafka 版本 2 11 我在用容器停止错误处理程序作为我的错误处理程序 每当出现异常时 就会调用此方法并停止容器 现在 我需要根据异常类型停止容器 如果发生某些
  • 如何检测特定区域的触摸

    目前我看到触摸事件将向我显示发生触摸的 UIView 但是 如果我需要检测某些非矩形形状 例如圆形 的触摸该怎么办 我该如何去做这样的事情呢 基本上 只有当用户触摸不可见的圆形区域内的某处时 我才想做一些事情 感谢任何帮助 指导 TIA 你
  • 了解 PHP/Laravel 中的构造函数、$this 关键字和控制器类

    我知道以前已经对此进行过介绍 但我正在努力解决如何将其应用到我的代码中 我正在 Laravel 中开发一个 PHP 应用程序 但希望使我的代码更加模块化和可测试 这意味着将我的逻辑从我的重型控制器中分离出来 并将它们分离到单独的文件中 并从
  • WPF 中的下划线标签,使用样式

    我有以下风格
  • JavaScript 和非常长的字符串

    我在使用以下代码时遇到问题 function showTableData var tableArray var x 0 var theHTML for i 0 i lt 7032 i if x 0 theHTML tr th class s