Web3js
為什麼瀏覽器讀取區塊鏈數據需要這麼長時間?
我有一個 dAPP,我使用 reactjs 作為前端。應用程序從首頁上的智能合約(餘額)返回數據。我注意到的主要問題是,每次我或任何其他使用者訪問它時,從區塊鏈讀取數據需要大約 2-3 秒。在顯示數據之前,餘額顯示為“0”而不是實際值。
此外,如果使用 MetaMask 的使用者更改了他們的網路(比如說從 Eth MAINNET 到 Rinkeby),則不會顯示任何數據,而是顯示 0。
你是否也有這個問題,如果有,你是如何處理的?有沒有辦法縮短從區塊鏈讀取數據的時間,還是技術的限制?
有些人必須知道關於 dAPP 的一般結構的資訊:
- 我有 web3.js 文件,它導入 web3 並通過 MetaMask 或 Infura 設置提供程序。
- 我有一個 deploy.js,它使我能夠部署智能合約。該文件通過 infura 提供的 menemonic 和連結連接到 rinkeby。在輸出中我得到介面和字節碼
- 我有另一個 javascript 文件,其結構如下:
項目清單
import web3 from './web3'; const address = 'the address provided by the deploy file'; const abi = ['the abi provided by the deploy file']; export default new web3.eth.Contract(abi,address)
編輯:發現我在 ComponentDidMount 中的操作越多(獲取餘額、地址等),花費的時間就越多
如果聯繫活動節點以獲取諸如帳戶餘額之類的數據,它總是會很慢。
我首選的方法是使用更快的Amberdata的API。您只需要一個 api 密鑰,然後您就可以:
curl \ -X GET \ -H "accept: application/json" \ -H "x-api-key: <your-api-key>" \ "https://web3api.io/api/v1/addresses/0xb7e3abd75119fe3cfc76015193226b21fc19230b/account-balances/latest"
它將像這樣返回數據:
{ "status": 200, "title": "OK", "description": "Successful request", "payload": { "address": "0x06012c8cf97bead5deae237070f9587f8e7a266d", "blockNumber": "7446776", "timestamp": 1553638186000, "timestampNanoseconds": 0, "value": "65103167814228166337", "blockchainId": "1c9c969065fcd1cf" } }
讓我知道這是否適合你!😃
編輯:
還有一個節點包裝器包!
您是否考慮過記憶體數據或儲存在 HTML5 session/localStorage 之類的地方。然後,您可以嘗試從 session/localStorage 或您首先考慮的任何記憶體中讀取,然後在可用時更新到目前餘額。
考慮一個在後台持續執行的微服務,它每分鐘左右查詢區塊鏈以獲取諸如餘額之類的資訊,在記憶體記憶體中保持最新值,或者如果您使用一個數據庫以更快地訪問,則將其轉儲到不同的數據庫。
其他方法是在渲染 UI 之前獲取數據。