Skip to content

formattedMessage cache is obsolete when size > 100Β #104

@kevinramharak

Description

@kevinramharak

Looking into the performance problems I checked o see what happens when a file has more diagnostics than the cache size allows for (currently 100).

I found that the part:

if (cache.size > 100) {
const firstCacheKey = cache.keys().next().value;
cache.delete(firstCacheKey);
}

does not work as intended, since the first diagnostic that is being checked for will not be part of the cache. Then the newly formattedMessage will replace an entry in the cache, causing the next diagnostic to also be a cache miss.

Example file

const diagnostic_1 = a1;
const diagnostic_2 = a2;
const diagnostic_3 = a3;
const diagnostic_4 = a4;
const diagnostic_5 = a5;
const diagnostic_6 = a6;
const diagnostic_7 = a7;
const diagnostic_8 = a8;
const diagnostic_9 = a9;
const diagnostic_10 = a10;
const diagnostic_11 = a11;
const diagnostic_12 = a12;
const diagnostic_13 = a13;
const diagnostic_14 = a14;
const diagnostic_15 = a15;
const diagnostic_16 = a16;
const diagnostic_17 = a17;
const diagnostic_18 = a18;
const diagnostic_19 = a19;
const diagnostic_20 = a20;
const diagnostic_21 = a21;
const diagnostic_22 = a22;
const diagnostic_23 = a23;
const diagnostic_24 = a24;
const diagnostic_25 = a25;
const diagnostic_26 = a26;
const diagnostic_27 = a27;
const diagnostic_28 = a28;
const diagnostic_29 = a29;
const diagnostic_30 = a30;
const diagnostic_31 = a31;
const diagnostic_32 = a32;
const diagnostic_33 = a33;
const diagnostic_34 = a34;
const diagnostic_35 = a35;
const diagnostic_36 = a36;
const diagnostic_37 = a37;
const diagnostic_38 = a38;
const diagnostic_39 = a39;
const diagnostic_40 = a40;
const diagnostic_41 = a41;
const diagnostic_42 = a42;
const diagnostic_43 = a43;
const diagnostic_44 = a44;
const diagnostic_45 = a45;
const diagnostic_46 = a46;
const diagnostic_47 = a47;
const diagnostic_48 = a48;
const diagnostic_49 = a49;
const diagnostic_50 = a50;
const diagnostic_51 = a51;
const diagnostic_52 = a52;
const diagnostic_53 = a53;
const diagnostic_54 = a54;
const diagnostic_55 = a55;
const diagnostic_56 = a56;
const diagnostic_57 = a57;
const diagnostic_58 = a58;
const diagnostic_59 = a59;
const diagnostic_60 = a60;
const diagnostic_61 = a61;
const diagnostic_62 = a62;
const diagnostic_63 = a63;
const diagnostic_64 = a64;
const diagnostic_65 = a65;
const diagnostic_66 = a66;
const diagnostic_67 = a67;
const diagnostic_68 = a68;
const diagnostic_69 = a69;
const diagnostic_70 = a70;
const diagnostic_71 = a71;
const diagnostic_72 = a72;
const diagnostic_73 = a73;
const diagnostic_74 = a74;
const diagnostic_75 = a75;
const diagnostic_76 = a76;
const diagnostic_77 = a77;
const diagnostic_78 = a78;
const diagnostic_79 = a79;
const diagnostic_80 = a80;
const diagnostic_81 = a81;
const diagnostic_82 = a82;
const diagnostic_83 = a83;
const diagnostic_84 = a84;
const diagnostic_85 = a85;
const diagnostic_86 = a86;
const diagnostic_87 = a87;
const diagnostic_88 = a88;
const diagnostic_89 = a89;
const diagnostic_90 = a90;
const diagnostic_91 = a91;
const diagnostic_92 = a92;
const diagnostic_93 = a93;
const diagnostic_94 = a94;
const diagnostic_95 = a95;
const diagnostic_96 = a96;
const diagnostic_97 = a97;
const diagnostic_98 = a98;
const diagnostic_99 = a99;
const diagnostic_100 = a100;
const diagnostic_101 = a101;
const diagnostic_102 = a102;
const diagnostic_103 = a103;

I doubt this is the cause of the performance issue, but it is definitely not helping. I wonder how much the cache actually helps at all, as far as I can tell the formatting is not expensive so far.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingperformanceperformance-related issues / regression

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions