AngularAtlased. 22.2

Cap. 11Calitate & performanță50 / 75

Performanță — checklist

Ce chiar contează: OnPush + signals, track, @defer, lazy routes, imagini, bundle și hidratare.

În Angular modern, performanța bună vine mai ales din valorile implicite: OnPush, semnale, zoneless, rute lazy, @defer. Lista de mai jos e ce verifici când ceva e lent — în ordinea în care merită. Dacă aplicația devine mai lentă cu cât stă tabul deschis mai mult, de obicei nu e randarea, ci un memory leak.

Checklist

RANDARE
  [ ] Componente OnPush (implicit în v22) + stare în semnale
  [ ] @for cu track pe un id stabil (nu identitate pe date reîncărcate)
  [ ] Calcule în computed() / pipe pur, nu în metode apelate din template
  [ ] Liste foarte mari → virtual scroll (CDK ScrollingModule) sau paginare

ÎNCĂRCARE
  [ ] Toate paginile lazy (loadComponent / loadChildren)
  [ ] Componente grele sub fold → @defer (on viewport / interaction)
  [ ] Servicii grele, rar folosite → injectAsync() (v22)
  [ ] Imagini cu NgOptimizedImage (ngSrc, width/height, priority pe LCP)
  [ ] Bugete de bundle în angular.json; verifică ce intră cu source-map-explorer

SSR (dacă e cazul)
  [ ] Hidratare incrementală (implicită în v22) + @defer (hydrate on ...)
  [ ] Event replay pentru click-urile din timpul hidratării
  [ ] TransferCache pentru request-urile făcute pe server

track contează mai mult decât crezi

Când date reîncărcate de pe server ajung ca obiecte noi, track row (identitate) face ca Angular să considere fiecare rând „nou” și să distrugă/recreeze tot DOM-ul. Cu track row.id, refolosește rândurile existente și actualizează doar ce s-a schimbat.

Bonus: în dev mode, Angular detectează singur problema și afișează în consolă avertismentul NG0956 („track by identity caused re-creation of the entire collection”).

