瀏覽代碼

Use native methods instead of DayJS

Results in a 4x speedup
JC Brand 6 年之前
父節點
當前提交
11da69b0d7
共有 2 個文件被更改,包括 12 次插入10 次删除
  1. 11 9
      src/converse-muc-views.js
  2. 1 1
      src/utils/html.js

+ 11 - 9
src/converse-muc-views.js

@@ -1312,24 +1312,26 @@ converse.plugins.add('converse-muc-views', {
             },
 
             /**
-             * Working backwards, get the first join/leave notification
-             * from the same user, on the same day and BEFORE any chat
-             * messages were received.
+             * Working backwards, get today's most recent join/leave notification
+             * from the same user (if any exists) after the most recent chat message.
              * @private
              * @method _converse.ChatRoomView#getPreviousJoinOrLeaveNotification
              * @param {HTMLElement} el
              * @param {string} nick
              */
             getPreviousJoinOrLeaveNotification (el, nick) {
-                while (!_.isNil(el)) {
-                    const data = _.get(el, 'dataset', {});
-                    if (!_.includes(_.get(el, 'classList', []), 'chat-info')) {
+                const today = (new Date()).toISOString().split('T')[0];
+                while (el !== null) {
+                    if (!el.classList.contains('chat-info')) {
                         return;
                     }
-                    if (!dayjs(el.getAttribute('data-isodate')).isSame(new Date(), "day")) {
-                        el = el.previousElementSibling;
-                        continue;
+                    // Check whether el is still from today.
+                    // We don't use `Dayjs.same` here, since it's about 4 times slower.
+                    const date = el.getAttribute('data-isodate');
+                    if (date && date.split('T')[0] !== today) {
+                        return;
                     }
+                    const data = _.get(el, 'dataset', {});
                     if (data.join === nick ||
                             data.leave === nick ||
                             data.leavejoin === nick ||

+ 1 - 1
src/utils/html.js

@@ -258,7 +258,7 @@ u.getLastChildElement = function (el, selector='*') {
 }
 
 u.hasClass = function (className, el) {
-    return Array.from(el.classList).includes(className);
+    return el.classList.contains(className);
 };
 
 u.addClass = function (className, el) {