Instantly share code, notes, and snippets.
Created
November 14, 2023 01:33
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save vanvoorden/1c7c6ed08898de7f4b8619147537c0eb to your computer and use it in GitHub Desktop.
RandomAccessCollection Performance Problems when List is paired with NavigationStack
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// NavigationDemoApp.swift | |
// NavigationDemo | |
// | |
// Created by Rick Van Voorden on 11/7/23. | |
// | |
import Collections | |
import SwiftUI | |
let NavigationDemoRange = 0...999999 | |
extension Int: Identifiable { | |
public var id: Self { | |
return self | |
} | |
} | |
@main struct NavigationDemoApp: App { | |
// let array = Array(NavigationDemoRange) | |
let dictionary = OrderedDictionary( | |
uniqueKeys: NavigationDemoRange, | |
values: NavigationDemoRange | |
) | |
// let set = OrderedSet(NavigationDemoRange) | |
} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationView { | |
// List( | |
// NavigationDemoRange, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationView { | |
// List( | |
// self.array, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationView { | |
// List( | |
// self.array[NavigationDemoRange], | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// static OrderedDictionary.Values<>.== infix(_:_:) | |
// hit count = 1 | |
// hit count = 1 | |
// hit count = 1 | |
// FAST | |
extension NavigationDemoApp { | |
var body: some Scene { | |
WindowGroup { | |
NavigationView { | |
List( | |
self.dictionary.values, | |
rowContent: { element in | |
NavigationLink( | |
String(element) | |
) { | |
Text( | |
String(element) | |
) | |
} | |
} | |
) | |
} | |
} | |
} | |
} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationView { | |
// List( | |
// self.dictionary.values.elements, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// static OrderedSet.== infix(_:_:) | |
// hit count = 1 | |
// hit count = 1 | |
// hit count = 1 | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationView { | |
// List( | |
// self.set, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationView { | |
// List( | |
// self.set.elements, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// NavigationDemoRange, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.array, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.array[NavigationDemoRange], | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// static OrderedDictionary.Values<>.== infix(_:_:) | |
// hit count = 1 | |
// hit count = 25 | |
// hit count = 37 | |
// SLOW PUSH | |
// SLOW POP | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.dictionary.values, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.dictionary.values.elements, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// static OrderedSet.== infix(_:_:) | |
// hit count = 1 | |
// hit count = 25 | |
// hit count = 37 | |
// SLOW PUSH | |
// SLOW POP | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.set, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.set.elements, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element) | |
// ) { | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// static OrderedDictionary.Values<>.== infix(_:_:) | |
// hit count = 7 | |
// hit count = 12 | |
// hit count = 17 | |
// SLOW PUSH | |
// FAST POP | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.dictionary.values, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element), | |
// value: element | |
// ) | |
// } | |
// ).navigationDestination( | |
// for: Int.self, | |
// destination: { element in | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.dictionary.values.elements, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element), | |
// value: element | |
// ) | |
// } | |
// ).navigationDestination( | |
// for: Int.self, | |
// destination: { element in | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// static OrderedSet.== infix(_:_:) | |
// hit count = 7 | |
// hit count = 12 | |
// hit count = 17 | |
// SLOW PUSH | |
// FAST POP | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.set, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element), | |
// value: element | |
// ) | |
// } | |
// ).navigationDestination( | |
// for: Int.self, | |
// destination: { element in | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} | |
// FAST | |
//extension NavigationDemoApp { | |
// var body: some Scene { | |
// WindowGroup { | |
// NavigationStack { | |
// List( | |
// self.set.elements, | |
// rowContent: { element in | |
// NavigationLink( | |
// String(element), | |
// value: element | |
// ) | |
// } | |
// ).navigationDestination( | |
// for: Int.self, | |
// destination: { element in | |
// Text( | |
// String(element) | |
// ) | |
// } | |
// ) | |
// } | |
// } | |
// } | |
//} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment