Я новичок в программировании и разработке iOS. Я пытаюсь сделать приложение, используя базу данных Firestore от Firebase. Я не знаю, нормально это или нет, но когда я пытаюсь получить данные из базы данных пожарного магазина, мне кажется, что это слишком долго. Я не знаю, ошибаюсь я или нет
вот мой код, чтобы получить все данные о городе из пожарного магазина
ссылка:
import Foundation
import FirebaseFirestore
import Firebase
enum FirestoreCollectionReference {
case users
case events
case cities
private var path : String {
switch self {
case .users : return "users"
case .events : return "events"
case .cities : return "cities"
}
}
func reference () -> CollectionReference {
return Firestore.firestore().collection(path)
}
}
Я использую метод getAllCitiesDataFromFirestore
в классе CityKM
, чтобы получить данные о городе, хранящиеся в пожарном хранилище
class CityKM {
var name : String
var coordinate : GeoPoint
init (name: String , coordinate: GeoPoint ) {
self.name = name
self.coordinate = coordinate
}
init (dictionary: [String:Any]) {
// this init will be used if we get data from firebase observation to construct an event object
name = dictionary["name"] as! String
coordinate = dictionary["coordinate"] as! GeoPoint
}
static func getAllCitiesDataFromFirestore (completion: @escaping ( [CityKM]? )->Void) {
// to retrieve all cities data from Firebase database by one read only, not using realtime fetching listener
let startTime = CFAbsoluteTimeGetCurrent() // to track time consumption of this method
FirestoreCollectionReference.cities.reference().getDocuments { (snapshot, error) in
if let error = error {
print("Failed to retrieve all cities data: \(error.localizedDescription)")
} else {
print("Sucessfully get all cities data from firestore")
guard let documentsSnapshot = snapshot, !documentsSnapshot.isEmpty else {
completion(nil)
return
}
let citiesDocuments = documentsSnapshot.documents
var cityArray = [CityKM]()
for document in citiesDocuments {
guard let cityName = document.data()["name"] as? String,
let cityCoordinate = document.data()["coordinate"] as? GeoPoint else {return}
let theCity = CityKM(name: cityName, coordinate: cityCoordinate)
cityArray.append(theCity)
}
completion(cityArray)
let timeElapsed = CFAbsoluteTimeGetCurrent() - startTime // to track time consumption of this method
print("Time needed to get all cities data from Firestore : \(timeElapsed) s.") // to track time consumption of this method
}
}
}
}
extension CityKM {
// MARK: - User Helper Methods
func toDictionary() -> [String:Any]{
return [
"name" : name,
"coordinate" : coordinate
]
}
}
из моей области отладки, напечатано
«Время, необходимое для получения данных всех городов из магазина пожаров: 1,8787678903 с.»
можно ли сделать это быстрее? 1.8с нормально? я делаю ошибку в своем коде, что делает данные запроса занимает слишком много времени? Я надеюсь, что я могу сделать запрос время меньше одной секунды
Не думаю, что скорость интернета - это проблема, так как я могу открывать видео на YouTube без буферизации