Live3000 de rânduri: track id vs track identitate
„Refetch” (obiecte NOI, aceleași id-uri) pentru 3000 rânduri:
Element 0239
Element 1877
Element 297
Element 3460
Element 4766
Element 5415
Element 6896
Element 7412
Element 8180
Element 9278
Element 10276
Element 11102
Element 12871
Element 13667
Element 14498
Element 15813
Element 165
Element 17216
Element 18312
Element 19490
Element 20678
Element 21574
Element 22276
Element 23213
Element 24834
Element 25535
Element 26179
Element 27287
Element 28321
Element 29785
Element 30209
Element 3168
Element 32845
Element 3351
Element 34462
Element 35312
Element 36554
Element 37769
Element 38611
Element 39365
Element 40514
Element 41220
Element 42703
Element 4339
Element 44513
Element 45447
Element 46408
Element 47653
Element 48890
Element 49255
Element 50496
Element 51113
Element 52538
Element 53977
Element 5454
Element 55993
Element 56656
Element 5743
Element 58463
Element 59355
Element 60585
Element 61201
Element 62852
Element 631
Element 64774
Element 65960
Element 66251
Element 67648
Element 68118
Element 69675
Element 70656
Element 71344
Element 72797
Element 73227
Element 74140
Element 7544
Element 76935
Element 77701
Element 78622
Element 79861
Element 80690
Element 81708
Element 82827
Element 83341
Element 84645
Element 85515
Element 86613
Element 87567
Element 88259
Element 89502
Element 90671
Element 91102
Element 92886
Element 93109
Element 94957
Element 9510
Element 96254
Element 9760
Element 98646
Element 99784
Element 100702
Element 101464
Element 102957
Element 103408
Element 104725
Element 105232
Element 106597
Element 107878
Element 108865
Element 109436
Element 110242
Element 111525
Element 112416
Element 113979
Element 114361
Element 11538
Element 116137
Element 117428
Element 118802
Element 119207
Element 120231
Element 121945
Element 122817
Element 12353
Element 124305
Element 125877
Element 126995
Element 127527
Element 128333
Element 129767
Element 130443
Element 13180
Element 132884
Element 133393
Element 134841
Element 135535
Element 136234
Element 137176
Element 138291
Element 139678
Element 140590
Element 141690
Element 142567
Element 143712
Element 144532
Element 1453
Element 146187
Element 147104
Element 148639
Element 149654
Element 150213
Element 151936
Element 152232
Element 153289
Element 15442
Element 155328
Element 156723
Element 157129
Element 158744
Element 159493
Element 160514
Element 161267
Element 162678
Element 163669
Element 16458
Element 165573
Element 166798
Element 167169
Element 168239
Element 169581
Element 170739
Element 171944
Element 17280
Element 173413
Element 174502
Element 175835
Element 176684
Element 177547
Element 178621
Element 179451
Element 180953
Element 181725
Element 182684
Element 183569
Element 184969
Element 185294
Element 186544
Element 187639
Element 188281
Element 189910
Element 19072
Element 191107
Element 192805
Element 19335
Element 194449
Element 195909
Element 196924
Element 197403
Element 198894
Element 199215
Element 200398
Element 20114
Element 202914
Element 203678
Element 204774
Element 205578
Element 206813
Element 207681
Element 208707
Element 209400
Element 210664
Element 211360
Element 212738
Element 213681
Element 214753
Element 215124
Element 216352
Element 21745
Element 218317
Element 219213
Element 220220
Element 221136
Element 2220
Element 223986
Element 224387
Element 225204
Element 226566
Element 227749
Element 228184
Element 22988
Element 230535
Element 231654
Element 232405
Element 233776
Element 234725
Element 235181
Element 236500
Element 237880
Element 238324
Element 23991
Element 240828
Element 241551
Element 242990
Element 243493
Element 244172
Element 245915
Element 246800
Element 247819
Element 248429
Element 249305
Element 250679
Element 251880
Element 252872
Element 253967
Element 254702
Element 255622
Element 256786
Element 257103
Element 258484
Element 259741
Element 260656
Element 261582
Element 262105
Element 263514
Element 26431
Element 265259
Element 266277
Element 267937
Element 268651
Element 269801
Element 270275
Element 271885
Element 272957
Element 273135
Element 274375
Element 275648
Element 276203
Element 277254
Element 278897
Element 279613
Element 280656
Element 281120
Element 282675
Element 283749
Element 28496
Element 285836
Element 286958
Element 287426
Element 288378
Element 289215
Element 290168
Element 291139
Element 29276
Element 293670
Element 294340
Element 295927
Element 296281
Element 297790
Element 298866
Element 299291
Element 300869
Element 30185
Element 302465
Element 303683
Element 304501
Element 305116
Element 306528
Element 307250
Element 308409
Element 309499
Element 310194
Element 311921
Element 312764
Element 313525
Element 314824
Element 315659
Element 31664
Element 317342
Element 318255
Element 319767
Element 320827
Element 321655
Element 322564
Element 323962
Element 324276
Element 325885
Element 326554
Element 327148
Element 328320
Element 329264
Element 330652
Element 331732
Element 332881
Element 333441
Element 33483
Element 335600
Element 336959
Element 337253
Element 338370
Element 339383
Element 340455
Element 341192
Element 342429
Element 343288
Element 344759
Element 345613
Element 346737
Element 347673
Element 34879
Element 349885
Element 350748
Element 351578
Element 352798
Element 353461
Element 354980
Element 355777
Element 356941
Element 357203
Element 358579
Element 359504
Element 360243
Element 361172
Element 362405
Element 3633
Element 364352
Element 365525
Element 366931
Element 367161
Element 36846
Element 369536
Element 370181
Element 371225
Element 372191
Element 373451
Element 374853
Element 375163
Element 376905
Element 377709
Element 378321
Element 379903
Element 3804
Element 381129
Element 382501
Element 383298
Element 384496
Element 385486
Element 38692
Element 387164
Element 388964
Element 389868
Element 39022
Element 391665
Element 392487
Element 393418
Element 394324
Element 395838
Element 396105
Element 39797
Element 398229
Element 399977
Element 400634
Element 401583
Element 402467
Element 403364
Element 404785
Element 405121
Element 406424
Element 40739
Element 408600
Element 409581
Element 410342
Element 411402
Element 412484
Element 413249
Element 414218
Element 415483
Element 416259
Element 417260
Element 418396
Element 419117
Element 420264
Element 421732
Element 422867
Element 423605
Element 424326
Element 425834
Element 426810
Element 427745
Element 42840
Element 429227
Element 430504
Element 431467
Element 432379
Element 433447
Element 434765
Element 435347
Element 436138
Element 437635
Element 438522
Element 439382
Element 4407
Element 441733
Element 442956
Element 443897
Element 444217
Element 445833
Element 446266
Element 447988
Element 448789
Element 449580
Element 450105
Element 451868
Element 452161
Element 453178
Element 454599
Element 455211
Element 456691
Element 457449
Element 458189
Element 459770
Element 460836
Element 461321
Element 462724
Element 463315
Element 464285
Element 465368
Element 46670
Element 467505
Element 468788
Element 469936
Element 470746
Element 471319
Element 472223
Element 473500
Element 474199
Element 475639
Element 476301
Element 47718
Element 478298
Element 479442
Element 480690
Element 48110
Element 482586
Element 483708
Element 484222
Element 485471
Element 486813
Element 487910
Element 488831
Element 489813
Element 490108
Element 491908
Element 492884
Element 493191
Element 494277
Element 495105
Element 496791
Element 497993
Element 49899
Element 499389
Element 500443
Element 501460
Element 502757
Element 503628
Element 504220
Element 50573
Element 506232
Element 507178
Element 508971
Element 509645
Element 510790
Element 51168
Element 512569
Element 513518
Element 514364
Element 515111
Element 516816
Element 517886
Element 518832
Element 519998
Element 520868
Element 521864
Element 522411
Element 523295
Element 524411
Element 525420
Element 5267
Element 527272
Element 528509
Element 529916
Element 53013
Element 531864
Element 532336
Element 533110
Element 534330
Element 535791
Element 536503
Element 537887
Element 538625
Element 539763
Element 540567
Element 541483
Element 542729
Element 543993
Element 54487
Element 545804
Element 546836
Element 547274
Element 548396
Element 549251
Element 550648
Element 551758
Element 552492
Element 553309
Element 554672
Element 555196
Element 556780
Element 557535
Element 558201
Element 559330
Element 560436
Element 561111
Element 562880
Element 563664
Element 564339
Element 56515
Element 566768
Element 567285
Element 568926
Element 569690
Element 570720
Element 571435
Element 572559
Element 573329
Element 574207
Element 575923
Element 576566
Element 577730
Element 578884
Element 579274
Element 580969
Element 58130
Element 582163
Element 583132
Element 584585
Element 585392
Element 58648
Element 587664
Element 588682
Element 589891
Element 590465
Element 59192
Element 592697
Element 593315
Element 59447
Element 595744
Element 59671
Element 597957
Element 598944
Element 599436
Element 600191
Element 601661
Element 602523
Element 603101
Element 604886
Element 605873
Element 606890
Element 607799
Element 608549
Element 609825
Element 610753
Element 611997
Element 612649
Element 613949
Element 614854
Element 615578
Element 616860
Element 617288
Element 618911
Element 619226
Element 620247
Element 621193
Element 622378
Element 623314
Element 624280
Element 625764
Element 626401
Element 627123
Element 628661
Element 62925
Element 63090
Element 631911
Element 632966
Element 633845
Element 634988
Element 63516
Element 636406
Element 637244
Element 638374
Element 639382
Element 640454
Element 641180
Element 642239
Element 643656
Element 644523
Element 645533
Element 646353
Element 647266
Element 648102
Element 649972
Element 650311
Element 651292
Element 652730
Element 653935
Element 654909
Element 655113
Element 656169
Element 657339
Element 658225
Element 659960
Element 660297
Element 661410
Element 662409
Element 663393
Element 664453
Element 665748
Element 66673
Element 667649
Element 668196
Element 66933
Element 670608
Element 671690
Element 672858
Element 673447
Element 674374
Element 675725
Element 676343
Element 67783
Element 678741
Element 679738
Element 680917
Element 681987
Element 682386
Element 683249
Element 684405
Element 685400
Element 686679
Element 687556
Element 688432
Element 689630
Element 690663
Element 691985
Element 69290
Element 693335
Element 694242
Element 695820
Element 69635
Element 69725
Element 698963
Element 699192
Element 7003
Element 701381
Element 702857
Element 70321
Element 70474
Element 705892
Element 706853
Element 707753
Element 708557
Element 7094
Element 710876
Element 711241
Element 712153
Element 713439
Element 714922
Element 71553
Element 716454
Element 717304
Element 718146
Element 719661
Element 720442
Element 721784
Element 72279
Element 723300
Element 724840
Element 725305
Element 726507
Element 727639
Element 728353
Element 729171
Element 730850
Element 731844
Element 73277
Element 733348
Element 734443
Element 73527
Element 736732
Element 737796
Element 738438
Element 739870
Element 740771
Element 741658
Element 742301
Element 743670
Element 744290
Element 745731
Element 746776
Element 74798
Element 748379
Element 749671
Element 750726
Element 751620
Element 752931
Element 753550
Element 754820
Element 75590
Element 756841
Element 757389
Element 758984
Element 759400
Element 760659
Element 761173
Element 762407
Element 763768
Element 764354
Element 765464
Element 766685
Element 767121
Element 768311
Element 769525
Element 770448
Element 771592
Element 77215
Element 773640
Element 774198
Element 775241
Element 776278
Element 777190
Element 778989
Element 779257
Element 780407
Element 781867
Element 78217
Element 783431
Element 784856
Element 785377
Element 786696
Element 787804
Element 788778
Element 789819
Element 79063
Element 791907
Element 792858
Element 793511
Element 794450
Element 79550
Element 796441
Element 797599
Element 798188
Element 79932
Element 800756
Element 801531
Element 802137
Element 803756
Element 804707
Element 805235
Element 806286
Element 8073
Element 808733
Element 80972
Element 810665
Element 81113
Element 812839
Element 813691
Element 814629
Element 815981
Element 816720
Element 81766
Element 818880
Element 819590
Element 82037
Element 821984
Element 822448
Element 823313
Element 824820
Element 825616
Element 826352
Element 827505
Element 828888
Element 829644
Element 830126
Element 831625
Element 832126
Element 833320
Element 834945
Element 835658
Element 836691
Element 837110
Element 838840
Element 839866
Element 840213
Element 841514
Element 842446
Element 8438
Element 844878
Element 845666
Element 846339
Element 847255
Element 848979
Element 849490
Element 850702
Element 851335
Element 852820
Element 853717
Element 854590
Element 855497
Element 856567
Element 857743
Element 858471
Element 859641
Element 860787
Element 861551
Element 862523
Element 863986
Element 864440
Element 865893
Element 866352
Element 867988
Element 86844
Element 869853
Element 870900
Element 871825
Element 872397
Element 873977
Element 87464
Element 875148
Element 876615
Element 877415
Element 878988
Element 87944
Element 880756
Element 881838
Element 88273
Element 883425
Element 884585
Element 885128
Element 886327
Element 887949
Element 888480
Element 889705
Element 890790
Element 891269
Element 892799
Element 893269
Element 894793
Element 895570
Element 896201
Element 897478
Element 898618
Element 899938
Element 900407
Element 901874
Element 902664
Element 903689
Element 9048
Element 90533
Element 906179
Element 907129
Element 908566
Element 909105
Element 910932
Element 91173
Element 9127
Element 913592
Element 914344
Element 915944
Element 916943
Element 917514
Element 918156
Element 919956
Element 920487
Element 921347
Element 922480
Element 923361
Element 924907
Element 925775
Element 926826
Element 927300
Element 928423
Element 929647
Element 930610
Element 93129
Element 932403
Element 933713
Element 934195
Element 935614
Element 936595
Element 937681
Element 938757
Element 939511
Element 940626
Element 941231
Element 942475
Element 943380
Element 944481
Element 945714
Element 946771
Element 947763
Element 94895
Element 94940
Element 950404
Element 951441
Element 952264
Element 953108
Element 954496
Element 95528
Element 956145
Element 95793
Element 958145
Element 959923
Element 960994
Element 961627
Element 962327
Element 963404
Element 964312
Element 965768
Element 966637
Element 967228
Element 968826
Element 969474
Element 970149
Element 971836
Element 972805
Element 97373
Element 974813
Element 975816
Element 976558
Element 9775
Element 97867
Element 979166
Element 98017
Element 981956
Element 982504
Element 983804
Element 984178
Element 985595
Element 986708
Element 987319
Element 988487
Element 989288
Element 990143
Element 991509
Element 992356
Element 993651
Element 994935
Element 995849
Element 996530
Element 997432
Element 998356
Element 999581
Element 1000401
Element 1001721
Element 1002356
Element 1003638
Element 1004368
Element 1005468
Element 1006356
Element 1007861
Element 1008609
Element 1009747
Element 1010488
Element 101163
Element 101276
Element 1013149
Element 101418
Element 101512
Element 1016759
Element 1017406
Element 1018204
Element 1019480
Element 1020304
Element 1021847
Element 1022200
Element 1023395
Element 102425
Element 1025390
Element 1026455
Element 1027330
Element 1028422
Element 102927
Element 1030902
Element 1031732
Element 1032744
Element 1033210
Element 1034694
Element 1035663
Element 1036459
Element 1037904
Element 1038593
Element 1039561
Element 1040501
Element 1041439
Element 104296
Element 1043569
Element 1044776
Element 1045400
Element 1046195
Element 1047499
Element 1048333
Element 1049745
Element 1050259
Element 1051645
Element 1052253
Element 1053755
Element 1054139
Element 1055963
Element 1056631
Element 1057955
Element 1058173
Element 105998
Element 1060170
Element 1061213
Element 1062129
Element 1063470
Element 1064129
Element 1065436
Element 1066961
Element 1067507
Element 1068612
Element 1069115
Element 1070860
Element 1071338
Element 1072399
Element 1073908
Element 10741
Element 1075482
Element 1076354
Element 1077369
Element 1078809
Element 1079574
Element 1080497
Element 1081768
Element 1082112
Element 1083265
Element 1084534
Element 1085607
Element 1086160
Element 1087301
Element 1088165
Element 108934
Element 1090157
Element 1091509
Element 1092419
Element 1093531
Element 1094343
Element 1095342
Element 1096498
Element 1097202
Element 1098268
Element 1099979
Element 1100863
Element 1101452
Element 1102481
Element 1103226
Element 1104907
Element 1105952
Element 1106504
Element 1107629
Element 1108691
Element 1109356
Element 1110629
Element 1111538
Element 111275
Element 1113467
Element 1114189
Element 111545
Element 1116946
Element 1117775
Element 1118679
Element 1119465
Element 1120150
Element 1121575
Element 1122343
Element 1123642
Element 1124626
Element 1125169
Element 1126683
Element 1127160
Element 1128744
Element 112969
Element 113014
Element 1131763
Element 1132692
Element 1133922
Element 1134267
Element 113574
Element 1136164
Element 1137336
Element 1138981
Element 113986
Element 1140742
Element 1141663
Element 1142756
Element 1143347
Element 1144326
Element 1145813
Element 1146742
Element 1147458
Element 1148955
Element 1149517
Element 1150112
Element 1151580
Element 1152744
Element 1153976
Element 1154126
Element 1155978
Element 1156402
Element 1157568
Element 1158897
Element 1159197
Element 1160648
Element 1161519
Element 1162243
Element 1163540
Element 1164664
Element 1165198
Element 1166783
Element 1167372
Element 1168244
Element 1169462
Element 1170519
Element 1171809
Element 1172929
Element 1173652
Element 1174302
Element 117540
Element 1176251
Element 1177660
Element 1178496
Element 1179682
Element 1180835
Element 1181581
Element 1182793
Element 1183585
Element 1184895
Element 1185887
Element 1186512
Element 1187140
Element 1188885
Element 1189839
Element 1190959
Element 1191761
Element 1192781
Element 1193923
Element 1194839
Element 119549
Element 1196638
Element 1197534
Element 1198374
Element 1199725
Element 1200557
Element 1201997
Element 1202601
Element 1203320
Element 1204426
Element 1205634
Element 1206668
Element 1207760
Element 1208175
Element 1209418
Element 1210840
Element 1211124
Element 1212903
Element 1213524
Element 1214283
Element 1215565
Element 1216129
Element 1217114
Element 1218811
Element 1219549
Element 1220846
Element 1221307
Element 1222383
Element 1223285
Element 1224843
Element 1225680
Element 12268
Element 1227614
Element 1228499
Element 1229121
Element 1230996
Element 1231678
Element 1232229
Element 1233592
Element 1234935
Element 1235191
Element 1236796
Element 1237345
Element 1238818
Element 1239888
Element 1240253
Element 1241148
Element 1242128
Element 1243582
Element 1244835
Element 1245199
Element 124631
Element 1247425
Element 1248761
Element 1249601
Element 1250395
Element 1251516
Element 1252907
Element 1253838
Element 1254441
Element 1255581
Element 1256885
Element 1257267
Element 1258780
Element 1259927
Element 1260183
Element 1261295
Element 1262902
Element 1263773
Element 1264491
Element 1265606
Element 1266673
Element 1267685
Element 1268312
Element 1269685
Element 1270762
Element 1271930
Element 127287
Element 1273404
Element 1274487
Element 1275251
Element 127662
Element 1277387
Element 1278398
Element 1279961
Element 1280172
Element 128140
Element 1282454
Element 1283466
Element 1284640
Element 1285297
Element 1286915
Element 128726
Element 1288729
Element 12897
Element 129018
Element 1291241
Element 129213
Element 1293920
Element 1294364
Element 1295158
Element 1296391
Element 129799
Element 129899
Element 1299928
Element 1300609
Element 1301976
Element 1302645
Element 1303714
Element 1304659
Element 1305413
Element 1306285
Element 1307630
Element 1308569
Element 1309656
Element 1310137
Element 1311679
Element 1312146
Element 1313671
Element 1314125
Element 1315756
Element 131655
Element 1317932
Element 1318687
Element 1319940
Element 1320370
Element 1321874
Element 1322384
Element 1323641
Element 1324607
Element 1325715
Element 1326954
Element 132711
Element 1328709
Element 1329521
Element 1330538
Element 1331652
Element 1332981
Element 1333481
Element 133423
Element 1335658
Element 1336157
Element 1337519
Element 1338440
Element 1339860
Element 1340800
Element 1341708
Element 1342100
Element 1343618
Element 1344897
Element 1345228
Element 134665
Element 1347755
Element 1348761
Element 1349650
Element 1350208
Element 135171
Element 1352206
Element 1353844
Element 135483
Element 1355902
Element 1356361
Element 1357360
Element 135875
Element 1359244
Element 1360947
Element 1361291
Element 1362723
Element 1363348
Element 1364430
Element 1365629
Element 1366748
Element 1367932
Element 1368313
Element 1369528
Element 137056
Element 1371350
Element 1372257
Element 1373217
Element 1374637
Element 1375202
Element 1376933
Element 1377323
Element 1378729
Element 137929
Element 138095
Element 1381367
Element 1382748
Element 1383172
Element 1384926
Element 138548
Element 1386461
Element 1387706
Element 1388251
Element 1389552
Element 1390436
Element 1391689
Element 1392791
Element 1393383
Element 1394689
Element 139518
Element 1396998
Element 1397834
Element 139811
Element 1399767
Element 1400995
Element 1401973
Element 1402145
Element 1403737
Element 1404305
Element 140512
Element 1406183
Element 140727
Element 1408446
Element 1409720
Element 1410795
Element 1411541
Element 1412189
Element 1413938
Element 1414601
Element 1415362
Element 1416645
Element 1417370
Element 1418663
Element 1419909
Element 1420424
Element 1421716
Element 1422873
Element 1423137
Element 1424403
Element 1425684
Element 1426951
Element 1427136
Element 1428944
Element 1429423
Element 1430745
Element 1431455
Element 143274
Element 1433595
Element 1434890
Element 1435164
Element 1436967
Element 143761
Element 1438994
Element 1439754
Element 144038
Element 1441150
Element 1442760
Element 1443844
Element 1444963
Element 1445913
Element 1446588
Element 1447304
Element 1448610
Element 1449883
Element 1450761
Element 1451249
Element 1452293
Element 1453923
Element 1454289
Element 1455991
Element 1456740
Element 1457890
Element 1458562
Element 1459319
Element 1460612
Element 1461573
Element 1462897
Element 1463941
Element 1464922
Element 1465809
Element 1466425
Element 1467789
Element 146881
Element 1469407
Element 1470167
Element 1471562
Element 1472587
Element 1473966
Element 1474174
Element 1475826
Element 1476824
Element 1477287
Element 1478889
Element 1479544
Element 1480138
Element 14814
Element 1482731
Element 1483961
Element 1484805
Element 1485569
Element 1486889
Element 148767
Element 1488288
Element 1489388
Element 1490185
Element 1491557
Element 1492209
Element 1493290
Element 1494577
Element 149523
Element 1496747
Element 1497178
Element 1498914
Element 1499840
Element 1500986
Element 1501479
Element 1502814
Element 1503595
Element 1504375
Element 1505467
Element 1506610
Element 1507947
Element 1508906
Element 1509973
Element 1510586
Element 1511342
Element 1512231
Element 1513353
Element 1514553
Element 1515124
Element 1516618
Element 1517209
Element 1518640
Element 1519165
Element 1520714
Element 1521691
Element 1522691
Element 1523788
Element 1524795
Element 1525628
Element 1526881
Element 1527836
Element 1528136
Element 1529680
Element 1530251
Element 1531530
Element 153284
Element 1533489
Element 153499
Element 1535710
Element 1536727
Element 1537916
Element 1538771
Element 1539155
Element 1540987
Element 1541645
Element 1542723
Element 1543390
Element 1544614
Element 1545280
Element 1546538
Element 1547410
Element 1548903
Element 1549828
Element 1550362
Element 155144
Element 1552832
Element 1553750
Element 1554839
Element 1555583
Element 1556627
Element 1557234
Element 1558834
Element 1559256
Element 1560113
Element 1561831
Element 1562996
Element 1563427
Element 1564874
Element 1565229
Element 1566566
Element 1567858
Element 1568439
Element 1569174
Element 1570953
Element 1571770
Element 1572589
Element 1573387
Element 1574109
Element 1575152
Element 157614
Element 157789
Element 1578721
Element 1579165
Element 1580440
Element 1581136
Element 1582773
Element 1583886
Element 1584417
Element 1585784
Element 1586268
Element 158786
Element 1588107
Element 1589586
Element 159024
Element 1591943
Element 1592655
Element 1593742
Element 1594431
Element 1595988
Element 1596228
Element 1597724
Element 1598896
Element 1599908
Element 160031
Element 1601876
Element 16023
Element 16035
Element 1604699
Element 1605263
Element 1606456
Element 1607404
Element 1608673
Element 1609923
Element 1610497
Element 1611678
Element 1612490
Element 1613176
Element 1614892
Element 1615384
Element 1616409
Element 1617311
Element 1618115
Element 1619464
Element 1620788
Element 1621168
Element 1622626
Element 1623631
Element 162428
Element 1625152
Element 1626641
Element 1627865
Element 1628183
Element 1629492
Element 1630565
Element 1631259
Element 1632413
Element 1633179
Element 1634922
Element 1635719
Element 1636726
Element 1637636
Element 1638963
Element 16398
Element 1640575
Element 1641896
Element 164231
Element 1643543
Element 164411
Element 1645314
Element 1646194
Element 1647543
Element 1648298
Element 164973
Element 1650150
Element 1651163
Element 165275
Element 1653760
Element 1654640
Element 1655673
Element 1656235
Element 1657302
Element 1658829
Element 1659608
Element 1660422
Element 1661598
Element 1662684
Element 1663356
Element 1664702
Element 1665318
Element 1666152
Element 166715
Element 1668535
Element 1669749
Element 1670261
Element 1671472
Element 1672350
Element 1673757
Element 1674445
Element 1675179
Element 1676733
Element 1677898
Element 1678154
Element 1679230
Element 168052
Element 1681819
Element 1682675
Element 168367
Element 1684825
Element 1685817
Element 1686772
Element 1687857
Element 1688565
Element 1689135
Element 1690635
Element 1691717
Element 1692904
Element 1693642
Element 1694947
Element 1695943
Element 1696315
Element 169789
Element 1698101
Element 169922
Element 1700320
Element 1701781
Element 1702639
Element 1703169
Element 1704766
Element 170589
Element 1706301
Element 1707547
Element 17083
Element 170976
Element 1710408
Element 1711720
Element 1712939
Element 1713140
Element 1714849
Element 1715839
Element 1716627
Element 1717830
Element 1718747
Element 1719470
Element 1720223
Element 1721972
Element 1722485
Element 1723107
Element 1724730
Element 1725225
Element 1726923
Element 1727544
Element 1728192
Element 1729357
Element 1730660
Element 1731334
Element 1732473
Element 1733251
Element 1734297
Element 1735119
Element 1736101
Element 1737348
Element 1738727
Element 1739544
Element 1740130
Element 174176
Element 1742570
Element 174322
Element 174471
Element 1745827
Element 1746562
Element 1747276
Element 1748578
Element 1749546
Element 1750824
Element 1751560
Element 1752754
Element 1753963
Element 1754373
Element 1755833
Element 1756916
Element 1757348
Element 1758507
Element 1759780
Element 1760623
Element 1761231
Element 1762487
Element 1763861
Element 1764573
Element 1765303
Element 1766237
Element 1767170
Element 1768382
Element 1769245
Element 1770424
Element 1771663
Element 1772849
Element 1773380
Element 1774291
Element 1775488
Element 1776903
Element 1777475
Element 1778168
Element 1779359
Element 178062
Element 1781346
Element 1782988
Element 178348
Element 1784426
Element 1785144
Element 1786716
Element 1787495
Element 1788845
Element 1789512
Element 1790930
Element 1791553
Element 1792877
Element 1793952
Element 1794337
Element 1795118
Element 1796726
Element 1797880
Element 1798891
Element 1799476
Element 1800943
Element 1801331
Element 1802353
Element 1803718
Element 1804981
Element 1805507
Element 1806374
Element 1807158
Element 1808334
Element 1809760
Element 1810258
Element 1811934
Element 1812498
Element 1813291
Element 1814654
Element 1815677
Element 1816984
Element 1817485
Element 181818
Element 1819589
Element 1820671
Element 1821626
Element 1822271
Element 182373
Element 1824770
Element 1825234
Element 1826717
Element 182729
Element 1828978
Element 1829618
Element 1830138
Element 1831108
Element 1832232
Element 1833653
Element 1834676
Element 1835605
Element 1836220
Element 1837128
Element 1838100
Element 1839825
Element 1840586
Element 1841870
Element 1842946
Element 1843305
Element 1844802
Element 1845551
Element 1846475
Element 1847702
Element 1848566
Element 1849532
Element 1850590
Element 1851885
Element 1852338
Element 1853596
Element 1854959
Element 1855886
Element 1856398
Element 1857439
Element 1858380
Element 1859811
Element 1860514
Element 1861685
Element 1862927
Element 1863526
Element 186487
Element 1865607
Element 1866791
Element 1867112
Element 1868750
Element 1869966
Element 1870845
Element 1871552
Element 1872177
Element 1873109
Element 1874323
Element 1875726
Element 1876531
Element 1877210
Element 1878542
Element 1879553
Element 1880585
Element 188130
Element 1882997
Element 1883478
Element 1884747
Element 1885772
Element 1886579
Element 18872
Element 1888881
Element 1889859
Element 1890377
Element 1891329
Element 1892762
Element 1893697
Element 1894788
Element 189580
Element 1896538
Element 1897401
Element 1898122
Element 1899631
Element 1900764
Element 1901808
Element 1902884
Element 1903781
Element 1904968
Element 190542
Element 1906819
Element 1907906
Element 1908831
Element 1909953
Element 1910875
Element 1911605
Element 191235
Element 1913322
Element 1914846
Element 191512
Element 1916628
Element 1917621
Element 1918870
Element 1919894
Element 1920682
Element 192177
Element 1922754
Element 1923977
Element 1924212
Element 1925226
Element 1926650
Element 1927296
Element 1928234
Element 1929670
Element 1930400
Element 1931447
Element 1932949
Element 1933344
Element 1934449
Element 1935392
Element 193629
Element 1937256
Element 1938985
Element 193964
Element 1940477
Element 1941488
Element 1942376
Element 1943912
Element 1944418
Element 1945529
Element 1946339
Element 1947786
Element 1948738
Element 1949696
Element 19505
Element 1951604
Element 1952146
Element 195338
Element 1954100
Element 1955614
Element 1956764
Element 1957197
Element 1958687
Element 1959126
Element 1960371
Element 1961476
Element 1962458
Element 1963887
Element 1964573
Element 196571
Element 1966810
Element 1967430
Element 1968309
Element 1969148
Element 1970436
Element 1971836
Element 1972392
Element 1973276
Element 1974619
Element 1975753
Element 1976282
Element 1977365
Element 1978768
Element 1979789
Element 1980771
Element 1981653
Element 198289
Element 1983665
Element 1984239
Element 1985597
Element 198611
Element 1987897
Element 1988349
Element 1989778
Element 1990206
Element 1991440
Element 199261
Element 1993868
Element 1994105
Element 1995725
Element 199637
Element 1997916
Element 1998446
Element 1999419
Element 2000820
Element 2001246
Element 2002153
Element 2003817
Element 2004572
Element 2005690
Element 2006561
Element 2007514
Element 2008998
Element 2009562
Element 2010926
Element 2011993
Element 2012559
Element 2013128
Element 2014699
Element 2015556
Element 2016588
Element 2017630
Element 2018292
Element 201946
Element 2020867
Element 2021353
Element 2022691
Element 2023619
Element 2024896
Element 2025534
Element 2026257
Element 2027870
Element 2028969
Element 2029341
Element 2030103
Element 2031610
Element 2032350
Element 203330
Element 2034533
Element 2035994
Element 2036300
Element 2037819
Element 2038287
Element 2039899
Element 2040590
Element 2041587
Element 2042289
Element 2043878
Element 2044236
Element 204554
Element 2046108
Element 2047874
Element 2048299
Element 204963
Element 205064
Element 2051421
Element 2052185
Element 2053320
Element 2054102
Element 2055815
Element 2056895
Element 2057365
Element 2058789
Element 2059436
Element 2060515
Element 2061152
Element 2062258
Element 2063506
Element 2064661
Element 2065592
Element 2066787
Element 2067762
Element 206856
Element 2069152
Element 2070689
Element 2071618
Element 2072758
Element 2073269
Element 2074614
Element 2075111
Element 2076463
Element 2077198
Element 2078145
Element 2079820
Element 2080472
Element 2081183
Element 2082595
Element 2083364
Element 2084995
Element 2085496
Element 2086732
Element 2087759
Element 2088834
Element 2089760
Element 2090881
Element 2091891
Element 2092842
Element 2093328
Element 2094513
Element 209533
Element 2096109
Element 2097960
Element 209830
Element 2099887
Element 2100454
Element 210187
Element 2102512
Element 210395
Element 2104471
Element 2105179
Element 2106610
Element 2107248
Element 2108850
Element 2109260
Element 2110111
Element 2111333
Element 2112325
Element 211351
Element 2114374
Element 2115413
Element 2116636
Element 2117987
Element 2118992
Element 2119759
Element 2120344
Element 2121154
Element 2122875
Element 2123140
Element 2124931
Element 2125999
Element 2126869
Element 2127224
Element 212877
Element 2129684
Element 2130224
Element 2131444
Element 2132994
Element 2133918
Element 2134570
Element 2135126
Element 2136259
Element 2137461
Element 2138149
Element 2139444
Element 2140672
Element 2141922
Element 2142907
Element 2143921
Element 2144564
Element 2145369
Element 214645
Element 21474
Element 2148563
Element 2149622
Element 2150731
Element 2151925
Element 2152881
Element 2153466
Element 2154633
Element 2155788
Element 2156603
Element 2157353
Element 2158626
Element 2159325
Element 2160179
Element 2161921
Element 2162104
Element 2163852
Element 2164834
Element 2165817
Element 2166862
Element 2167838
Element 2168970
Element 2169506
Element 2170863
Element 2171188
Element 2172174
Element 2173921
Element 2174817
Element 2175829
Element 2176454
Element 2177476
Element 217856
Element 2179366
Element 2180636
Element 218131
Element 2182505
Element 2183558
Element 218484
Element 218586
Element 2186605
Element 2187637
Element 2188431
Element 2189492
Element 2190351
Element 2191476
Element 219294
Element 2193271
Element 2194884
Element 2195526
Element 2196295
Element 2197166
Element 2198674
Element 2199284
Element 2200466
Element 2201834
Element 2202558
Element 2203145
Element 220450
Element 2205928
Element 2206568
Element 2207205
Element 2208576
Element 2209265
Element 2210536
Element 2211425
Element 2212771
Element 2213663
Element 2214716
Element 2215796
Element 2216851
Element 2217397
Element 2218108
Element 2219160
Element 222031
Element 2221860
Element 2222569
Element 22237
Element 2224116
Element 2225316
Element 2226258
Element 2227985
Element 2228595
Element 2229884
Element 2230872
Element 2231686
Element 223259
Element 2233218
Element 2234878
Element 223552
Element 2236527
Element 2237107
Element 2238373
Element 2239476
Element 2240729
Element 224116
Element 2242272
Element 2243811
Element 2244626
Element 2245391
Element 2246159
Element 2247942
Element 2248127
Element 2249580
Element 2250604
Element 225197
Element 2252856
Element 2253996
Element 2254649
Element 225531
Element 2256162
Element 2257477
Element 2258534
Element 2259535
Element 2260368
Element 2261699
Element 2262859
Element 2263589
Element 2264655
Element 2265846
Element 2266405
Element 2267829
Element 2268530
Element 2269686
Element 2270262
Element 2271232
Element 2272949
Element 2273693
Element 2274831
Element 2275438
Element 2276410
Element 227767
Element 2278515
Element 2279971
Element 2280952
Element 228191
Element 2282754
Element 2283436
Element 2284909
Element 2285174
Element 2286894
Element 2287108
Element 228859
Element 2289251
Element 2290971
Element 2291621
Element 2292692
Element 2293394
Element 2294322
Element 2295563
Element 2296530
Element 2297704
Element 229811
Element 2299316
Element 2300870
Element 2301224
Element 2302413
Element 2303483
Element 2304268
Element 2305189
Element 2306135
Element 2307338
Element 2308785
Element 2309104
Element 2310405
Element 2311548
Element 2312592
Element 2313896
Element 2314177
Element 231578
Element 2316916
Element 2317632
Element 2318771
Element 2319489
Element 2320197
Element 2321513
Element 2322419
Element 2323161
Element 2324419
Element 2325386
Element 2326359
Element 2327274
Element 2328923
Element 2329605
Element 2330399
Element 2331798
Element 2332869
Element 2333655
Element 2334890
Element 233547
Element 2336256
Element 233728
Element 2338872
Element 2339405
Element 2340726
Element 2341461
Element 2342379
Element 2343591
Element 2344719
Element 2345246
Element 2346639
Element 2347112
Element 2348122
Element 2349800
Element 2350162
Element 2351261
Element 2352100
Element 2353526
Element 2354289
Element 2355621
Element 2356809
Element 2357679
Element 2358785
Element 2359594
Element 2360552
Element 2361242
Element 2362345
Element 2363507
Element 2364159
Element 236536
Element 2366100
Element 2367586
Element 23684
Element 2369971
Element 2370160
Element 2371697
Element 2372624
Element 237326
Element 2374840
Element 2375236
Element 2376900
Element 2377288
Element 237843
Element 2379599
Element 2380139
Element 2381346
Element 2382243
Element 238378
Element 2384814
Element 2385189
Element 2386432
Element 2387926
Element 2388654
Element 2389178
Element 2390344
Element 2391376
Element 2392712
Element 2393223
Element 2394713
Element 2395814
Element 2396979
Element 239793
Element 2398435
Element 2399706
Element 2400649
Element 240166
Element 2402902
Element 2403686
Element 2404524
Element 2405480
Element 2406345
Element 2407972
Element 2408221
Element 2409190
Element 2410332
Element 2411638
Element 2412441
Element 241317
Element 2414984
Element 2415831
Element 2416857
Element 2417866
Element 2418217
Element 241993
Element 2420765
Element 2421329
Element 2422757
Element 242334
Element 2424698
Element 2425937
Element 2426426
Element 2427805
Element 2428149
Element 2429267
Element 2430164
Element 2431146
Element 2432860
Element 2433342
Element 2434877
Element 2435327
Element 2436548
Element 2437850
Element 2438889
Element 2439626
Element 244094
Element 2441337
Element 24423
Element 2443198
Element 2444689
Element 2445301
Element 2446577
Element 2447497
Element 2448360
Element 2449561
Element 2450668
Element 2451728
Element 2452304
Element 2453492
Element 2454991
Element 2455554
Element 2456710
Element 2457795
Element 2458992
Element 2459639
Element 2460478
Element 2461742
Element 2462687
Element 2463891
Element 2464242
Element 2465921
Element 2466935
Element 2467454
Element 2468513
Element 2469622
Element 2470807
Element 247165
Element 2472609
Element 2473529
Element 2474394
Element 2475716
Element 2476498
Element 2477678
Element 2478873
Element 2479582
Element 2480830
Element 2481113
Element 2482526
Element 2483250
Element 2484162
Element 248571
Element 2486436
Element 2487686
Element 2488396
Element 2489225
Element 2490520
Element 2491779
Element 2492196
Element 2493693
Element 2494354
Element 2495189
Element 2496140
Element 2497287
Element 2498551
Element 2499364
Element 2500495
Element 250113
Element 2502471
Element 250360
Element 2504454
Element 2505277
Element 2506383
Element 2507982
Element 2508198
Element 2509654
Element 2510522
Element 251154
Element 2512241
Element 2513414
Element 2514569
Element 2515329
Element 2516825
Element 2517873
Element 2518952
Element 2519680
Element 2520553
Element 2521260
Element 2522967
Element 2523557
Element 2524729
Element 2525153
Element 2526189
Element 2527972
Element 2528999
Element 2529352
Element 2530353
Element 2531383
Element 2532635
Element 2533633
Element 2534210
Element 2535168
Element 2536720
Element 2537863
Element 2538552
Element 2539204
Element 2540143
Element 2541464
Element 2542445
Element 2543550
Element 2544567
Element 2545958
Element 2546112
Element 2547405
Element 2548357
Element 254926
Element 2550852
Element 255154
Element 2552554
Element 2553255
Element 2554559
Element 2555425
Element 2556393
Element 2557605
Element 2558864
Element 2559926
Element 2560913
Element 2561541
Element 2562483
Element 2563274
Element 2564933
Element 2565764
Element 2566433
Element 2567263
Element 2568863
Element 2569885
Element 2570397
Element 2571353
Element 2572734
Element 2573107
Element 2574447
Element 2575655
Element 2576482
Element 2577774
Element 257821
Element 2579726
Element 2580340
Element 2581518
Element 2582359
Element 2583641
Element 2584493
Element 2585252
Element 2586737
Element 2587341
Element 2588433
Element 2589528
Element 2590980
Element 2591498
Element 2592351
Element 2593135
Element 2594729
Element 259562
Element 2596910
Element 2597773
Element 2598283
Element 2599128
Element 2600332
Element 2601401
Element 2602448
Element 2603779
Element 2604945
Element 260575
Element 2606802
Element 2607415
Element 2608170
Element 2609627
Element 2610234
Element 2611803
Element 2612415
Element 2613151
Element 2614474
Element 2615511
Element 2616110
Element 2617748
Element 2618262
Element 2619356
Element 2620312
Element 2621664
Element 262232
Element 2623349
Element 2624826
Element 2625798
Element 2626650
Element 2627821
Element 2628959
Element 2629486
Element 2630554
Element 2631164
Element 263249
Element 2633541
Element 2634562
Element 2635439
Element 2636141
Element 2637753
Element 2638790
Element 2639159
Element 2640631
Element 2641213
Element 2642443
Element 2643841
Element 2644825
Element 2645630
Element 2646348
Element 2647218
Element 2648947
Element 264987
Element 2650348
Element 2651364
Element 2652350
Element 2653314
Element 2654673
Element 2655587
Element 2656840
Element 2657964
Element 2658395
Element 2659945
Element 2660688
Element 2661314
Element 2662749
Element 266372
Element 2664344
Element 2665607
Element 2666750
Element 2667367
Element 2668131
Element 2669433
Element 2670104
Element 2671256
Element 2672112
Element 2673336
Element 2674703
Element 2675705
Element 2676570
Element 2677880
Element 2678180
Element 2679140
Element 2680513
Element 2681813
Element 2682410
Element 2683307
Element 2684242
Element 2685133
Element 2686298
Element 268728
Element 2688658
Element 2689868
Element 269012
Element 2691581
Element 2692364
Element 2693920
Element 2694345
Element 2695545
Element 2696123
Element 2697401
Element 2698486
Element 2699111
Element 2700275
Element 2701572
Element 2702835
Element 2703451
Element 270473
Element 270533
Element 2706762
Element 2707391
Element 2708101
Element 2709665
Element 2710646
Element 271150
Element 2712175
Element 2713928
Element 2714257
Element 2715725
Element 2716926
Element 2717579
Element 2718973
Element 2719111
Element 2720427
Element 2721577
Element 2722290
Element 2723514
Element 2724546
Element 2725998
Element 2726799
Element 2727106
Element 2728421
Element 2729263
Element 273043
Element 2731956
Element 2732182
Element 2733791
Element 2734433
Element 2735608
Element 2736908
Element 2737371
Element 2738765
Element 273919
Element 2740372
Element 2741136
Element 2742639
Element 2743306
Element 2744389
Element 274521
Element 2746351
Element 2747849
Element 2748736
Element 2749335
Element 2750161
Element 2751125
Element 2752840
Element 275355
Element 2754908
Element 275579
Element 2756164
Element 2757796
Element 2758215
Element 2759467
Element 27606
Element 27613
Element 2762488
Element 27631
Element 2764125
Element 276544
Element 276613
Element 2767525
Element 2768269
Element 2769388
Element 2770216
Element 2771929
Element 2772682
Element 2773875
Element 2774310
Element 2775150
Element 2776597
Element 2777467
Element 2778384
Element 2779932
Element 2780916
Element 2781772
Element 2782361
Element 2783903
Element 278419
Element 2785863
Element 2786171
Element 2787633
Element 2788185
Element 2789179
Element 2790899
Element 2791331
Element 279293
Element 2793431
Element 2794269
Element 2795445
Element 27963
Element 2797964
Element 2798917
Element 2799987
Element 2800930
Element 280124
Element 2802346
Element 2803418
Element 2804533
Element 2805504
Element 2806738
Element 2807448
Element 2808529
Element 2809400
Element 2810278
Element 2811732
Element 2812915
Element 2813281
Element 2814212
Element 2815710
Element 2816895
Element 2817581
Element 2818622
Element 2819540
Element 2820739
Element 2821201
Element 2822721
Element 28237
Element 2824354
Element 2825400
Element 2826464
Element 2827254
Element 2828467
Element 2829648
Element 2830352
Element 2831407
Element 2832512
Element 283366
Element 2834349
Element 2835203
Element 2836823
Element 2837106
Element 283860
Element 2839422
Element 2840145
Element 2841533
Element 2842895
Element 2843644
Element 2844432
Element 2845624
Element 2846812
Element 2847548
Element 2848808
Element 2849260
Element 2850904
Element 2851570
Element 2852409
Element 2853943
Element 2854412
Element 2855264
Element 2856293
Element 2857254
Element 2858466
Element 2859341
Element 2860120
Element 2861266
Element 2862634
Element 2863712
Element 2864852
Element 286583
Element 2866648
Element 2867598
Element 2868620
Element 2869870
Element 2870558
Element 2871542
Element 2872112
Element 287367
Element 2874667
Element 2875676
Element 2876327
Element 2877874
Element 2878450
Element 2879409
Element 2880295
Element 288139
Element 2882315
Element 2883576
Element 2884612
Element 2885801
Element 2886472
Element 2887538
Element 2888129
Element 2889597
Element 2890232
Element 2891241
Element 2892762
Element 2893928
Element 2894627
Element 2895518
Element 2896240
Element 2897346
Element 2898550
Element 2899259
Element 290059
Element 2901973
Element 2902824
Element 2903338
Element 2904488
Element 2905483
Element 2906909
Element 2907900
Element 2908340
Element 2909884
Element 2910263
Element 2911724
Element 2912949
Element 2913221
Element 2914213
Element 2915774
Element 2916476
Element 2917435
Element 2918911
Element 2919383
Element 2920958
Element 2921154
Element 2922158
Element 2923788
Element 2924956
Element 2925948
Element 2926301
Element 2927375
Element 292887
Element 2929572
Element 2930175
Element 2931631
Element 29325
Element 2933924
Element 2934364
Element 2935904
Element 2936369
Element 2937111
Element 2938831
Element 2939417
Element 2940535
Element 2941476
Element 294274
Element 2943588
Element 2944534
Element 294572
Element 2946105
Element 2947905
Element 2948185
Element 2949405
Element 2950385
Element 2951910
Element 295289
Element 2953875
Element 2954838
Element 2955125
Element 2956815
Element 2957555
Element 2958945
Element 2959874
Element 2960154
Element 2961534
Element 2962421
Element 2963410
Element 2964609
Element 296526
Element 2966631
Element 2967151
Element 2968777
Element 2969998
Element 2970429
Element 2971371
Element 2972468
Element 2973606
Element 2974486
Element 2975888
Element 2976724
Element 2977121
Element 2978234
Element 2979100
Element 2980706
Element 2981744
Element 2982749
Element 2983677
Element 2984863
Element 2985724
Element 2986694
Element 2987471
Element 2988525
Element 2989145
Element 2990406
Element 2991526
Element 2992727
Element 2993268
Element 2994789
Element 2995659
Element 2996787
Element 2997298
Element 2998650
Element 299990
Apasă de câteva ori pe fiecare buton. Timpii depind de calculator, dar diferența e constantă.

