This repository was archived by the owner on Apr 12, 2024. It is now read-only.
Commit fca6be7
perf($parse): execute watched expressions only when the inputs change
With this change, expressions like "firstName + ' ' + lastName | uppercase"
will be analyzed and only the inputs for the expression will be watched
(in this case "firstName" and "lastName"). Only when at least one of the inputs
change, the expression will be evaluated.
This change speeds up simple expressions like `firstName | noop` by ~15%
and more complex expressions like `startDate | date` by ~2500%.
BREAKING CHANGE: all filters are assumed to be stateless functions
Previously it was a good practice to make all filters stateless, but now
it's a requirement in order for the model change-observation to pick up
all changes.
If an existing filter is statefull, it can be flagged as such but keep in
mind that this will result in a significant performance-penalty (or rather
lost opportunity to benefit from a major perf improvement) that will
affect the $digest duration.
To flag a filter as stateful do the following:
myApp.filter('myFilter', function() {
function myFilter(input) { ... };
myFilter.$stateful = true;
return myFilter;
});
Closes #9006
Closes #90821 parent ec9c0d7 commit fca6be7
File tree
6 files changed
+386
-24
lines changed- benchmarks/parsed-expressions-bp
- src/ng
- test/ng
- directive
6 files changed
+386
-24
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
34 | 39 | | |
35 | 40 | | |
36 | 41 | | |
| |||
134 | 139 | | |
135 | 140 | | |
136 | 141 | | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
137 | 153 | | |
138 | 154 | | |
139 | 155 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1725 | 1725 | | |
1726 | 1726 | | |
1727 | 1727 | | |
1728 | | - | |
| 1728 | + | |
1729 | 1729 | | |
1730 | 1730 | | |
1731 | 1731 | | |
| |||
1737 | 1737 | | |
1738 | 1738 | | |
1739 | 1739 | | |
1740 | | - | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
1741 | 1743 | | |
1742 | 1744 | | |
1743 | 1745 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
376 | 376 | | |
377 | 377 | | |
378 | 378 | | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
379 | 383 | | |
380 | 384 | | |
381 | 385 | | |
| |||
493 | 497 | | |
494 | 498 | | |
495 | 499 | | |
496 | | - | |
| 500 | + | |
| 501 | + | |
497 | 502 | | |
498 | 503 | | |
499 | 504 | | |
| |||
505 | 510 | | |
506 | 511 | | |
507 | 512 | | |
508 | | - | |
| 513 | + | |
509 | 514 | | |
510 | 515 | | |
511 | 516 | | |
512 | | - | |
| 517 | + | |
| 518 | + | |
513 | 519 | | |
514 | 520 | | |
515 | 521 | | |
| |||
557 | 563 | | |
558 | 564 | | |
559 | 565 | | |
560 | | - | |
| 566 | + | |
| 567 | + | |
| 568 | + | |
561 | 569 | | |
562 | 570 | | |
563 | 571 | | |
| |||
571 | 579 | | |
572 | 580 | | |
573 | 581 | | |
574 | | - | |
| 582 | + | |
| 583 | + | |
| 584 | + | |
| 585 | + | |
575 | 586 | | |
576 | 587 | | |
577 | 588 | | |
| |||
588 | 599 | | |
589 | 600 | | |
590 | 601 | | |
591 | | - | |
| 602 | + | |
592 | 603 | | |
593 | | - | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
594 | 607 | | |
595 | 608 | | |
596 | 609 | | |
| |||
615 | 628 | | |
616 | 629 | | |
617 | 630 | | |
618 | | - | |
| 631 | + | |
619 | 632 | | |
620 | 633 | | |
621 | 634 | | |
| |||
624 | 637 | | |
625 | 638 | | |
626 | 639 | | |
627 | | - | |
| 640 | + | |
628 | 641 | | |
629 | 642 | | |
630 | 643 | | |
| |||
759 | 772 | | |
760 | 773 | | |
761 | 774 | | |
762 | | - | |
763 | 775 | | |
764 | 776 | | |
765 | 777 | | |
| |||
768 | 780 | | |
769 | 781 | | |
770 | 782 | | |
771 | | - | |
772 | | - | |
773 | | - | |
774 | 783 | | |
775 | 784 | | |
776 | 785 | | |
| |||
783 | 792 | | |
784 | 793 | | |
785 | 794 | | |
786 | | - | |
| 795 | + | |
| 796 | + | |
787 | 797 | | |
788 | 798 | | |
789 | 799 | | |
790 | 800 | | |
791 | 801 | | |
792 | | - | |
793 | 802 | | |
794 | 803 | | |
795 | 804 | | |
| |||
801 | 810 | | |
802 | 811 | | |
803 | 812 | | |
804 | | - | |
805 | | - | |
806 | | - | |
807 | 813 | | |
808 | 814 | | |
809 | 815 | | |
| |||
816 | 822 | | |
817 | 823 | | |
818 | 824 | | |
819 | | - | |
| 825 | + | |
| 826 | + | |
820 | 827 | | |
821 | 828 | | |
822 | 829 | | |
| |||
1043 | 1050 | | |
1044 | 1051 | | |
1045 | 1052 | | |
| 1053 | + | |
| 1054 | + | |
1046 | 1055 | | |
1047 | 1056 | | |
1048 | 1057 | | |
| |||
1057 | 1066 | | |
1058 | 1067 | | |
1059 | 1068 | | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
| 1134 | + | |
| 1135 | + | |
| 1136 | + | |
| 1137 | + | |
| 1138 | + | |
| 1139 | + | |
| 1140 | + | |
| 1141 | + | |
| 1142 | + | |
| 1143 | + | |
| 1144 | + | |
| 1145 | + | |
| 1146 | + | |
| 1147 | + | |
| 1148 | + | |
| 1149 | + | |
| 1150 | + | |
1060 | 1151 | | |
1061 | 1152 | | |
1062 | 1153 | | |
| |||
1122 | 1213 | | |
1123 | 1214 | | |
1124 | 1215 | | |
1125 | | - | |
| 1216 | + | |
| 1217 | + | |
| 1218 | + | |
| 1219 | + | |
| 1220 | + | |
| 1221 | + | |
| 1222 | + | |
| 1223 | + | |
| 1224 | + | |
| 1225 | + | |
| 1226 | + | |
| 1227 | + | |
1126 | 1228 | | |
1127 | 1229 | | |
1128 | 1230 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
515 | 515 | | |
516 | 516 | | |
517 | 517 | | |
| 518 | + | |
| 519 | + | |
518 | 520 | | |
519 | 521 | | |
520 | 522 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
867 | 867 | | |
868 | 868 | | |
869 | 869 | | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
870 | 873 | | |
871 | 874 | | |
872 | 875 | | |
873 | 876 | | |
874 | 877 | | |
875 | | - | |
| 878 | + | |
876 | 879 | | |
877 | 880 | | |
878 | 881 | | |
| |||
894 | 897 | | |
895 | 898 | | |
896 | 899 | | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
897 | 903 | | |
898 | 904 | | |
899 | 905 | | |
900 | 906 | | |
901 | 907 | | |
902 | | - | |
| 908 | + | |
903 | 909 | | |
904 | 910 | | |
905 | 911 | | |
| |||
0 commit comments