私はFirebaseを使用してSwiftアプリケーションを構築しています。現在、アプリケーションを開くと、データベース全体が再び同期され、ユーザーが空のテーブルビューを見つけた場合、2〜3秒の遅延が発生します。どうすればこれをスピードアップできますか?Swift Firebaseが長い遅延でレコードをロードしています
どのような考えですか?
マイコード:
import UIKit
import Firebase
class ContactTableViewController: UITableViewController, UISearchBarDelegate, UISearchDisplayDelegate {
// MARK: Properties
var contactSearchResults : [Contact] = []
// FIRDatabase.database().persistenceEnabled = true
let contactRef = FIRDatabase.database().reference().child("contacts")
override func viewDidLoad() {
contactRef.queryOrdered(byChild: "Last Name").observe(.childAdded) { (snap: FIRDataSnapshot) in
contacts.append(loadContact(snap: snap))
self.tableView.reloadData()
}
contactRef.queryOrdered(byChild: "Last Name").observe(.childChanged) { (snap: FIRDataSnapshot) in
// this code here is wrong, but it doesn't matter for demonstration purposes
contacts.append(loadContact(snap: snap))
self.tableView.reloadData()
}
// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}
私のデータベースは
のような構造をしているfunc loadContact(snap : FIRDataSnapshot) -> Contact {
let key = snap.key
let contact = (snap.value) as? NSDictionary
let c1 = Contact(
id: (contact?["id"] as? String)!,
firebasekey: key,
first_name: (contact?["First Name"] as? String)!,
middle_name: (contact?["Middle Name"] as? String)!,
last_name: (contact?["Last Name"] as? String)!,
suffix: (contact?["Suffix"] as? String)!,
company: (contact?["Company"] as? String)!,
phone_labe1: (contact?["Phone Label 1"] as? String)!,
phone1: (contact?["Phone 1"] as? String)!,
phone_label2: (contact?["Phone Label 2"] as? String)!,
phone2: (contact?["Phone 2"] as? String)!,
email_label1: (contact?["Email Label 1"] as? String)!,
email1: (contact?["Email 1"] as? String)!,
email_label2: (contact?["Email Label 2"] as? String)!,
email2: (contact?["Email 2"] as? String)!,
social: (contact?["Social Security Number"] as? String)!,
dob: (contact?["Date of Birth"] as? String)!,
street: (contact?["Street"] as? String)!,
city: (contact?["City"] as? String)!,
zip: (contact?["ZIP and Postal Code"] as? String)!,
state: (contact?["State and Province"] as? String)!,
reg_number: (contact?["Reg Num"] as? String)!,
stable_reg_number: (contact?["Stable Reg Num"] as? String)!,
emergency_contact: (contact?["Emergency Contact"] as? String)!,
emergency_phone: (contact?["Emergency Phone"] as? String)!,
drivers_license: (contact?["Driver's License Num"] as? String)!,
insurance_carrier: (contact?["Insurance Carrier"] as? String)!,
details: (contact?["Details"] as? String)!,
insurance_exp: (contact?["Insurance Expiration Date"] as? String)!,
insurance_group: (contact?["Insurance Group Num"] as? String)!,
insurance_member: (contact?["Insurnace Member Num"] as? String)!, // spelled wrong in database
job_title: (contact?["Job Title"] as? String)!,
date_modified: (contact?["Modified"] as? String)!,
keywords: [],
notes: []
)
return c1;
}
そして、私の連絡先テーブルビューで
マイloadContacts機能連絡先(私の問題領域)には、約4000のレコードがあり、33個の子供がそれぞれ値を持っています。
Firebaseは、データをローカルに保存する必要がなくなるリアルタイムデータベースです。これは、使用するケースによって異なります。つまり、FirebaseからtableViewをロードするのに2〜3秒の遅延がある場合は、ほとんど直ちに感じられるはずの他の問題があります。数千分の1秒間で数千人のユーザーが読み込まれます。他の懸念事項は、あなたがユーザーに表示している(たとえば)tableViewに適用可能なFirebaseからのデータだけを取得する必要があるため、「データベース全体をもう一度同期する」ということです。 – Jay
@Jayご返信ありがとうございます!私はほぼ即時の積載時間で完璧にうまくいっていますが、遅れを引き起こす原因について何か提案がありますか? –
@NickWinnerこの質問に答えるために、コードとデータベースの構造をもっと見る必要があります。 –