jQuery 排序导致 iOS Safari 冻结

2024-04-10

我有一个页面使用 jQuery 加载 XML 文件,然后将其内容输出到页面。

最近,我在输出中添加了排序功能,导致 iPod Touch 上的 Safari 挂起 1 分钟以上或 2 分钟以上(取决于我排序的字段数量),而在 iPad 上挂起不到 1 分钟。在 Firefox 4.0.1 上,几秒钟内就会返回相同的排序。

恐怕这只是iOS的一个限制,但在我删除排序之前,也许可以进行优化。

在过滤器之前,XML 中有 357 个项目。筛选后有 199 个项目经过排序。

var videoGames = $($.parseXML(videoGameXml)).find("game");
videoGames = videoGames.filter(function (a) {
    return ($(this).attr('addOn') != "true" && $(this).find('own').text() == "yes");
});
videoGames.sort(function (a, b) {
    var firstTitle = $(a).find('title').text().toLowerCase();
    var secondTitle = $(b).find('title').text().toLowerCase();
    var firstSystem = ($(a).find("console").text() + " " + $(a).find("version").text()).toLowerCase();
    var secondSystem = ($(b).find("console").text() + " " + $(b).find("version").text()).toLowerCase();

    if (firstSystem != secondSystem) {
        if (firstSystem > secondSystem) {
            return 1;
        } else {
            return -1;
        }
    } else {
        if (firstTitle > secondTitle) {
            return 1;
        } else if (secondTitle < firstTitle) {
            return -1;
        }
    }
    return 0;
});
videoGames.each(function () {
    // runs quickly, so removed
});

请注意,如果我删除系统检查作为初始“优化”,则 iPod Touch 上的时间会减少一半,但仍然会导致上面提到的 1 分钟以上的挂起。

那么,这是 iOS 设备的限制吗?或者我可以优化我的排序吗?


每次执行 $(a)​​ 时,它都会执行一组非常复杂的操作,因此您最好对其进行缓存。另外,如果系统不同,则不需要标题。这个版本应该会加速一点:

videoGames.sort(function (a, b) {
    var first = $(a);
    var second = $(b);
    var firstSystem = (first.find("console").text() + " " + first.find("version").text()).toLowerCase();
    var secondSystem = (second.find("console").text() + " " + second.find("version").text()).toLowerCase();

    if (firstSystem != secondSystem) {
        if (firstSystem > secondSystem) {
            return 1;
        } else {
            return -1;
        }
    } else {
        var firstTitle = first.find('title').text().toLowerCase();
        var secondTitle = second.find('title').text().toLowerCase();

        if (firstTitle > secondTitle) {
            return 1;
        } else if (secondTitle < firstTitle) {
            return -1;
        }
    }
    return 0;
});

您还可以缓存对象中的值

然后,代替:

var firstSystem = (first.find("console").text() + " " + first.find("version").text()).toLowerCase();

Do:

