From 80ee36f063ecf1de683e651319b9b0d4692592e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=9D=83=E5=A8=81?= Date: Tue, 21 Feb 2023 17:29:14 +0800 Subject: [PATCH 1/2] improve: diff performance --- .editorconfig | 1 + src/index.js | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/.editorconfig b/.editorconfig index 14c1d8c19..d4d73cf57 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,3 +4,4 @@ root = true charset = utf-8 end_of_line = lf insert_final_newline = true +indent_size = 2 diff --git a/src/index.js b/src/index.js index ba74b8b66..fc863bfd4 100644 --- a/src/index.js +++ b/src/index.js @@ -319,18 +319,20 @@ class Dayjs { const that = dayjs(input) const zoneDelta = (that.utcOffset() - this.utcOffset()) * C.MILLISECONDS_A_MINUTE const diff = this - that - let result = Utils.m(this, that) - - result = { - [C.Y]: result / 12, - [C.M]: result, - [C.Q]: result / 3, - [C.W]: (diff - zoneDelta) / C.MILLISECONDS_A_WEEK, - [C.D]: (diff - zoneDelta) / C.MILLISECONDS_A_DAY, - [C.H]: diff / C.MILLISECONDS_A_HOUR, - [C.MIN]: diff / C.MILLISECONDS_A_MINUTE, - [C.S]: diff / C.MILLISECONDS_A_SECOND - }[unit] || diff // milliseconds + const getMonth = () => Utils.m(this, that) + + let result = { + [C.Y]: () => getMonth() / 12, + [C.M]: () => getMonth(), + [C.Q]: () => getMonth() / 3, + [C.W]: () => (diff - zoneDelta) / C.MILLISECONDS_A_WEEK, + [C.D]: () => (diff - zoneDelta) / C.MILLISECONDS_A_DAY, + [C.H]: () => diff / C.MILLISECONDS_A_HOUR, + [C.MIN]: () => diff / C.MILLISECONDS_A_MINUTE, + [C.S]: () => diff / C.MILLISECONDS_A_SECOND + }[unit] || (() => diff) // milliseconds + + result = result() return float ? result : Utils.a(result) } From 209d69482314a87be04a1071fc70c913bfc95cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=9D=83=E5=A8=81?= Date: Mon, 17 Apr 2023 13:46:01 +0800 Subject: [PATCH 2/2] refactor: switch refactor --- src/index.js | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/index.js b/src/index.js index fc863bfd4..5b4c464db 100644 --- a/src/index.js +++ b/src/index.js @@ -321,18 +321,36 @@ class Dayjs { const diff = this - that const getMonth = () => Utils.m(this, that) - let result = { - [C.Y]: () => getMonth() / 12, - [C.M]: () => getMonth(), - [C.Q]: () => getMonth() / 3, - [C.W]: () => (diff - zoneDelta) / C.MILLISECONDS_A_WEEK, - [C.D]: () => (diff - zoneDelta) / C.MILLISECONDS_A_DAY, - [C.H]: () => diff / C.MILLISECONDS_A_HOUR, - [C.MIN]: () => diff / C.MILLISECONDS_A_MINUTE, - [C.S]: () => diff / C.MILLISECONDS_A_SECOND - }[unit] || (() => diff) // milliseconds - - result = result() + let result + switch (unit) { + case C.Y: + result = getMonth() / 12 + break + case C.M: + result = getMonth() + break + case C.Q: + result = getMonth() / 3 + break + case C.W: + result = (diff - zoneDelta) / C.MILLISECONDS_A_WEEK + break + case C.D: + result = (diff - zoneDelta) / C.MILLISECONDS_A_DAY + break + case C.H: + result = diff / C.MILLISECONDS_A_HOUR + break + case C.MIN: + result = diff / C.MILLISECONDS_A_MINUTE + break + case C.S: + result = diff / C.MILLISECONDS_A_SECOND + break + default: + result = diff // milliseconds + break + } return float ? result : Utils.a(result) }