Imagini

<!-- NgOptimizedImage: lazy implicit, srcset automat, avertismente pentru dimensiuni lipsă -->
<img ngSrc="/assets/hero.jpg" width="1200" height="600" priority />   <!-- imaginea LCP -->
<img ngSrc="/assets/avatar.jpg" width="48" height="48" />            <!-- lazy -->
<img ngSrc="product.jpg" fill />                                       <!-- umple containerul -->

Liste foarte mari

import { ScrollingModule } from '@angular/cdk/scrolling';

@Component({
  imports: [ScrollingModule],
  template: `
    <cdk-virtual-scroll-viewport itemSize="48" class="viewport">
      <div *cdkVirtualFor="let row of rows(); trackBy: trackById" class="row">{{ row.name }}</div>
    </cdk-virtual-scroll-viewport>
  `,
  styles: `.viewport { height: 480px; }`,
})
export class BigList {
  readonly rows = input.required<Row[]>();
  protected trackById = (_: number, r: Row) => r.id;
}

Bundle

// angular.json → configurations.production.budgets
"budgets": [
  { "type": "initial", "maximumWarning": "500kB", "maximumError": "1MB" },
  { "type": "anyComponentStyle", "maximumWarning": "4kB", "maximumError": "8kB" }
]

SSR și hidratare