var firstSystem = first.data('system');
if (!firstSystem) {
    firstSystem = (first.find("console").text() + " " + first.find("version").text()).toLowerCase();
    first.data('system') = firstSystem;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jQuery 排序导致 iOS Safari 冻结 的相关文章

  • 从基本表单加上 XML 生成自定义表单文档?

    这是我的第一次堆栈溢出 而且很复杂 对不起 我的任务是从基本模板和一些 XML 生成自定义文档without每种情况都有一个自定义表单设计元素 Here s 整个画面 我们正在构建一个 Lotus Notes 客户端 而不是 Web 应用程
  • 使用 moment.js 检查输入日期是否为星期一

    好吧 我想检查日期是否是星期一 例如 var myDate new Date moment myDate DD MM YYYY dayIs monday 在我的国家 一周的第一天是星期一 所以 我真的想检查输入日期是否是一周的开始 我尝试使
  • 如何使用canvas.toDataURL()将画布保存为图像?

    我目前正在构建一个 HTML5 Web 应用程序 Phonegap 本机应用程序 我似乎不知道如何将画布保存为图像canvas toDataURL 有人可以帮我吗 这是代码 有什么问题吗 我的画布被命名为 canvasSignature J
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • 在为 RXJS 可观察量编写测试时,如何避免让调度程序通过我的业务逻辑?

    我发现使某些测试通过的唯一方法是显式地将调度程序传递给函数 为了便于说明 请考虑以下函数 function doStuff stream return stream delay 100 filter x gt x 2 0 map x gt
  • Ebay api GetSellerList,解析响应 XML

    我正在使用 eBay 交易 api 来获取当前列出的卖家股票 我正在使用 GetSellerList 调用 我在解析 xml 时遇到问题 然后将其插入到网站商店中 这是 xml 请求
  • 如果链接包含特定文本,jQuery 将类添加到 href

    我的网站上的列表中有一些动态填充的链接 这些链接链接到文件 是否可以使用 jQuery 查看文件名是否以 pdf 结尾 并在 href 或类似的链接文本以 mp3 结尾时添加一个类 例如 我的列表中有以下链接 文件1 pdf 歌曲1 mp3
  • 未捕获的错误:找不到模块“jquery”

    我在用Electron https github com atom electron制作桌面应用程序 在我的应用程序中 我正在加载一个外部站点 Atom 应用程序之外 可以说http mydummysite index html http
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • 使用 JS 合并具有相同值的相邻 HTML 表格单元格

    我已经为此苦苦挣扎了一段时间 我有一个根据一些 JSON 数据自动生成的表 该数据可能会有所不同 我想合并第一列中具有相同值的相邻单元格 例如此表中的 鱼 和 鸟 table tr td fish td td salmon td tr tr
  • JS用正则表达式替换数字

    我有元素的标识符 如下所示 form book 1 2 3 我想要的是用其他值替换该标识符中的第二个数字 我将函数 match 与以下正则表达式一起使用 var regexp d d d 但它返回我包含的数组 1 2 3 2 因此 当我尝试
  • JQuery 验证在 IE8 中不起作用

    我使用 JQuery 验证脚本来验证 HTML 表单 这在 Firefox 中完美运行 但在 IE8 中不起作用 我认为冒号 或分号 有问题 但我无法抓住它 jQuery validator addMethod selectNone fun
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • Chartjs刻度标签位置

    尝试让 Y 轴刻度标签看起来像image https i stack imgur com XgoxX png 位于秤顶部且不旋转 缩放选项当前如下所示 scales yAxes id temp scaleLabel display true
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • Jquery - 通过在字符串中构建 id 的 id 获取元素

    我在使用 jquery 元素时遇到问题 我正在 var 中构造名称 例如 var myId myGotId myId attr title changed myId 返回空 我想通过 id 获取我的元素 但动态构建我的 Id 连接字符串 编
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • 如何使用 .htaccess 将任何外部链接重定向到特定的 url 格式?

    我想重定向所有外部链接 即像这样的链接http www someothersite com anything在我的网站上 比如说http www example com to http www example com something 这
  • glDrawBuffer(GL_NONE) 与 glColorMask 设置为全部 GL_FALSE

    glDrawBuffer GL NONE 和 glColorMask GL FALSE GL FALSE GL FALSE GL FALSE 有什么区别 两者只是丢弃对颜色缓冲区的任何绘制的另一种方式吗 还是有一些差异 首先也是最重要的 g
  • 如何安全更新 Grails 插件

    我从事 grails 项目已经有一段时间了 我最初安装的一些插件已经更新 我运行了以下脚本来查看哪些插件需要更新 grails list plugin updates 结果是 Plugins with available updates a
  • 如何通过 PHP PDO 使用异步 Mysql 查询

    Mysqlnd 驱动程序 PHP 5 6 有机会使用异步查询http php net manual en mysqli reap async query php http php net manual en mysqli reap asyn
  • 数据存储区中的 Google App Engine 版本控制

    Google App Engine 有应用程序版本的概念 即 您可以同时运行应用程序的多个版本并可以在不同的子域中访问 例如 http 1 my app name appspot com http 2 my app name appspot
  • #import 仍然出现“重复符号”错误

    当我编译 iPhone 应用程序时 xCode 为 MyConstants h 中的变量给出 重复符号 错误 我想如果我使用 import MyConstants h 它会避免这种情况吗 但我仍然有问题 添加信息 在 链接 期间发生错误 我
  • 如何将 pandas 中的日期时间列全部转换为同一时区

    我有一个带有日期时间列的数据框 带有不同格式的时区 时区似乎是 UTC 但我想将该列转换为pd to datetime但这是失败的 这是问题 1 由于失败 我无法在该时间段上执行任何日期时间操作 例如按日期对列进行分组 计算出天数 按一天中
  • 如何使用 h5py 保存不同形状的 numpy.arrays 列表?

    我正在使用 h5py 将大型图像数据集 flickr25k 数据集 保存到 hdf5 中 但是图像大小不同 因此我无法创建具有形状的数据集 nb images height width 现在我正在使用多个数据集来处理这个问题 因此creat
  • 如何防止 xsl-fo 中的页脚溢出?

    我正在从我的 xsl 和 xml 文件生成一个 pdf 其中我需要在第一页末尾显示一个表格 但由于该表上方还有一些表 因此将其显示为静态文本会将其下推到第二页 或第三页 依此类推 所以我想把这个表作为页脚 就在第一页上 因此 我将此表定义为
  • dyld:未加载库:lib/libopencv_core.3.0.dylib 原因:未找到图像

    我遇到以下问题 Users luke Desktop trainHOG trainhog exit dyld Library not loaded lib libopencv core 3 0 dylib Referenced from U
  • 带参数执行

    我在 Java 中执行需要参数的批处理文件时遇到困难 这些参数可能包含空格 因此我需要将它们用引号引起来 我还需要对 Linux 执行相同的操作 因为某些参数可能包含特殊字符 例如 非功能性 Windows 代码 ProcessBuilde
  • Ruby 2.0 中正确的哈希语法是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我应该使用
  • Inno Setup:如何观察变量值或写入调试输出?

    在 Inno Setup 中调试时如何观察变量的值 如何打印一些内容来调试输出 Thanks 目前没有调试监视窗口 但当调试器在断点处停止时 您只需将鼠标悬停在要检查的变量上即可 要将某些内容打印到调试输出 请使用Log http jrso
  • 让 jQuery 插件在动态添加的元素上工作

    好吧 我有这个插件 http timeago yarp com 它可以在现有元素上正常工作 但是 当我动态添加元素时 效果不会应用于该新元素 如何使插件在动态添加的元素上工作 该插件的语法是 abbr timeago timeago 这是添
  • Python 字符串和列表

    几天来一直在解决这个小问题 我不知道我是否全错了或者只是错过了一些东西 目标 从句子中的每个单词中 找到第一个元音 从单词中删除该元音后面的字母 并将剩余字母乘以 3 这个例子 如果我有一句话 Hello World 想要的输出应该是 He
  • 如何直接从 Android Wear 通过 WiFi 发出 HTTP 请求?

    如何在 Android Wear 上执行 HTTP 请求或打开套接字 我曾经认为这是不可能的但是应用程序说以下内容 如果您有配备 Android Wear 5 1 和 WiFi 的智能手表 即使您的手机处于关闭状态 也能正常工作 我测试了它
  • Java 应用程序可以使用 Aero Glass 效果吗?

    基于Swing的Java能否在Windows Vista 7下实现Aero Glass效果作为背景 从 Java SE 6 开始 Swing 的 Windows 原生外观使用 Aero Chet Haase 发表了一篇博客文章 其中包含有关
  • 线程“main”中出现异常 java.lang.SecurityException:禁止的包名称:java.lang

    我是 Java 新手 我有一个程序返回以下错误 我完全无法弄清楚 我用谷歌搜索了一切 你们能帮我吗 package java lang public class S1 public static void main String args
  • Rails 并发请求

    所以我有一个 Rails 应用程序可以解析一个长 json 文件 在此期间它向外部 API 发送请求 这似乎需要很长时间 我的问题是 是否像将每个请求放入单独的线程中以加快速度一样简单 我不明白为什么我不能同时运行 3 或 4 个线程来发送
  • jQuery 排序导致 iOS Safari 冻结

    我有一个页面使用 jQuery 加载 XML 文件 然后将其内容输出到页面 最近 我在输出中添加了排序功能 导致 iPod Touch 上的 Safari 挂起 1 分钟以上或 2 分钟以上 取决于我排序的字段数量 而在 iPad 上挂起不