2017-01-24 90 views
1

當我從indexedDB讀取數據(在我的情況下多於3000條)時,它的工作非常緩慢。這與我使用的瀏覽器無關。我在Chrome和Safari上獲得了相同的結果。我使用iPad 3進行測試。 在這個問題的範圍,我發現了以下有趣的事情:indexedDB在iOS上的性能不佳嗎?

  1. 當我開啓的Chrome的桌面版本我的客戶端應用程序它的工作原理以適當的方式

  2. 萬一當我使用的WebSQL在Safari它看起來不錯但是當我在Safari中使用IndexedDB的,它的工作SLOW

  3. 當我們使用Chrome瀏覽器在iPad 3它的工作SLOW了。 (因爲,Chrome使用IndexedDB的)

的WebSQL已被棄用,根據我的調查是IndexedDB有iOS上的一些瓶頸問題(在我的情況的iOS 9.3.5和iPad 3)。 對我來說,最好的辦法是找到Chrome的解決方案(在iOS上)。請寫下你的想法和提示。謝謝!

回答

1

更新:下面描述的測試描述了Safari中的一個問題,它似乎在10.12.4 beta中得到了修復。

這裏有更多的數據,但基本上我看到了你看到的同樣的東西。我使用bulkPut()寫了不同數量的記錄到一個乾淨的IndexedDB。我在XCode模擬器中運行的Chrome,Safari和iOS 10.2上執行了此操作。所有三個都在同一臺Macbook Pro上運行。我使用的是Dexie.js包裝器,所以有一些機會是由於包裝器而導致的,而不是由於IndexedDB本身。

我看到的是,iOS和Safari的每次寫入時間越多,我嘗試寫入的記錄越多,而Chrome每次寫入記錄的時間幾乎相同,無論我嘗試寫入的記錄數量多少。

此表顯示每個瀏覽器中的記錄/ ms。

records Chrome Safari ios Simulator 
100  5.26 0.63 1.54 
500  4.63 0.92 0.62 
1000 5.26 0.71 0.61 
2000 4.23 0.09 0.16 
5000 4.21 0.02 0.02 

然後我嘗試相同的記錄使用put()代替bulkPut()。對於少量的記錄,並且始終在Chrome上,這種情況要慢得多。但對於使用Safari瀏覽器上大量的記錄,這是速度快:

records Chrome Safari ios Simulator 
100  0.45 0.08 0.40 
500  0.46 0.14 0.35 
1000 0.51 0.20 0.36 
2000 0.54 0.21 0.39 
5000 0.38 0.19 0.60 

如果這是正確的(我有點懷疑,這是在所有情況下,因爲它是沒有意義的),那麼我猜測最好的策略是在Chrome上使用bulkPut,但在Safari上使用bulkPut的塊數不超過1000條記錄?看起來很可怕。我很想知道是否有其他人有關於這個或其他建議的更多信息。