// app.config.server / app.config.ts cu SSR
provideClientHydration(
  withEventReplay(),          // click-urile din timpul hidratării nu se pierd
  // withIncrementalHydration() — implicit din v22
);

Capcane frecvente

  • Optimizare fără măsurare: deschide Profiler-ul din Angular DevTools înainte să schimbi cod.
  • Metode scumpe în template (sortedItems() ca metodă) → rulează la fiecare randare. Fă-le computed.
  • Librării mari importate „pentru o funcție” (lodash întreg, moment.js) → importuri punctuale sau injectAsync.
  • @defer pe conținutul principal → LCP mai slab. Defer doar sub fold.

Cap. 11 · 0 din 4 terminate

Ai terminat lecția?

Marcheaz-o și apare pe harta ta: în cuprins și pe prima pagină.

Se marchează singură după ce citești toată lecția.

  1. Performanță — checklist
  2. Testare cu Vitest
  3. DevTools: cum te uiți în aplicație
  4. Angular Aria
Vezi toată harta ta

Toate cele 75 de pagini · scrie ca să filtrezi

  • 01Ce e nou în Angular 21 & 22Toate schimbările importante din v21 și v22, pe scurt, cu link către pagina care le explică.Start
  • 01Prima ta aplicație, pas cu pasO listă de lecturi construită de la o componentă goală la o aplicație terminată — signals, @for, input-uri și output-uri, un serviciu și un formular, pas cu pas.Start
  • 01Decizii rapide„Unde pun asta?”, „Signal sau Observable?”, „Shared sau feature?” — răspunsuri scurte la întrebările de zi cu zi.Start
  • 01Întrebări de interviu Angular60 de întrebări reale de interviu pentru junior, mid și senior, cu răspunsul de dat, întrebarea care urmează și greșelile de evitat. Plus o simulare de interviu.Start
  • 02Standalone & bootstrapCum pornește o aplicație fără NgModule: bootstrapApplication, app.config.ts, imports în componentă.Fundamente moderne
  • 02Data binding și evenimenteInterpolare, binding pe proprietăți și pe atribute, evenimente cu $event și filtre de taste și cum e construit [( )] — ce intră în DOM și ce se întoarce.Fundamente moderne
  • 02Control flow: @if, @for, @switchSintaxa de blocuri care înlocuiește *ngIf/*ngFor/ngSwitch, cu track, @empty și verificare exhaustivă.Fundamente moderne
  • 02@let și expresiile noi din templateVariabile locale cu @let, arrow functions, spread, regex, instanceof, comentarii în tag-uri.Fundamente moderne
  • 02@defer — lazy loading în templateÎncarci componente grele doar când e nevoie: triggere, prefetch, placeholder, loading, error.Fundamente moderne
  • 02Class & style bindingsDe ce [class.x] și [style.x] au înlocuit ngClass și ngStyle (cu migrare automată din v21).Fundamente moderne
  • 02Stilurile componentelor și încapsularea:host, cele trei moduri de încapsulare, teme cu variabile CSS și de ce ::ng-deep e ultima soluție.Fundamente moderne
  • 02Pipes: când și cumPipe pur vs impur, pipe custom și cum alegi între pipe, computed() și o metodă.Fundamente moderne
  • 03signal() și computed()Primitivele reactive: stare scriibilă, stare derivată, egalitate, untracked și reguli de imutabilitate.Signals & reactivitate
  • 03effect() — când DA, când NUEfecte secundare sincronizate cu semnale: localStorage, logging, API-uri imperative. Și capcanele lor.Signals & reactivitate
  • 03linkedSignal() — stare derivată editabilăUn semnal care se resetează când se schimbă sursa, dar pe care îl poți și seta manual.Signals & reactivitate
  • 03resource, rxResource, httpResourceDate asincrone ca semnale: status, value, error, reload, anulare automată. Stabile din v22.Signals & reactivitate
  • 03debounced() — semnale cu întârziereVarianta „debounce” a unui semnal, fără RxJS. Perfect pentru căutare.Signals & reactivitate
  • 03Liste: căutare, filtrare, sortare, paginareUn lanț de computed-uri care recalculează doar ce s-a schimbat, cu filtrele ținute în URL, ca un link să redeschidă aceeași vedere.Signals & reactivitate
  • 03Observables de la zeroCe e un Observable, subscribe și unsubscribe, operatorii pe care îi folosești în fiecare săptămână, cold vs hot — și când ajunge un signal.Signals & reactivitate
  • 03Signals ↔ RxJStoSignal, toObservable, takeUntilDestroyed, outputFromObservable — și când RxJS rămâne alegerea bună.Signals & reactivitate
  • 04input() și output()Inputuri ca semnale (required, transform, alias) și outputuri tipizate. Data down, events up.Componente: comunicare
  • 04model() — two-way bindingBanana-in-a-box [( )] cu un singur API. Când îl folosești și când e mai bine input + output.Componente: comunicare
  • 04viewChild & contentChildInterogări ca semnale: viewChild, viewChildren, contentChild, contentChildren, opțiunea read.Componente: comunicare
  • 04Lifecycle & DestroyRefCe hook-uri mai contează în era signals, afterNextRender, DestroyRef și ngOnChanges tipizat.Componente: comunicare
  • 04Content projectionng-content cu select, sloturi multiple, conținut implicit și capcana proiecției condiționale.Componente: comunicare
  • 04ng-template & ngTemplateOutletTemplate-uri ca valori: render props în Angular, context tipizat și personalizare de componente.Componente: comunicare
  • 05Smart vs DumbContainer vs presentational: cine ține starea, cine doar afișează, și cum le împarți corect.Design de componente
  • 05Componente generice <T>Un DataTable<T> sau Select<T> tipizat corect, cu template-uri pentru celule.Design de componente
  • 05Componente dinamiceNgComponentOutlet, createComponent cu inputBinding/outputBinding și un dashboard construit din config.Design de componente
  • 05Directive & host compositionDirective atribut, metadata host: {} și Directive Composition API (hostDirectives).Design de componente
  • 05Controale custom de formularFormValueControl (Signal Forms) vs ControlValueAccessor: un rating cu stele, în ambele variante.Design de componente
  • 05Change detectionOnPush e implicit din v22, zone.js lipsește din v21. Ce declanșează randarea și cum să nu te arzi.Design de componente
  • 06inject() & @Service()Noul decorator @Service() din v22, inject() vs constructor și contextul de injecție.Dependency Injection
  • 06Providers & ierarhia de injectoriRoot vs rută vs componentă, useClass/useValue/useFactory/useExisting și modificatorii optional/self/skipSelf.Dependency Injection
  • 06InjectionToken & provideX()Configurare tipizată, funcții provideFeature(), makeEnvironmentProviders și inițializatori.Dependency Injection
  • 06injectAsync() — servicii lazyÎncarci un serviciu greu abia când ai nevoie de el, cu prefetch la idle.Dependency Injection
  • 07Structura de folderecore / shared / features, ce intră în fiecare și cum arată un feature pe dinăuntru.Arhitectura aplicației
  • 07Shared vs featureCând muți o componentă în shared și (mai ales) când NU. Checklist concret.Arhitectura aplicației
  • 07Interfețe & modeleInterfață inline sau fișier separat? DTO vs model de domeniu, type vs interface, unde le pui.Arhitectura aplicației
  • 07State management cu signalsStore-uri simple pe semnale, facade, stare locală vs globală și când îți trebuie NgRx.Arhitectura aplicației
  • 07Style guide & namingConvențiile oficiale actuale: nume de fișiere fără sufixe, protected, readonly, ordinea membrilor.Arhitectura aplicației
  • 07Barrels, aliasuri & granițeindex.ts, path aliases, API public pe feature și reguli de dependență care se pot verifica automat.Arhitectura aplicației
  • 07Erori: @boundary & ErrorHandlerNoul bloc @boundary din v22.2, ErrorHandler global, erori HTTP și erori din resource.Arhitectura aplicației
  • 08Routing modern & lazy loadingloadComponent, rute copil, parametri ca input-uri și moștenirea parametrilor (default nou în v22).Routing
  • 08Guards & resolverscanActivate, canMatch, canDeactivate și resolve ca funcții, cu redirect prin UrlTree / RedirectCommand.Routing
  • 09Signal Forms — bazeleFormulare construite pe semnale: form(), [formField], validare prin schemă. Stabile din v22.Formulare
  • 09Signal Forms — avansatValidare custom și cross-field, async/HTTP cu debounce, liste dinamice, disabled/hidden, scheme reutilizabile.Formulare
  • 09Reactive Forms tipizateFormGroup tipizat, nonNullable, FormArray — și cum conviețuiesc cu Signal Forms.Formulare
  • 10HttpClient, interceptors & API layerHttpClient fără setup (v21), Fetch implicit (v22), interceptori funcționali și stratul de API cu mapare DTO.HTTP & date
  • 11Performanță — checklistCe chiar contează: OnPush + signals, track, @defer, lazy routes, imagini, bundle și hidratare.Calitate & performanță
  • 11Testare cu VitestVitest e runner-ul implicit din v21. TestBed, componente cu semnale, servicii, HTTP și harness-uri.Calitate & performanță
  • 11DevTools: cum te uiți în aplicațieChrome DevTools și Angular DevTools pas cu pas: ce arată fiecare panou, cu exerciții care merg chiar pe site-ul ăsta.Calitate & performanță
  • 11Angular AriaComponente headless, accesibile, pe care le stilizezi cum vrei: tabs, accordion, menu, listbox...Calitate & performanță
  • 12SSR, prerender & render modesCând randezi pe server, când la build și când doar în browser: RenderMode pe rută, app.routes.server.ts și costurile reale.SSR & hidratare
  • 12Hidratare: event replay & incrementalCum preia browserul HTML-ul de pe server fără să-l refacă: hidratare completă, event replay, @defer (hydrate on …) și erorile de nepotrivire.SSR & hidratare
  • 12Cod compatibil cu serverulwindow nu există pe server: PLATFORM_ID, afterNextRender, DOCUMENT, TransferState, cache-ul HTTP și PendingTasks.SSR & hidratare
  • 13Micro frontendsCând merită să spargi o aplicație în mai multe deploy-uri și când e doar complexitate: Native Federation, Module Federation, iframes, Web Components.Arhitectură la scară
  • 13Web Components cu Angular ElementscreateCustomElement: o componentă Angular folosită ca tag HTML oriunde, plus comunicarea între aplicații prin evenimente și BroadcastChannel.Arhitectură la scară
  • 13Monorepo, librării & granițeUn workspace cu mai multe aplicații și librării: ng generate library, Nx, entry points secundare, publicare și reguli de dependență.Arhitectură la scară
  • 13Arhitectură hexagonală (ports & adapters)Domeniul fără Angular, porturi ca clase abstracte și adaptoare interschimbabile: HTTP, localStorage sau in-memory, fără să atingi UI-ul.Arhitectură la scară
  • 14Semnalele pe dinăuntruGraful reactiv: producători și consumatori, push-pull, de ce computed e lazy și glitch-free, problema diamantului și când rulează efectele.Reactivitate avansată
  • 14RxJS avansat: operatori de ordin superiorswitchMap, mergeMap, concatMap și exhaustMap pe o diagramă live, plus retry cu backoff, shareReplay și cum eviți scurgerile.Reactivitate avansată
  • 14NgRx SignalStoreState management la scară pe semnale: withState, withComputed, withMethods, rxMethod, entități și hooks — și când un store simplu e suficient.Reactivitate avansată
  • 14Mașini de stări cu signalsFără stări imposibile: o mașină tipizată pe signals, cu tranziții, guards și diagrama stărilor, live.Reactivitate avansată
  • 15WebSockets: timp real care rezistă rețeleiUn socket tipizat ca signals: reconectare cu backoff și jitter, heartbeat, coadă de mesaje cât ești offline și siguranță la SSR.Timp real și offline
  • 15Actualizări optimiste și rollbackInterfață instantanee, dar onestă: snapshot și rollback, răspunsuri sosite în altă ordine, chei de idempotență.Timp real și offline
  • 15Offline-first: Service Worker și cacheService Worker-ul Angular: strategii de cache, anunțarea versiunilor noi și o coadă pentru modificările făcute offline.Timp real și offline
  • 16Web WorkersCalcule grele fără să blochezi interfața: un worker real în pagină, comunicare prin mesaje și când nu merită.UI & performanță avansată
  • 16Liste uriașe: virtual scroll100.000 de rânduri fără lag: CDK virtual scroll, itemSize, trackBy și alternativele (paginare, infinite scroll).UI & performanță avansată
  • 16Animații moderne & View Transitionsanimate.enter și animate.leave în locul @angular/animations (depreciat), tranziții CSS și View Transitions la navigare.UI & performanță avansată
  • 16Memory leaks: cum le găsești și le repariSubscripții, timere și listeneri care trăiesc mai mult decât componenta lor — cum îi vezi în DevTools și cum îi închizi.UI & performanță avansată
  • 17Securitate: XSS, sanitizare & CSPCe face Angular automat împotriva XSS, când devine periculos bypassSecurityTrust, plus CSP cu nonce, Trusted Types și XSRF.Securitate & globalizare
  • 17Autentificare: token-uri & refreshUn interceptor care atașează token-ul, reîmprospătează o singură dată la 401 și reia cererile din coadă — plus unde ții token-ul.Securitate & globalizare
  • 17OAuth 2.1 și OpenID Connect cu PKCEFluxul authorization code cu PKCE, pas cu pas: verifier și challenge, state și nonce, ID token-ul și de ce un BFF e mai sigur.Securitate & globalizare
  • 17Internaționalizare (i18n)$localize, atributul i18n, ICU plural/select, build per limbă vs. traduceri la runtime și formatarea după locale.Securitate & globalizare