@@ -396,6 +396,28 @@ public function get_common_lcp_element(): ?array {
396
396
return $ result ;
397
397
}
398
398
399
+ /**
400
+ * Gets all elements from all URL metrics from all groups.
401
+ *
402
+ * This is an O(n^3) function so its results must be cached. This being said, the number of groups should be 4 (one
403
+ * more than the default number of breakpoints) and the number of URL metrics for each group should be 3
404
+ * (the default sample size). Therefore, given the number (n) of visited elements on the page this will only
405
+ * end up running n*4*3 times.
406
+ *
407
+ * @since n.e.x.t
408
+ *
409
+ * @return Generator<ElementData>
410
+ */
411
+ protected function get_all_url_metrics_groups_elements (): Generator {
412
+ foreach ( $ this ->groups as $ group ) {
413
+ foreach ( $ group as $ url_metric ) {
414
+ foreach ( $ url_metric ->get_elements () as $ element ) {
415
+ yield $ element ;
416
+ }
417
+ }
418
+ }
419
+ }
420
+
399
421
/**
400
422
* Gets the max intersection ratios of all elements across all groups and their captured URL metrics.
401
423
*
@@ -408,21 +430,10 @@ public function get_all_element_max_intersection_ratios(): array {
408
430
409
431
$ result = ( function () {
410
432
$ element_max_intersection_ratios = array ();
411
-
412
- /*
413
- * O(n^3) my! Yes. This is why the result is cached. This being said, the number of groups should be 4 (one
414
- * more than the default number of breakpoints) and the number of URL metrics for each group should be 3
415
- * (the default sample size). Therefore, given the number (n) of visited elements on the page this will only
416
- * end up running n*4*3 times.
417
- */
418
- foreach ( $ this ->groups as $ group ) {
419
- foreach ( $ group as $ url_metric ) {
420
- foreach ( $ url_metric ->get_elements () as $ element ) {
421
- $ element_max_intersection_ratios [ $ element ['xpath ' ] ] = array_key_exists ( $ element ['xpath ' ], $ element_max_intersection_ratios )
422
- ? max ( $ element_max_intersection_ratios [ $ element ['xpath ' ] ], $ element ['intersectionRatio ' ] )
423
- : $ element ['intersectionRatio ' ];
424
- }
425
- }
433
+ foreach ( $ this ->get_all_url_metrics_groups_elements () as $ element ) {
434
+ $ element_max_intersection_ratios [ $ element ['xpath ' ] ] = array_key_exists ( $ element ['xpath ' ], $ element_max_intersection_ratios )
435
+ ? max ( $ element_max_intersection_ratios [ $ element ['xpath ' ] ], $ element ['intersectionRatio ' ] )
436
+ : $ element ['intersectionRatio ' ];
426
437
}
427
438
return $ element_max_intersection_ratios ;
428
439
} )();
@@ -446,20 +457,10 @@ public function get_all_element_minimum_heights(): array {
446
457
$ result = ( function () {
447
458
$ element_min_heights = array ();
448
459
449
- /*
450
- * O(n^3) my! Yes. This is why the result is cached. This being said, the number of groups should be 4 (one
451
- * more than the default number of breakpoints) and the number of URL metrics for each group should be 3
452
- * (the default sample size). Therefore, given the number (n) of visited elements on the page this will only
453
- * end up running n*4*3 times.
454
- */
455
- foreach ( $ this ->groups as $ group ) {
456
- foreach ( $ group as $ url_metric ) {
457
- foreach ( $ url_metric ->get_elements () as $ element ) {
458
- $ element_min_heights [ $ element ['xpath ' ] ] = array_key_exists ( $ element ['xpath ' ], $ element_min_heights )
459
- ? min ( $ element_min_heights [ $ element ['xpath ' ] ], $ element ['intersectionRect ' ]['height ' ] )
460
- : $ element ['intersectionRect ' ]['height ' ];
461
- }
462
- }
460
+ foreach ( $ this ->get_all_url_metrics_groups_elements () as $ element ) {
461
+ $ element_min_heights [ $ element ['xpath ' ] ] = array_key_exists ( $ element ['xpath ' ], $ element_min_heights )
462
+ ? min ( $ element_min_heights [ $ element ['xpath ' ] ], $ element ['intersectionRect ' ]['height ' ] )
463
+ : $ element ['intersectionRect ' ]['height ' ];
463
464
}
464
465
return $ element_min_heights ;
465
466
} )();
0 commit comments