ToCode
Open in Telegram
1 419
Subscribers
-124 hours
-17 days
-130 days
Posts Archive
1 419
# 砖转讬 砖讬讟讜转 注专讘讜讘 讘 Python
讛诪讜讚讜诇 random 砖诇 Python 诪爪讬注 砖转讬 讚专讻讬诐 诇注专讘讘 讗诇诪谞讟讬诐 讘专砖讬诪讛: 讛专讗砖讜谞讛 讛讬讗 讛驻讜谞拽爪讬讛 sample 讜讛砖谞讬讛 讛驻讜谞拽爪讬讛 shuffle. 讘讜讗讜 谞专讗讛 讗转 讛讛讘讚诇 讜诪转讬 谞砖转诪砖 讘讻诇 砖讬讟讛.
讘驻讬讬转讜谉 讘专讜讘 讛驻注诪讬诐 砖谞专爪讛 诇砖谞讜转 专砖讬诪讛 谞砖转诪砖 讘诪转讜讚讜转 砖诇 讗讜讘讬拽讟 讛专砖讬诪讛 注爪诪讜 - 诇讚讜讙诪讗
arr.append, arr.reverse 讜 arr.clear. 讗讞转 讛驻拽讜讚讜转 讛诪注谞讬讬谞讜转 砖诇 专砖讬诪讜转 讘讛拽砖专 讝讛 讛讬讗 [].sort 砖诪诪讬讬谞转 讗转 讛专砖讬诪讛 讘住讚专 注讜诇讛:
arr = [10, 20, 7, 30]
arr.sort()
arr
Out[23]: [7, 10, 20, 30]
讜讛讞讘专讛 砖诇讛 讛讬讗 讛驻讜谞拽爪讬讛 sorted 砖诪拽讘诇转 专砖讬诪讛 讜诪讞讝讬专讛 专砖讬诪讛 讞讚砖讛 诪诪讜讬诪转:
arr = [10, 20, 7, 30]
sorted(arr)
Out[30]: [7, 10, 20, 30]
讛驻拽讜讚讛 arr.sort 砖讬谞转讛 讗转 讛专砖讬诪讛, 讜诇注讜诪转讛 sorted(arr) 诇讗 砖讬谞转讛 讗转 讛专砖讬诪讛 讛诪拽讜专讬转 讜专拽 讛讞讝讬专讛 专砖讬诪讛 讞讚砖讛.
讘讗讜转讜 讛讗讜驻谉 讗讘诇 讘转讞讘讬专 拽爪转 砖讜谞讛 讬砖 诇谞讜 砖转讬 讚专讻讬诐 诇注专讘讘 讗转 讛讗诇诪谞讟讬诐 讘专砖讬诪讛. 讻讗谉 讘诪拽讜诐 诇讛讻谞讬住 讗转 shuffle 讻驻讜谞拽爪讬讛 砖诇 诪注专讱 讜讗转 shuffled 讻驻讜谞拽爪讬讛 讙诇讜讘诇讬转 谞驻专讚转 讘讞专讜 讘 Python 诇讬讬爪专 砖转讬 驻讜谞拽爪讬讜转 砖讜谞讜转 讘转讜讱 讛诪讜讚讜诇 random.
讛驻讜谞拽爪讬讛 讛专讗砖讜谞讛 random.shuffle 诪拽讘诇转 专砖讬诪讛 讜诪砖谞讛 讗讜转讛 讘诪拽讜诐, 讻诇讜诪专:
In [31]: arr = [10, 20, 7, 30]
In [32]: random.shuffle(arr)
In [33]: arr
Out[33]: [20, 30, 10, 7]
讝讛 注讜讘讚 讘讚讬讜拽 讻诪讜 讛诪转讜讚讛 sort 砖诇 诪注专讱, 讗驻讬诇讜 砖讛诪注专讱 注讜讘专 讻驻专诪讟专 诇驻讜谞拽爪讬讛.
讛驻讜谞拽爪讬讛 random.sample 诇注讜诪转讛 讬讜讚注转 诇讛讞讝讬专 专砖讬诪讛 砖诇 "诪讚讙诐" 讘讻诇 讗讜专讱 诪转讜讱 诪注专讱. 讛驻专诪讟专 k 拽讜讘注 讗转 讙讜讚诇 讛诪讚讙诐. 讛谞讛 讻诪讛 讚讜讙诪讗讜转:
In [34]: random.sample(arr, k=2)
Out[34]: [10, 7]
In [35]: random.sample(arr, k=3)
Out[35]: [30, 20, 10]
In [36]: random.sample(arr, k=2)
Out[36]: [10, 30]
In [37]: random.sample(arr, k=2)
Out[37]: [7, 30]
讝讗转 讛住讬讘讛 砖讘转讬注讜讚 砖诇 random 诪诪诇讬爪讬诐 诇谞讜 诇讛砖转诪砖 讘驻讜谞拽爪讬讛 讝讜 讗诐 讗谞讞谞讜 专讜爪讬诐 诇拽讘诇 讗转 讗讬讘专讬 讛专砖讬诪讛 讘住讚专 讗拽专讗讬 讘诇讬 诇驻讙讜注 讘专砖讬诪讛 讛诪拽讜专讬转. 讻诇 诪讛 砖爪专讬讱 讝讛 诇讛注讘讬专 讘转讜专 注专讱 砖诇 k 讗转 讗讜专讱 讛专砖讬诪讛:
In [38]: random.sample(arr, k=len(arr))
Out[38]: [30, 7, 10, 20]
讜诪讛 诇讙讘讬 讝诪谉 专讬爪讛? 诇讗 诪驻转讬注 诇讙诇讜转 砖讛讙讬专住讗 砖诪砖谞讛 讗转 讛专砖讬诪讛 In Place 讛讬讗 拽爪转 讬讜转专 诪讛讬专讛 讘注讘讜讚讛 注诇 专砖讬诪讜转 讙讚讜诇讜转:
In [43]: a = [random.randint(0, 100) for _ in range(1_000_000)]
In [44]: %timeit random.sample(a, k=len(a))
629 ms 卤 24.5 ms per loop (mean 卤 std. dev. of 7 runs, 1 loop each)
In [45]: %timeit random.shuffle(a)
538 ms 卤 20.9 ms per loop (mean 卤 std. dev. of 7 runs, 1 loop each)
讗讝 讘诪讬 谞讘讞专? 讻诪讜 讛专讘讛 驻注诪讬诐 讘转讻谞讜转 讛转砖讜讘讛 讛谞讻讜谞讛 讛讬讗 "讝讛 转诇讜讬" - 讗诐 讬砖 诇讻诐 专砖讬诪讛 砖注专讘讜讘 讛讗讬讘专讬诐 讘讛 讛讜讗 讞诇拽 诪住讚专 砖诇 讻诪讛 驻注讜诇讜转 砖爪专讬讱 诇注砖讜转 讜讗讞专讬 讝讛 讗祝 讗讞讚 诇讗 讬爪讟专讱 注讜讚 讗转 讛诪讬讚注 讗驻砖专 诇讛砖转诪砖 讘 shuffle. 诇注讜诪转 讝讗转 讗诐 讗转诐 爪专讬讻讬诐 诇注专讘讘 讞诇拽 诪专砖讬诪讛 砖拽讬讘诇转诐 讗讘诇 讬砖 注讜讚 诪拽讜诪讜转 讘拽讜讚 砖注讜讘讚讬诐 注诐 讗讜转讜 诪讬讚注 住讬讻讜讬 讟讜讘 砖转注讚讬驻讜 诇讗 诇砖谞讜转 讗转 讛诪讬讚注 讛诪拽讜专讬 讜诇住驻讜讙 讗转 讛驻讙讬注讛 讛拽诇讛 诪讗讜讚 讘讝诪谉 讛专讬爪讛 (诪诪讬诇讗 讻谞专讗讛 诇讗 转专讙讬砖讜 讗转 讝讛).1 419
# 讛讟注讜转 讛讻讬 谞驻讜爪讛 砖诇 驻专讬诇讗谞住专讬诐 (讜讗讬讱 诇讛讬诪谞注 诪诪谞讛)
讬讜转专 诪讚讬 驻专讬诇讗谞住专讬诐 砖讗谞讬 诪讻讬专 谞讜驻诇讬诐 讘诪诇讻讜讚转 砖诪讜谞注转 诪讛诐 诇讛专讜讜讬讞 讻住祝, 讘讬讟讞讜谉 转注住讜拽转讬 讜砖诇讜讜转 谞驻砖. 谞讻讜谉, 爪专讬讱 诇注讘讜讚 拽砖讛 讘砖讘讬诇 诇拽讘诇 讻住祝, 讘讬讟讞讜谉 转注住讜拽转讬 讜砖诇讜讜转 谞驻砖 讘转讜专 驻专讬诇讗谞住, 讗讘诇 讙诐 讛注讘讜讚讛 讛讻讬 拽砖讛 砖讘注讜诇诐 诇讗 转注讝讜专 讗诐 讗转诐 讟讜注讬诐 讘谞拽讜讚讛 讛讝讗转.
讜讛谞拽讜讚讛 讛讬讗 讛讛讘讚诇 讘讬谉 驻专讬诇讗谞住 诇讬讝诐.
讘讜讗讜 谞讬转谉 诇讝讛 诇砖拽讜注 专讙注 注诐 砖转讬 讚讜讙诪讗讜转:
1. 讞讘专 驻专讬诇讗谞住专 诪讬讬注抓 诇讗专讙讜谞讬诐 讗讬讱 诇砖驻专 转讛诇讬讻讬 注讘讜讚讛. 讛讜讗 诪讙讬注 诇讗专讙讜谉, 诇讜诪讚 诪讛 讻讜诇诐 注讜砖讬诐, 注讜砖讛 讗转 讛拽住诐 砖诇讜 讜砖诇讜砖讛 讞讜讚砖讬诐 讗讞专 讻讱 讻讜诇诐 注讜讘讚讬诐 讬讜转专 讬注讬诇. 讬讜诐 讗讞讚, 讻讱 讛讜讗 诪住驻专, 讬讛讬讜 诇讬 诪住驻讬拽 诇拽讜讞讜转, 诪住驻讬拽 驻专讜讬拽讟讬诐, 转讛诇讬讻讬诐 诪住驻讬拽 诪住讜讚专讬诐 - 讜讗讝 讗讘讬讗 注讜讘讚讬诐 砖讬讞诇讬驻讜 讗讜转讬 讜转讛讬讛 诇讬 讞讘专转 讬讬注讜抓 注谞拽讬转.
2. 讞讘专讛 驻专讬诇讗谞住专讬转 讛讬讗 讗诇讜驻讛 讘谞讙讬砖讜转 讗转专讬诐. 专拽 诪诪讘讟 讞讟讜祝 讘 HTML 讛讬讗 转讚注 诇讛讙讬讚 诇讻诐 诪讛 砖讘讜专 讘讗转专 砖诇讻诐 讜讗讬讱 诇转拽谉. 讛讬讗 诪注住讬拽讛 住讟讗讝'专 讜讞讜诇诪转 讬讜诐 讗讞讚 诇转转 诇讜 诇注砖讜转 讗转 专讜讘 讛注讘讜讚讛 讛砖讞讜专讛, 讜讛讬讗 转注砖讛 专拽 讗转 讛诪讻讬专讛.
砖谞讬讛诐 诇讗 讘讻讬讜讜谉.
讻砖讛讞讘专 讛讬讜注抓 讬转讞讬诇 诇讛讘讬讗 注讜讘讚讬诐 讛讜讗 讬讙诇讛 砖讛诇拽讜讞讜转 诪讜讻谞讬诐 诇砖诇诐 讛专讘讛 驻讞讜转 讘砖讘讬诇 讬讜注抓 注讜讘讚 诪讗砖专 砖注转 讬讬注讜抓 砖诇讜, 讜讛专讜讜讞 砖谞砖讗专 诇讜 讘住讜祝 讬讛讬讛 讛专讘讛 讬讜转专 拽讟谉 诪诪讛 砖讛专讜讜讬讞 讻砖讛讬讛 诇讘讚.
讜讻讻诇 砖讛讞讘专讛 诪谞讙讬砖转 讛讗转专讬诐 转转谉 讬讜转专 注讘讜讚讛 诇住讟讗讝'专 砖诇讛, 讛讜讗 讬讙诇讛 讘住讜祝 砖注讚讬祝 诇讜 诇诪讻讜专 诇讘讚 讗转 砖讬专讜转讬讜 讻诪谞讙讬砖 讗转专讬诐 讜讗讜诇讬 讗驻讬诇讜 讛讜讗 讬讜讻诇 诇讛转讞讬诇 诇注讘讜讚 讬砖讬专讜转 注诐 讞诇拽 诪讛诇拽讜讞讜转 砖诇讛 (砖讘注爪诐 注讘讚讜 讻诇 讛讝诪谉 讗讬转讜).
驻专讬诇讗谞住 诪专讜讜讬讞 注诇 讛讝诪谉 砖讛讜讗 注讜讘讚. 诇讞诇讜诐 注诇 讛讬讜诐 讘讜 诇讗 转注讘讚讜 讬讜转专 诇讗 讬拽讚诐 讗转讻诐 讘诪住诇讜诇 诇讛爪诇讞讛, 砖诇讜讜转 谞驻砖 讜讗讜砖专 讻驻专讬诇讗谞住专讬诐, 诇讛讬驻讱. 讝讛 专拽 讬讙专讜诐 诇讻诐 诇注砖讜转 讟注讜讬讜转 砖讬驻讙注讜 诇讻诐 讘拽专讬讬专讛.
(谞.讘. 讗谞讬 诇讗 诪爪讬注 诇讻诐 诇注讘讜讚 诇讘讚. 讛注讘讜讚讛 注诐 注讜讚 讗谞砖讬诐 诪讜注讬诇讛 讜诪驻专讛, 讜讛专讘讛 驻注诪讬诐 讻砖讗谞讞谞讜 诪讜爪讬讗讬诐 注讘讜讚讛 专诇讜讜谞讟讬转 诇驻专讬诇讗谞住专讬诐 讗讞专讬诐 讻讜诇诐 诪专讜讜讬讞讬诐. 讗谞讬 讻谉 诪爪讬注 诇讻诐 诇讘谞讜转 讗转 讛注住拽 讻讱 砖转专讜讜讬讞讜 讬讜转专 注诇 讛讝诪谉 讘讜 讗转诐 注讜讘讚讬诐, 讘诪拽讜诐 诇讛转讗诪抓 诇讛专讜讜讬讞 拽爪转 讘诇讬 诇注讘讜讚).
1 419
# 诪讛 砖讟讜讘 诇驻专讜讬拽讟
讛讚专讱 讛讬讞讬讚讛 诇讛转驻专谞住 诇讗讜专讱 讝诪谉 讻驻专讬诇讗谞住专 讛讬讗 诇注砖讜转 注讘讜讚讛 讟讜讘讛, 注讘讜讚讛 砖讗谞砖讬诐 讗讜讛讘讬诐 讘讗讜转讜 专讙注 讗讘诇 讙诐 讻讝讜 砖诪诪砖讬讻讛 诇讛砖讗讬专 讞讜转诐 讛专讘讛 讗讞专讬 砖讛诇讻转.
讜讘转讜专 驻专讬诇讗谞住专讬诐 诇讗 驻注诐 谞讬转拽诇 讘诇拽讜讞讜转 砖讘讙诇诇 诪砖讘专 讘讟讜讜讞 讛拽爪专 诪讗讜讚 诪转拽砖讬诐 诇转转 诇讱 讗转 讛诪砖讗讘讬诐 诇注砖讜转 讗转 讛注讘讜讚讛 砖讗转讛 讬讜讚注 砖爪专讬讱 诇注砖讜转.
拽讞讜 诇讚讜讙诪讗 诇拽讜讞 砖诪诪砖讬讱 诇讛转诇讘讟 诇讙讘讬 讛注讬爪讜讘 讞讜讚砖讬诐 讗讞专讬 砖讛诪注专讻转 注讜讘讚转 讜讘讙诇诇 讝讛 讚讜讞讛 讗转 驻专住讜诐 讛诪注专讻转. 讛驻专讬诇讗谞住专 砖讘谞讛 讗转 讛诪注专讻转 拽讬讘诇 讗转 讛讻住祝, 讗讘诇 讻诇 注讜讚 讛诪注专讻转 诇讗 注讜讘讚转 讜讛诇拽讜讞 诇讗 诪砖转诪砖 讘讛, 讗谞讞谞讜 诪驻住讬讚讬诐 讗转 讛专讜讜讞 诇讟讜讜讞 讛专讞讜拽 砖讛讬讛 讬讻讜诇 诇注讝讜专 诇谞讜 诇拽讘诇 驻专讜讬拽讟讬诐 讟讜讘讬诐 讬讜转专.
讗谞讬 诇讗 诪讻讬专 驻讬转专讜谉 拽住诐 砖诪专讻讱 讗转 讻诇 讛诇拽讜讞讜转 讛拽砖讬诐, 讗讘诇 讻诪讛 讚讘专讬诐 砖注讘讚讜 诇讬 诇讗讜专讱 讛砖谞讬诐 讻讜诇诇诇讬诐:
1. 诇讛讜住讬祝 诇讜讞讜转 讝诪谞讬诐 讘讞讜讝讛 注讘讜讚讛, 注诐 拽谞住讜转 注诇 讞专讬讙讛.
2. 诇讘讞讜专 诇拽讜讞讜转 砖讻讘专 讬砖 诇讛诐 诪注专讻转 讗讜 砖讬讜讚注讬诐 诇讛专讬诐 诪注专讻讜转.
3. 诇讬讬爪专 转讛诇讬讱 注讘讜讚讛 诪讜诇 讛诇拽讜讞 砖讻讜诇诇 砖讬拽讜祝 诇讗讜专讱 讻诇 讛讚专讱 砖诇 讛拽砖讬讬诐 讜讛讚讗讙讜转 砖诇 讛诇拽讜讞. 讗谞讬 讗讜讛讘 诇诪砖诇 诇讬讬爪专 专砖讬诪转 讟专诇讜 诪砖讜转驻转 砖诇 "讚讘专讬诐 砖爪专讬讱 诇住讙讜专 诇驻谞讬 讛砖拽讛".
4. 诇讛讬讻谞住 诇驻专讜讬拽讟 讗讞专讬 砖专讜讘 讛谞讻住讬诐 诪讜讻谞讬诐, 讻诇讜诪专 讗讞专讬 砖讬砖 讗讬驻讬讜谉 讘专讜专, 诪讟专讛 讘专讜专讛 诇诪注专讻转 讜专讜讘 讛讙专驻讬拽讛 讻讘专 谞讜爪专讛.
5. 诇砖讬诐 讗转 讛讚讘专讬诐 讘爪讜专讛 讘专讜专讛 注诇 讛砖讜诇讞谉, 讻诇讜诪专 诇讚讘专 注诐 讛诇拽讜讞 讻讘专 诪砖讬讞转 讛诪讻讬专讛 讜诇讛住讘讬专 砖讛诪讟专讛 砖诇讻诐 讛讬讗 砖转讛讬讛 诪注专讻转 讘讗讜讜讬专 注讚 转讗专讬讱 注诇讬讜 转住讻诪讜.
6. 讜讛讻讬 讞砖讜讘 诇讛砖讗讬专 诇讻诐 讚专讱 诪讬诇讜讟 讻砖讗转诐 诪讝讛讬诐 砖讛诇拽讜讞 诇讗 讘专讗砖 砖诇讻诐 讜砖讗转诐 讟讜讞谞讬诐 诪讬诐. 诇讗讜专讱 讝诪谉 讙诐 讗诐 转驻住讬讚讜 讻住祝 讘驻专讜讬拽讟 讗讞讚 讗讜 砖谞讬讬诐, 讛讘讞讬专讛 砖诇讻诐 诇讛转注住拽 专拽 讘驻专讜讬拽讟讬诐 讟讜讘讬诐 砖讬砖驻专讜 讗转 讛诪讜谞讬讟讬谉 砖诇讻诐 讛讬讗 讛讚专讱 讛讻讬 讟讜讘讛 诇讛爪诇讬讞.
1 419
# 诪讛 讛讛讘讚诇 讘讬谉 git rm cached 诇 git reset
讛讙讬注讛 讗诇讬讬 砖讗诇讛 诪注谞讬讬谞转 讛讘讜拽专 讘诪讬讬诇 讜讞砖讘转讬 诇砖转祝 讗转 讛转砖讜讘讛 讻讗谉 诇讟讜讘转 讻讜诇诐. 讜讛砖讗诇讛: 诪讛 讛讛讘讚诇 讘讬谉 讛驻拽讜讚讛
git rm --cached 诇讘讬谉 讛驻拽讜讚讛 git reset, 诪转讬 讗砖转诪砖 讘讻诇 讗讞转?
讛讚讘专 讛专讗砖讜谉 砖爪专讬讱 诇讝讻讜专 讛讜讗 砖拽讜诪讬讟 讻讜诇诇 Snapshot 砖诇 讛驻专讜讬拽讟, 讻诇讜诪专 讗驻砖专 诇讞砖讜讘 注诇讬讜 讘转讜专 注讜转拽 砖诇 讻诇 讛拽讘爪讬诐 讜讛转讬拽讬讜转 砖讘驻专讜讬拽讟. 注讚 砖谞讜爪专 拽讜诪讬讟 讬砖 诇谞讜 转讬拽讬讛 讝诪谞讬转 砖谞拽专讗转 Staging Area 讗诇讬讛 讗驻砖专 诇讛讜住讬祝 讜诪诪谞讛 讗驻砖专 诇诪讞讜拽 拽讘爪讬诐. 讘专讙注 砖谞专讙讬砖 诪讜讻谞讬诐 谞驻注讬诇 git commit 讜讗讝 讛 Staging Area 讬讛驻讜讱 诇 Commit Object 讜讬讬砖诪专 讘诪讗讙专 讛讙讬讟 诇注讜诇诪讬 注讜诇诪讬诐. 讛 Staging Area 讗讙讘 诇讗 讬讬诪讞拽 讜讬诪砖讬讱 诇砖诪讜专 讗转 讻诇 讛拽讘爪讬诐 讜讛转讬拽讬讜转 讻诪讜 砖讛诐 讛讬讜 讘拽讜诪讬讟 讛讗讞专讜谉.
讛驻拽讜讚讛 git add 诇讜拽讞转 拽讜讘抓 诪转讬拽讬讬转 讛注讘讜讚讛 讜诪注转讬拽讛 讗讜转讜 诇讗讜转讛 转讬拽讬讛 讝诪谞讬转 砖诇 "讛讻谞讛 诇拽讜诪讬讟" 砖拽专讗转讬 诇讛 Staging Area. 讛驻拽讜讚讛 git reset 诇讜拽讞转 拽讜讘抓 诪讛专讬驻讜讝讬讟讜专讬 讜诪注转讬拽讛 讗讜转讜 诇讗讜转讛 转讬拽讬讛 讝诪谞讬转. 诇讻谉 讗驻砖专 诇讞砖讜讘 注诇 砖转讬 驻拽讜讚讜转 讗诇讛 讘转讜专 讛驻讻讬诐. 谞讻讬谉 专讙注 诪讗讙专 诇讚讜讙诪讗:
$ mkdir demo
$ cd demo
$ git init
$ echo one > demo.txt
$ git add demo.txt
$ git commit -m 'commit 1'
讗讝 讻砖讗谞讬 讬讜爪专 拽讜讘抓 讞讚砖 讘转讬拽讬讬转 讛注讘讜讚讛 讗谞讬 讬讻讜诇 诇讛砖转诪砖 讘 git add 讻讚讬 诇讛讜住讬祝 讗讜转讜 诇转讬拽讬讛 讛讝诪谞讬转:
$ echo two > two.txt
$ git add two.txt
$ git ls-files --stage
100644 5626abf0f72e58d7a153368ba57db4c673c0e171 0 demo.txt
100644 f719efd430d52bcfc8566a43b2eb655688d38871 0 two.txt
讗讜 讘驻拽讜讚讛 git reset 讻讚讬 诇讛注转讬拽 讗转 讛讙讬专住讗 诪讛专讬驻讜讝讬讟讜专讬 诇转讬拽讬讛 讛讝诪谞讬转 诪讛 砖讬讙专讜诐 诇诪讞讬拽转 讛拽讜讘抓 诪砖诐:
$ git reset two.txt
$ git ls-files --stage
100644 5626abf0f72e58d7a153368ba57db4c673c0e171 0 demo.txt
讘讻诇 诪拽专讛 诪讛诇讱 讝讛 诇讗 讛砖驻讬注 注诇 讛拽讘爪讬诐 讘转讬拽讬讛 讛谞讜讻讞讬转 砖诇讬 讗讜 讘诪讗讙专. 讻诇 诪讛 砖讗谞讬 注讜砖讛 讝讛 讘讜讞专 讗讬讝讛 拽讘爪讬诐 讬讬讻谞住讜 诇拽讜诪讬讟 讛讘讗.
诇注讜诪转讛 讛驻拽讜讚讛 git rm 讛专讘讛 讬讜转专 讚讜诪讛 诇驻拽讜讚讛 git add, 专拽 砖讘注讜讚 砖 git add 诪注转讬拽讛 拽讜讘抓 诪转讬拽讬讬转 讛注讘讜讚讛 诇 Staging Area, 转驻拽讬讚 讛驻拽讜讚讛 git rm 讛讜讗 诇讛注转讬拽 讗转 讛"讗讬谉 拽讜讘抓", 讻诇讜诪专 诇诪讞讜拽 拽讜讘抓 诪讛 Staging Area.
谞讝讻讜专 砖讛讚专讱 讛专讙讬诇讛 砖诇谞讜 诇讛讜爪讬讗 拽讜讘抓 诪讛 Staging Area 讛讬讗 诇讚专讜住 讗转 讛拽讜讘抓 讜诇讛讞诇讬祝 讗讜转讜 讘讙讬专住讗 砖砖诪讜专讛 讘专讬驻讜讝讬讟讜专讬, 讜讝讛 诪讛 砖注讜砖讛 git reset. 讗讘诇 讗诐 讗谞讞谞讜 专讜爪讬诐 诇诪讞讜拽 拽讜讘抓 诇讞诇讜讟讬谉 讝讛 诇讗 讘讗诪转 讬注讝讜专 诇讛注转讬拽 讗转 讛讙讬专住讗 诪讛专讬驻讜讝讬讟讜专讬. 讘诪讬诇讬诐 讗讞专讜转 讘讚讜讙诪讗 砖诇谞讜 讛拽讜讘抓 demo.txt 谞诪爪讗 讘 Staging Area 讜讙诐 讘 Repository. 讗诐 讗驻注讬诇 git reset 注诇讬讜 诇讗 讬拽专讛 讻诇讜诐:
$ git ls-files --stage
100644 5626abf0f72e58d7a153368ba57db4c673c0e171 0 demo.txt
$ git reset demo.txt
$ git ls-files --stage
100644 5626abf0f72e58d7a153368ba57db4c673c0e171 0 demo.txt
讘讻诇 诪拽专讛 讛讜讗 谞砖讗专 讘 Staging Area 讜讬讬讻谞住 诇拽讜诪讬讟 讛讘讗. 讛驻拽讜讚讛 git rm 讛讬讗 讛讚专讱 砖诇谞讜 诇讛注转讬拽 讗转 讛注讜讘讚讛 砖讛拽讜讘抓 诇讗 拽讬讬诐 讗诇 讛 Staging Area. 砖讬诪讜 诇讘 诇讛砖驻注讛 砖诇讛 注诇 讛诪讗讙专 砖诇谞讜:
$ git rm demo.txt
$ git ls-files --stage
$ ls
two.txt
注讻砖讬讜 讛 Staging Area 专讬拽. 诪讗讞专 讜讛拽讜诪讬讟 讛讘讗 砖讬讜讜爪专 讛讜讗 讘住讱 讛讻诇 注讜转拽 砖诇 讛 Staging Area 讘专讙注 讬爪讬专转 讛拽讜诪讬讟, 讛拽讜讘抓 demo.txt 诇讗 讬讛讬讛 讞诇拽 诪讛拽讜诪讬讟 讛讘讗. 讛驻注诐 诇讗 诇拽讞谞讜 讗转 讛讙讬专住讗 诪讛专讬驻讜讝讬讟讜专讬 讜讛注转拽谞讜 讗讜转讛 诇 Staging Area, 讗诇讗 讘讚讬讜拽 讻诪讜 注诐 add 诇拽讞谞讜 讗转 讛讙讬专住讗 诪转讬拽讬讬转 讛注讘讜讚讛 讜讛注转拽谞讜 讗讜转讛 诇 Staging Area, 讗讘诇 注砖讬谞讜 讗转 讝讛 讗讞专讬 砖诪讞拽谞讜 讗转 讛拽讜讘抓 诪转讬拽讬讬转 讛注讘讜讚讛.
讜诪讛 诇讙讘讬 git rm --cached ? 讗诐 讛讙注转诐 注讚 诇驻讛 讛住讬驻讜专 砖诇讜 讛讜讗 讛讻讬 驻砖讜讟 诪讻讜诇诐. 诇驻注诪讬诐 讗谞讞谞讜 转拽讜注讬诐 注诐 拽讜讘抓 讗讜 转讬拽讬讬讛 砖讗谞讞谞讜 专讜爪讬诐 诇讛讜爪讬讗 诪讛专讬驻讜讝讬讟讜专讬 讗讘诇 诇讛砖讗讬专 讗爪诇谞讜 讘转讬拽讬讬转 讛注讘讜讚讛. 讚讜讙诪讗 拽诇讗住讬转 讛讬讗 转讬拽讬讬转 node_modules: 讘讟注讜转 讛讜住驻谞讜 转讬拽讬讛 讝讜 诇诪讗讙专 讜注讻砖讬讜 讗谞讞谞讜 专讜爪讬诐 诇讛讜爪讬讗 讗讜转讛, 讗讘诇 讛转讬拽讬讛 讻谉 注讜讝专转 诇讬 讘注讘讜讚讛 讛砖讜讟驻转 讜诇讻谉 讗谞讬 诇讗 专讜爪讛 诇诪讞讜拽 讗讜转讛 诪讛讚讬住拽. 讛驻注诇转 git rm -r node_modules 诇讗 讘讗讛 讘讞砖讘讜谉 讻讬讜讜谉 砖讛讬讗 转讘讬讗 诇诪讞讬拽转 讛转讬拽讬讛 诪讛讚讬住拽. 讗讘诇, 讗诐 谞讜住讬祝 讗转 --cached 谞拽讘诇 讙讬专住讗 砖诇 git rm 砖诇讗 诪讜讞拽转 讗转 讛拽讜讘抓 讗讜 讛转讬拽讬讛 诪讛讚讬住拽 讗诇讗 专拽 诪讛 Staging Area.
讘讞讝专讛 诇诪讗讙专 讛讚讜讙诪讗 谞讞讝讬专 讗转 讛拽讜讘抓 demo.txt 诪讛专讬驻讜讝讬讟讜专讬 注诐:
$ git restore -s HEAD demo.txt
$ git ls-files --stage
100644 5626abf0f72e58d7a153368ba57db4c673c0e171 0 demo.txt
讜注讻砖讬讜 谞诪讞拽 讗讜转讜 专拽 诪讛 Staging Area 讘诇讬 诇诪讞讜拽 讗讜转讜 诪转讬拽讬讬转 讛注讘讜讚讛:
$ git rm --cached demo.txt
$ ls
demo.txt two.txt
$ git ls-files --stage1 419
# 诇诪讛 (讜讗讬讱) 诇讛诪砖讬讱 诇诇诪讜讚 讟讻谞讜诇讜讙讬讛 诇讗讜专讱 砖谞讬诐
驻讬讬转讜谉, 讘讬讙 讚讗讟讛, 驻讜诇 住讟讗拽, 专讬讗拽讟, 谞讜讚, 讙讬讟 - 讗谞砖讬诐 讘讗讬诐 诇驻讛 诇诇诪讜讚 讻诇 讗讞转 诪讛讟讻谞讜诇讜讙讬讜转 讛讗诇讛 讜诪转讻谞转讬诐 专讘讬诐 砖讗谞讬 诪讻讬专 诪讗讜讚 诪转诇讛讘讬诐 讻砖诪讙诇讬诐 讗讜转谉 诇专讗砖讜谞讛. 讗讘诇 讙诐 诇诪转讻谞转讬诐 讛诪讜讻砖专讬诐 讘讬讜转专 拽砖讛 诇讛诪砖讬讱 诇讛讬谞讜转 讜诇诇诪讜讚 讗转 讗讜转讛 讟讻谞讜诇讜讙讬讛 诇讗讜专讱 砖谞讬诐, 讜讝讗转 讛住讬讘讛 砖诪转讻谞转讬诐 专讘讬诐 讻诇 讻讱 诪讞驻砖讬诐 讻诇 讛讝诪谉 诇诇诪讜讚 讗转 讛讚讘专 讛讘讗.
讗讬谉 专注 讘诇讛讬砖讗专 驻转讜讞讬诐 诇专注讬讜谞讜转 讞讚砖讬诐, 讘诇讛诪砖讬讱 诇讞拽讜专, 讘诇谞住讜转 讻诇 讛讝诪谉 诇讙诇讜转 注讜诇诪讜转 讞讚砖讬诐. 讻诇 注讜讚 讛谞讟讬讛 诇讙诇讜转 讗转 讛讚讘专 讛讙讚讜诇 讛讘讗 诇讗 讘讗讛 注诇 讞砖讘讜谉 讛讚讘专 讛讙讚讜诇 讛拽讜讚诐. 讗讜 讘诪讬诇讬诐 讗讞专讜转, 讻诇 注讜讚 讗转诐 诇讗 讞讜讝专讬诐 讻诇 驻注诐 诇谞拽讜讚转 讛讛转讞诇讛.
讛住讬讘讛 讛讻讬 讟讜讘讛 诇讛诪砖讬讱 诇诇诪讜讚 讬讜转专 诇注讜诪拽 讗转 讛讚讘专 讛讙讚讜诇 讛拽讜讚诐 讛讬讗 砖诇讬诪讜讚 拽讜专讛 讘砖讻讘讜转. 讬砖 讚讘专讬诐 讘专讬讗拽讟 砖转爪诇讬讞讬 诇专讗讜转 专拽 讗讞专讬 砖谞转讬讬诐 砖诇 注讘讜讚讛 注诐 讛驻专讬讬诪讜讜专拽. 诇讻谉 讗诐 讗讞专讬 砖谞讛 讗转 诪专讙讬砖讛 砖讗转 讻讘专 讬讜讚注转 讛讻诇 讜讛讙讬注 讛讝诪谉 诇讛诪砖讬讱 讛诇讗讛 诇驻专讬讬诪讜讜专拽 讛讙讚讜诇 讛讘讗, 讗转 转驻住讬讚讬 讗转 讛拽讜诪讛 讛砖谞讬讛, 讛砖诇讬砖讬转 讜讛讞诪讬砖讬转. 讝讛 讻诪讜 诇讘谞讜转 讘谞讬讬谉 讗讘诇 讻诇 驻注诐 诇讛转讞讬诇 诪讞讚砖 讗讞专讬 砖诪住讬讬诪讬诐 讗转 讛拽讜诪讛 讛专讗砖讜谞讛.
讗谞讬 讞讜砖讘 砖住讬讘讛 诪专讻讝讬转 诇拽驻讬爪讛 讛讬讗 讛转讞讜砖讛 讗讞专讬 砖住讬讬诪谞讜 讗转 讛拽讜诪讛 讛专讗砖讜谞讛 砖讗谞讞谞讜 讻讘专 讬讜讚注讬诐 讛讻诇. 砖讛拽讜诪讛 讛砖谞讬讛, 讛砖诇讬砖讬转 讜讛注砖讬专讬转 讛谉 讘住讱 讛讻诇 注讜讚 诪讗讜转讜 讚讘专, 讜诇讻谉 讗诐 讻讘专 诇诇诪讜讚 注讚讬祝 诇诇诪讜讚 诪砖讛讜 讞讚砖 诇讙诪专讬. 诇讗讜专讱 讝诪谉 转讞讜砖讛 讝讜 诪讞讝拽转 讗转 注爪诪讛 讻讬讜讜谉 砖砖谞讛 拽讚讬诪讛 注诐 讛讟讻谞讜诇讜讙讬讛 讛讞讚砖讛 讜讗谞讞谞讜 砖讜讘 诪专讙讬砖讬诐 讘讚讬讜拽 讗转 讗讜转讛 转讞讜砖讛 砖讻讘专 专讗讬谞讜 讛讻诇, 讜诇讻谉 诪诪砖讬讻讬诐 讗转 讛诪注讙诇 讜砖讜讘 拽讜驻爪讬诐 诇讚讘专 讛讙讚讜诇 讛讘讗.
讛讗诇讟专谞讟讬讘讛 讛讬讗 拽砖讛 讜砖讜讜讛 讗转 讛诪讗诪抓: 讘诪拽讜诐 诇讛转讞讬诇 讘谞讬讬谉 讞讚砖 讘讟讻谞讜诇讜讙讬讛 讞讚砖讛 诇讙诪专讬, 诇讛转讗诪抓 讜诇讘谞讜转 讗转 讛拽讜诪讛 讛砖谞讬讛 讘讟讻谞讜诇讜讙讬讛 讛谞讜讻讞讬转. 讗讞专讬讛 讗转 讛砖诇讬砖讬转, 讛讞诪讬砖讬转 讜讛注砖讬专讬转 - 讻砖讻诇 拽讜诪讛 驻讜转讞转 诇谞讜 讗转 讛讚诇转 诇讬讚注 讞讚砖 讜谞拽讜讚转 诪讘讟 讞讚砖讛 注诇 讗讜转诐 讗转讙专讬诐.
讗讘诇- 讗讬讱 注讜砖讬诐 讗转 讝讛? 诪讛讬 讗讜转讛 拽讜诪讛 砖谞讬讛? 讜讗讬讱 讗谞讬 讬讜讚注 砖讗谞讬 诇讗 注讜砖讛 驻砖讜讟 "注讜讚 诪讗讜转讜 讚讘专?". 讛谞讛 砖诇讜砖讛 讟讬驻讬诐 砖注讜讝专讬诐 诇讬 诇讛转诪讬讚:
## 讞驻砖讜 讙讬砖讜转 讞讚砖讜转
讘讻诇 讟讻谞讜诇讜讙讬讛 砖讗转诐 诇讜诪讚讬诐 讬砖 讛诪讜谉 讚专讻讬诐 诇讙砖转 诇驻讬转专讜谉 讘注讬讜转. 讘拽讜诪讛 讛专讗砖讜谞讛 讗谞讞谞讜 诇讜拽讞讬诐 讗转 讛讚专讱 讛讛讙讬讜谞讬转, 讛驻讜驻讜诇专讬转, 讛诪拽讜讘诇转 讘讬讜转专 诇驻讬转专讜谉. 讘砖讘讬诇 诇讛讙讬注 诇拽讜诪讛 讛讘讗讛 爪专讬讱 诇讞驻砖 讚专讻讬诐 谞讜住驻讜转, 讙诐 讗诐 讘讛转讞诇讛 诇讗 诇讙诪专讬 讘专讜专 诪转讬 讛谉 讟讜讘讜转 讬讜转专. 讗诐 谞讬拽讞 诇讚讜讙诪讗 讗转 Redux, 讗讝 讬讻讜诇 诇讛讬讜转 砖讘讛转讞诇讛 诇诪讚转诐 诇讛讜爪讬讗 讘拽砖讜转 Ajax 注诐 Redux Thunk 讜讝讛 注讘讚 讗讞诇讛. 讘砖诇讘 讛讘讗 讗转诐 讬讻讜诇讬诐 诇谞住讜转 诇诇诪讜讚 讗讬讱 注讜讘讚 Saga 讜讗讞专讬 讝讛 诇讻转讜讘 Middleware 讘注爪诪讻诐.
## 讞驻砖讜 诪讛 讗转诐 注讚讬讬谉 诇讗 讬讜讚注讬诐
诇讻诇 讟讻谞讜诇讜讙讬讛 讬砖 驻讬谞讜转 讗驻诇讜转 砖专讜讘 讛诪转讻谞转讬诐 诪爪诇讬讞讬诐 诇讛住转讚专 诪注讜诇讛 讘诇讬 诇讙注转 讘讛谉. 讗讞转 讛讚专讻讬诐 诇讛讙讬注 诇讛讬讻专讜转 讟讜讘讛 讬讜转专 注诐 讛讟讻谞讜诇讜讙讬讛 讛讬讗 讘讚讬讜拽 诇讞驻砖 讜诇讛讬讻谞住 诇讗讜转谉 驻讬谞讜转 讗驻诇讜转 讜诇专讗讜转 诪讬 爪专讬讱 讗讜转谉 讜诇诪讛.
讘讞讝专讛 诇 React 讜 Redux - 讗谞讬 诪讜讻谉 诇讛诪专 砖讛住转讚专转诐 注讚 注讻砖讬讜 讚讬 讟讜讘 讘诇讬 诇讚注转 诪讛 讝讛 Store Enhancer, 讜诇讻谉 讻转讬讘讛 砖诇 讗讞讚 讛讬讗 讚专讱 诇讛讬讻谞住 诇砖讘讬诇 砖注讚讬讬谉 诇讗 爪注讚转诐 讘讜. 讬讻讜诇 诇讛讬讜转 砖讗转诐 诪专讜爪讬诐 诪诪砖 诪专讬讗拽讟 注诐 JavaScript, 讜讘讚讬讜拽 讘讙诇诇 讝讛 砖讜讜讛 诇谞住讜转 诇专讗讜转 讗讬讱 专讬讗拽讟 注讜讘讚 注诐 TypeScript. 讜讗诐 讻讘专 讬砖 诇讻诐 讘讚讬拽讜转 讗讜讟讜诪讟讬讜转 诇驻专讜讬拽讟 讛讻转讜讘讜转 讘 Selenium 讗讜诇讬 讛讙讬注 讛讝诪谉 诇讛注讬祝 诪讘讟 注诇 Jest 讜诇讛讜住讬祝 讙诐 讘讚讬拽讜转 讬讞讬讚讛.
讛诪讟专讛 讘诪砖讞拽讬诐 讛讗诇讛 讛讬讗 驻砖讜讟 诇讙诇讜转 注讜讚 讜注讜讚 讞诇拽讬诐 讘讟讻谞讜诇讜讙讬讛 砖注讚讬讬谉 诇讗 谞讙注转诐 讘讛诐. 转诪讬讚 讬砖 注讜讚, 讜讻讻诇 砖谞转讗诪抓 讘讗讜驻谉 驻注讬诇 诇诪爪讜讗 讗讜转诐 讻讱 谞讜讻诇 诇讛诪砖讬讱 诇诇诪讜讚 讜诇讛转专讙砖 诪讛转讜爪讗讜转 诇讗讜专讱 讝诪谉.
## 讞驻砖讜 讗转 讛诪拽讜专讜转 讗讜 谞拽讜讚讜转 诪讘讟 谞讜住驻讜转
讻诇 讟讻谞讜诇讜讙讬讛 砖谞讘讞专 诪讜砖驻注转 讜诪砖驻讬注讛 注诇 注砖专讜转 讟讻谞讜诇讜讙讬讜转 讗讞专讜转. 讘诪拽专讛 砖诇 React 专注讬讜谞讜转 砖诇 转讻谞讜转 驻讜谞拽爪讬讜谞讗诇讬 诪砖讞拽讬诐 转驻拽讬讚 诪讗讜讚 讞砖讜讘 讘驻专讬讬诪讜讜专拽, 讜诇讻谉 讚专讱 讟讜讘讛 诇讟驻住 诇拽讜诪讛 讛讘讗讛 讘专讬讗拽讟 转讛讬讛 诇诇诪讜讚 讻诇讬诐 砖诇 转讻谞讜转 驻讜谞拽爪讬讜谞讗诇讬.
讛住驻专讬讛 ReasonReact (讜讗讬转讛 住讘讬讘转 Reason 讘讗讜驻谉 讻诇诇讬) 讛讬讗 诪拽讜诐 讟讜讘 诇讛诪砖讬讱 讘讜 讗转 诇讬诪讜讚讬 讛专讬讗拽讟 讗讞专讬 砖讗转诐 诪专讙讬砖讬诐 砖讻讘专 讬讜讚注讬诐 讛讻诇. 讝讜 砖驻转 转讻谞讜转 讞讚砖讛 诇讙诪专讬 讘转讞讘讬专 讞讚砖 诇讙诪专讬, 砖诪砖转诪砖 讘讗讜转讛 驻专讬讬诪讜讜专拽 讜谞讜转谉 诇讻诐 谞拽讜讚转 诪讘讟 讞讚砖讛 注诇 讛讚讘专讬诐 砖讗转诐 讻讘讬讻讜诇 讬讜讚注讬诐.
讛讘讞讬专讛 诇讛注诪讬拽 讘诪砖讛讜 诪注讘专 诇讬讻讜诇转 诇讘谞讜转 驻专讜讬拽讟 砖注讜讘讚 讛讬讗 诇讗 诪讜讘谞转 诪讗诇讬讛 讜诇讗 讛专讘讛 诪转讻谞转讬诐 诇讜拽讞讬诐 讗讜转讛. 讘讚讬讜拽 讘讙诇诇 讝讛 讛讬讗 砖讜讜讛 讗转 讛诪讗诪抓 讜转转谉 诇讻诐 讗转 讛讬转专讜谉 砖讗转诐 爪专讬讻讬诐 讻讚讬 诇讛爪诇讬讞 讘砖讜拽 讛注讘讜讚讛 讜讘讘谞讬讬转 诪讜爪专讬诐 讟讜讘讬诐 讬讜转专.
1 419
# 诪谞讙谞讜谞讬 谞讬讛讜诇 讝讬讻专讜谉 讘 Python
砖驻讜转 转讻谞讜转 专讘讜转 讚讜专砖讜转 诪讛诪转讻谞转讬诐 诇谞讛诇 讗转 讛讝讬讻专讜谉 讻诇讜诪专 诇讛驻注讬诇 驻拽讜讚讛 讻讚讬 "诇拽讘诇" 讝讬讻专讜谉 诪讛诪注专讻转 讜讗讝 驻拽讜讚讛 谞讜住驻转 讻讚讬 "诇讛讞讝讬专" 讗转 讛讝讬讻专讜谉 诇诪注专讻转. 讘砖驻讜转 讻讗诇讛 诪转讻谞转讬诐 砖砖讻讞讜 诇讛讞讝讬专 讝讬讻专讜谉 诇诪注专讻转 讬爪专讜 拽讜讚 砖讻讻诇 砖驻注诇 讬讜转专 讝诪谉 专拽 讚专砖 讬讜转专 讜讬讜转专 讝讬讻专讜谉 诪讛诪注专讻转, 注讚 砖讛讝讬讻专讜谉 砖诇 讛诪讻讜谞讛 谞讙诪专. 讘诪爪讘讬诐 讻讗诇讛 讛讬讬谞讜 讗讜诪专讬诐 砖讬砖 讘转讜讻谞讬转 讝诇讬讙转 讝讬讻专讜谉 讗讜 Memory Leak 讘讗谞讙诇讬转.
讛诪注讘专 诇砖驻讜转 砖诪谞讛诇讜转 诇注爪诪谉 讗转 讛讝讬讻专讜谉 转讬拽谉 讞诇拽讬转 讗转 讛讘注讬讛 讗讘诇 讙诐 砖驻讜转 砖诪谞讛诇讜转 诇注爪诪谉 讗转 讛讝讬讻专讜谉 注砖讜讬讜转 诇讟注讜转 讜诇讬讬爪专 讝诇讬讙讜转 讝讬讻专讜谉. 砖谞讬 讛诪讜讚诇讬诐 讛诪专讻讝讬讬诐 讘讛诐 砖驻讜转 诪谞讛诇讜转 诇注爪诪谉 讗转 讛讝讬讻专讜谉 谞拽专讗讬诐 Reference Count 讜 Garbage Collection.
诪谞讙谞讜谉 Reference Count 讗讜诪专 砖讛砖驻讛 砖讜诪专转 诇讬讚 讻诇 讗讜讘讬拽讟 诪住驻专 砖诪爪讬讬谉 讻诪讛 诪砖转谞讬诐 诪转讬讞住讬诐 诇讗讜讘讬拽讟 讝讛. 讻砖讛诪住驻专 讬讜专讚 诇讗驻住 讘讗讜驻谉 讗讜讟讜诪讟讬 讛讝讬讻专讜谉 砖诇 讛讗讜讘讬拽讟 讞讜讝专 诇诪注专讻转 讛讛驻注诇讛.
诪谞讙谞讜谉 Garbage Collection 讗讜诪专 砖讛砖驻讛 诪驻注讬诇讛 讻诇 讻诪讛 讚拽讜转 转讛诇讬讱 砖诪讞驻砖 讗讜讘讬拽讟讬诐 砖讗讬 讗驻砖专 诇讛讙讬注 讗诇讬讛诐 讜诪讞讝讬专 讗讜转诐 诇诪注专讻转 讛讛驻注诇讛.
砖驻转 驻讬讬转讜谉 诪砖转诪砖转 讘砖讬诇讜讘 砖诇 砖谞讬 讛诪谞讙谞讜谞讬诐 讻讚讬 诇谞讛诇 讗转 讛讝讬讻专讜谉 讘诪拽讜诐 讛诪转讻谞转. 诪谞讙谞讜谉 Reference Count 驻讜注诇 讘爪讜专讛 诪讬讬讚讬转 讜诪谞拽讛 讗转 讛讝讬讻专讜谉 讻砖诪住驻专 讛砖诪讜转 砖诇 讗讜讘讬拽讟 诪住讜讬诐 讬讜专讚 诇讗驻住, 讜诪谞讙谞讜谉 Garbage Collection 诪砖诪砖 诇讙讬讘讜讬 讻讚讬 诇讝讛讜转 诪注讙诇讬诐.
诪讛讜 诪注讙诇? 砖诪讞 砖砖讗诇转诐. 诪注讙诇 讘讛拽砖专 砖诇 诪砖转谞讬诐 讜讝讬讻专讜谉 讗讜诪专 砖讬砖 诇谞讜 诪住驻专 诪砖转谞讬诐 砖讻诇 讗讞讚 诪爪讘讬注 注诇 讗讞讚 讗讞专. 讚讜讙诪讗 拽诇讛 讛讬讗 讛拽讜讚 讛讘讗 讘 Python:
a = []
a.append(a)
讬爪专谞讜 专砖讬诪讛 砖诇 讗讬讘专 讗讞讚 砖讛讗讬讘专 讛讝讛 讛讜讗 诪爪讘讬注 诇讗讜转讛 专砖讬诪讛 诪诪砖. 讝讛 谞讞诪讚 讻讬 注讻砖讬讜 讗驻砖专 诇讙砖转 诇转讗 讛专讗砖讜谉 讘专砖讬诪讛 讻诪讛 驻注诪讬诐 砖专拽 谞专爪讛:
>>> len(a)
1
>>> len(a[0])
1
>>> len(a[0][0])
1
>>> len(a[0][0][0])
1
>>> len(a[0][0][0][0])
1
>>> len(a[0][0][0][0][0])
1
讗讘诇 讛讞讬住专讜谉 讛讜讗 砖诪谞讙谞讜谉 Reference Count 讻讘专 诇讗 讬讻讜诇 诇注讘讜讚. 谞诇讱 诇专讗讜转 诪讛 驻讬讬转讜谉 讞讜砖讘 注诇 讛拽讜讚 砖诇谞讜.
讛诪讜讚讜诇 sys 诪住驻拽 驻讜谞拽爪讬讛 讘砖诐 getrefcount 砖诪讞讝讬专讛 讗转 诪住驻专 讛砖诪讜转 砖诇 讗讜讘讬拽讟 谞转讜谉. 讛谞讛 讻诪讛 讚讜讙诪讗讜转:
>>> a = []
>>> sys.getrefcount(a)
2
>>> b = {}
>>> sys.getrefcount(b)
2
>>> a = 10
>>> sys.getrefcount(a)
12
砖谞讬 讛专讗砖讜谞讬诐 讚讬 诪住讘讬专讬诐 讗转 注爪诪诐: 讛砖诐 a 讛讜讗 讛砖诐 讛专讗砖讜谉 砖诇 讛专砖讬诪讛, 讜讗讝 讘转讜讱 讛驻讜谞拽爪讬讛 getrefcount 讬砖 诇专砖讬诪讛 讝讜 砖诐 谞讜住祝 (讝讛 砖诐 讛驻专诪讟专 砖讛讜驻讬注 讘住讜讙专讬讬诐 讘讛讙讚专转 讛驻讜谞拽爪讬讛).
讛拽讟注 讛讗讞专讜谉 拽爪转 诪讘诇讘诇 - 诪讗讬驻讛 讛讙讬注讜 12 砖诪讜转 诇诪住驻专 10? 讛住讬讘讛 砖讘讻诇 诪拽讜诐 砖讗谞讞谞讜 讻讜转讘讬诐 10 讬爪专谞讜 注讜讚 砖诐 诇讚讘专 讛讝讛 讘讝讬讻专讜谉 砖讗谞讞谞讜 拽讜专讗讬诐 诇讜 讛诪住驻专 10, 讜讙诐 驻讬讬转讜谉 注爪诪讜 诪砖转诪砖 讘拽讘讜注 注砖专 诪讚讬 驻注诐. 讻讻诇 砖谞讛讬讛 讬讜转专 讬爪讬专转讬讬诐 诪住驻专 讛砖诪讜转 讬讜专讚:
>>> a = 19821
>>> sys.getrefcount(a)
2
注讻砖讬讜 讗驻砖专 诇讞讝讜专 诇诪注讙诇 砖诇谞讜:
>>> a = []
>>> a.append(a)
>>> sys.getrefcount(a)
3
诇讗讜讘讬拽讟 讬砖 讛驻注诐 3 砖诪讜转: 讛砖谞讬讬诐 讛专讗砖讜谞讬诐 诪讜讻专讬诐 诇谞讜 诪讛讚讜讙诪讗讜转 讛拽讜讚诪讜转 讜讛砖诐 讛砖诇讬砖讬 讛讜讗 讛讛爪讘注讛 讛驻谞讬诪讬转. 诪谞讙谞讜谉 Reference Count 诇注讜诇诐 诇讗 讬讜讻诇 诇诪讞讜拽 诪砖转谞讛 讝讛 诪讛讝讬讻专讜谉 讻讬 诪住驻专 讛砖诪讜转 砖诇讜 诇讗 讬专讚 讗祝 驻注诐 诇-0. 讛讛爪讘注讛 讛驻谞讬诪讬转 转讬诪讞拽 专拽 讻砖谞讗驻住 讗讜转讛 讬讚谞讬转.
诇讻谉 驻讬讬转讜谉 诪砖转诪砖 讘诪谞讙谞讜谉 诪砖诇讬诐 砖谞拽专讗 Garbage Collection. 讘诪谞讙谞讜谉 讝讛 驻讬讬转讜谉 讬讞驻砖 讘爪讜专讛 驻注讬诇讛 诪砖转谞讬诐 砖讗讬 讗驻砖专 诇讛讙讬注 讗诇讬讛诐 讜讬诪讞拽 讗讜转诐 诪讛讝讬讻专讜谉.
谞转讞讬诇 讘讞讬住讜诇 讛讗讜讘讬拽讟 砖诇谞讜 讜谞谞住讛 诇专讗讜转 讗诐 驻讬讬转讜谉 诪讞拽 讗讜转讜 诇讘讚 诪讛讝讬讻专讜谉:
import sys, gc
a = []
a.append(a)
ida = id(a)
a = 10
# is there still an object with id == i ?
>>> ida in [id(x) for x in gc.get_objects()]
True
讛驻拽讜讚讛 讛讗讞专讜谞讛 诪砖转诪砖转 讘诪谞讙谞讜谉 讛 Garbage Collector 讻讚讬 诇讝讛讜转 讛讗诐 注讚讬讬谉 讬砖 讘讝讬讻专讜谉 讗讜讘讬拽讟 砖讛 id 砖诇讜 讛讜讗 诪讛 砖讛讬讛 讛 id 砖诇 讛专砖讬诪讛 砖诇谞讜 砖讛爪讘讬注讛 诇注爪诪讛. 讛转砖讜讘讛 讛讬讗 讻诪讜讘谉 True.
讝讗转 讘讚讬讜拽 讛住讬讘讛 砖驻讬讬转讜谉 诪讞讝讬拽讛 讙诐 诪谞讙谞讜谉 砖诇 Garbage Collection 诇讙讬讘讜讬. 诪谞讙谞讜谉 讝讛 诪讻讬专 讗转 讻诇 讛讗讜讘讬拽讟讬诐 讘诪注专讻转 讜讬诪讞拽 讗讜讘讬拽讟讬诐 讻讗砖专 讗讬 讗驻砖专 诇讛讙讬注 讗诇讬讛诐, 讙诐 讗诐 讛诐 讻讜诇诇讬诐 讛爪讘注讛 诪注讙诇讬转. 诪谞讙谞讜谉 讛 gc 诪转注讜专专 讗讜讟讜诪讟讬转 讗讞转 诇讻诪讛 讚拽讜转 讗讜 讻砖讗谞讞谞讜 诪讘拽砖讬诐 诇讛驻注讬诇 讗讜转讜 注诐 讛驻拽讜讚讛 gc.collect. 谞谞住讛 讗转 讝讛:
>>> gc.collect()
1
>>> ida in [id(x) for x in gc.get_objects()]
False
讜注讻砖讬讜 讛专砖讬诪讛 注诐 讛诪注讙诇 谞诪讞拽讛 诪讛讝讬讻专讜谉.
讘讝讻讜转 讛砖讬诇讜讘 讘讬谉 砖谞讬 讛诪谞讙谞讜谞讬诐 讛专讘讛 讬讜转专 拽砖讛 诇讬讬爪专 讝诇讬讙讜转 讝讬讻专讜谉 讘转讜讻谞讬讜转 驻讬讬转讜谉. 讻讚讗讬 诇砖讬诐 诇讘 注诐 讝讗转 砖诪谞讙谞讜谉 讛 Garbage Collector 诪转注讜专专 讘讝诪谞讬诐 诇讗 爪驻讜讬讬诐 讜注诇讜诇 诇驻讙讜注 讘讘讬爪讜注讬诐 砖诇 讛转讜讻谞讬转 讗诐 讗谞讞谞讜 专讜爪讬诐 诇讻转讜讘 转讜讻谞讬转 砖转讙讬讘 讘讝诪谉 讗诪转 诇讗讬专讜注讬诐 讞讬爪讜谞讬讬诐. 诇讻谉 拽讬讬诪转 讘驻讬讬转讜谉 讛驻拽讜讚讛 gc.disable 砖诪讘讟诇转 讗转 诪谞讙谞讜谉 讛 Garbage Collection 讜诪砖讗讬专讛 讗讜转谞讜 专拽 注诐 Reference Count. 讗诐 讗转诐 讘讟讜讞讬诐 砖讗讬谉 诇讻诐 讛爪讘注讜转 诪注讙诇讬讜转 讘讗驻诇讬拽爪讬讛 讜诪诪砖 爪专讬讻讬诐 讘讬爪讜注讬 Real Time 讗讜诇讬 讝讛 诪砖讛讜 砖砖讜讜讛 诇讘讚讜拽 讗讜转讜.1 419
# 诇讗 专讜爪讛, 诇讗 讬讻讜诇 讜诇讗 讬讜讚注 讗讬讱
讘讻诇 驻注诐 砖讗谞讬 诪谞住讛 诇注砖讜转 诪砖讛讜 讜诇讗 诪爪诇讬讞 讛讗讬谞住讟讬谞拽讟 讛专讗砖讜谉 砖诇讬 讛讜讗 诇讛讗砖讬诐 讗转 "诇讗 专讜爪讛": 讗谞讬 砖诐 砖注讜谉 诇讞诪砖 讘讘讜拽专 讻讚讬 诇爪讗转 诇专讬爪讛 讜讻砖讛讜讗 诪爪诇爪诇 讗谞讬 砖讜讘 谞砖讗专 讘转讜讱 讛驻讜讱 讘诪拽讜诐 诇诇讘讜砖 讗转 讛谞注诇讬 住驻讜专讟. 砖注转讬讬诐 讗讞专 讻讱 讛讚讘专 讛讻讬 拽诇 诇讛讙讬讚 诇注爪诪讬 讝讛 "讻谞专讗讛 砖讗谞讬 诇讗 讘讗诪转 专讜爪讛 诇讛讬讻谞住 诇讻讜砖专".
讘谉 讚讜讚 专讞讜拽 砖诇 "诇讗 专讜爪讛" 谞拽专讗 "诇讗 讬讻讜诇" 讗讜 "讗谞讬 诇讗 讛讟讬驻讜住": 讗谞讬 讬讜砖讘 诇谞住讜转 诇诇诪讜讚 讗讬讱 Machine Learning 注讜讘讚 讜诪住转讘讱 注诐 讛诪转诪讟讬拽讛. 砖诇讜砖讛 讬诪讬诐 讗讞专讬 讛讚讘专 讛讻讬 拽诇 诇讛讙讬讚 诇注爪诪讬 讬讛讬讛 诪砖讛讜 讻诪讜 "讻谞专讗讛 砖讝讛 诇讗 诇讗谞砖讬诐 讻诪讜谞讬", 讗讜 "讗讬谉 诪讛 诇注砖讜转 讗讬谉 诇讬 专讗砖 诇讚讘专讬诐 讻讗诇讛".
讜讘讚讬讜拽 讘讙诇诇 砖讗谞讬 诇讗 专讜爪讛 讜讗谞讬 诇讗 讬讻讜诇 讛诐 讞讘专讬诐 讻诇 讻讱 讟讜讘讬诐 砖诇谞讜 讻讚讗讬 诇砖讗讜诇 注讚 讻诪讛 讛诐 讘讗诪转 注讜讝专讬诐 诇谞讜 诇讛转诪讜讚讚 注诐 拽砖讬讬诐. 讛专讬 讗诐 讗谞讬 诇讗 讘讗诪转 专讜爪讛 诇注砖讜转 住驻讜专讟 讗讝 讘砖讘讬诇 诪讛 诇讛转讗诪抓 驻注诐 讛讘讗讛? 讗讜诇讬 讻砖讗谞讬 讗专爪讛 讘讗诪转 讝讛 讬爪诇讬讞. 讜讗诐 讗谞讬 诇讗 讬讻讜诇 诇诇诪讜讚 转讻谞讜转 讗讝 讘砖讘讬诇 诪讛 诇讛诪砖讬讱 诇谞住讜转? 注讚讬祝 诇诪爪讜讗 诪砖讛讜 砖讗谞讬 讟讜讘 讘讜.
住讬驻讜专 拽爪转 讬讜转专 讬注讬诇 讘诪爪讘讬诐 砖讚讘专讬诐 诇讗 诪爪诇讬讞讬诐 谞拽专讗 "诇讗 讬讜讚注 讗讬讱". 讛讜讗 讘谉 讚讜讚 诪诪砖 专讞讜拽 砖诇 诇讗 专讜爪讛 讜诇讗 讬讻讜诇, 讻诇 讻讱 专讞讜拽 砖讛诐 谞驻讙砖讬诐 专拽 讘专讗砖 讛砖谞讛 讜讙诐 讗讝 讘拽讜砖讬 诪讞诇讬驻讬诐 砖转讬 诪讬诇讬诐. 讻讬 讻砖诇讗 讬讜讚注 讗讬讱 谞讻谞住 诇转诪讜谞讛 讛讚诇转 诇专注讬讜谞讜转 讞讚砖讬诐 谞驻转讞转:
讻谞专讗讛 砖讗谞讬 注讚讬讬谉 诇讗 讬讜讚注 讗讬讱 诇拽讜诐 诪讛诪讬讟讛 讘讞诪砖 讘讘讜拽专 诇注砖讜转 住驻讜专讟. 诇讗 住讜祝 讛注讜诇诐 诪讞专 讗谞住讛 诇砖讬诐 讗转 谞注诇讬 讛住驻讜专讟 讬讜转专 拽专讜讘 诇诪讬讟讛 讜讗讻讬谉 诇讬 驻专拽 砖诇 驻讜讚拽住讟 砖讗谞讬 专讜爪讛 诇砖诪讜注. 讗讜诇讬 讝讛 讬注讘讜讚.
讗讜 - 讻谞专讗讛 砖讗谞讬 注讚讬讬谉 诇讗 讬讜讚注 讗讬讱 诇诇诪讜讚 Machine Learning 讻诪讜 砖爪专讬讱. 讗讜诇讬 砖讜讜讛 诇谞住讜转 拽讜专住 讗讞专 讗讜 诇砖讘转 诇诇诪讜讚 注诐 讞讘专. 讗讜 讗讜诇讬 砖讜讜讛 诇注砖讜转 专讬注谞讜谉 注诇 转讻谞讬诐 讞砖讜讘讬诐 讘诪转诪讟讬拽讛 诇驻谞讬 砖诇讜拽讞讬诐 讗转 讛拽讜专住 讗讜谞诇讬讬谉 砖谞专砖诪转讬 讗诇讬讜. 讗谞住讛 诪讞专.
讛专讘讛 驻注诪讬诐 讻砖诇讗 专讜爪讛 讜诇讗 讬讻讜诇 诪讘诇讘诇讬诐 诇讬 讗转 讛诪讜讞, 讗谞讬 诪注讚讬祝 诇讛讝诪讬谉 讗转 "诇讗 讬讜讚注 讗讬讱" 诇讗专讜讞讛. 诪诪讬诇讗 讗讞专讬 砖讛讜讗 讬讙讬注 砖谞讬 讛谞讜讚谞讬拽讬诐 讛讗诇讛 讬诪爪讗讜 住讬讘讛 讟讜讘讛 诇讛讬注诇诐, 讜讗谞讬 讗讜讻诇 诇讛诪砖讬讱 诇注讘讜讚 讘诪拽讜诐 诇讛讬转拽注 注诇 转讬专讜爪讬诐.
1 419
# 砖讙讬讗讜转 讝讛 诇讗 讗讜讻诇
讘诇讬注转 砖讙讬讗讜转 讛讬讗 讗讞转 讛转讜驻注讜转 讛谞驻讜爪讜转 讜讛讻讜讗讘讜转 讘讻转讬讘转 拽讜讚. 诇讘诇讜注 砖讙讬讗讛 讝讛 讗讜诪专 砖讛拽讜讚 诪讝讛讛 砖诪砖讛讜 诇讗 讘住讚专 讗讘诇 诪诪砖讬讱 诇注讘讜讚 讻专讙讬诇 讘诇讬 诇讛爪讬祝 讗转 讛讘注讬讛 诇诪砖转诪砖. 讚讜讙诪讗 诇驻讜谞拽爪讬讛 砖讘讜诇注转 砖讙讬讗讛 诪爪讗转讬 讛砖讘讜注 讘拽讜讚 专讜讘讬 砖诇 讞讘专:
def self.track_event(user_token)
return if user_token.nil?
session = UserSession.active.find_by(token: user_token)
session&.update_attribute('last_seen', Time.now)
end
讛驻讜谞拽爪讬讛 诪爪驻讛 诇拽讘诇 驻专诪讟专 砖讗讬谞讜 nil 讜讗转 讝讛 讛讬讗 诪讜讜讚讗转 讘讗诪爪注讜转 if 讘讛转讞诇讛. 讗讘诇, 讗诐 讘讟注讜转 讛讬讗 拽讬讘诇讛 nil 讛砖讙讬讗讛 转讬讘诇注 讜讗祝 讗讞讚 诇讗 讬讚注 砖讛讬讛 谞转讬讘 讘注讬讬转讬 讘拽讜讚.
讘讛诪砖讱 讛驻讜谞拽爪讬讛 诪谞住讛 诇诪爪讜讗 讗讜讘讬拽讟 UserSession 诇驻讬 讗讜转讜 讟讜拽谉. 讜讙诐 讻讗谉 讗诐 讛讬讗 讛爪诇讬讞讛 诇诪爪讜讗 讛讬讗 转注讚讻谉 讗转 讛 session, 讗讘诇 讗诐 诇讗 讛爪诇讬讞讛 诇诪爪讜讗 讛讬讗 转讘诇注 讗转 讛砖讙讬讗讛 讜诇讗 转讚讜讜讞 注诇 讛讘注讬讛 诇讗祝 讗讞讚. 诪砖转诪砖讬诐 驻砖讜讟 诇讗 讬专讗讜 讗转 讛诪讬讚注 讛诪注讜讚讻谉 砖诇讛诐.
讗讙讘 讛讗讜驻专讟讜专 &. 讗讜诪专 砖讗诐 讛讗讜讘讬拽讟 讗讬谞讜 nil 讗讝 爪专讬讱 诇讛驻注讬诇 讗转 讛驻讜谞拽爪讬讛, 讗讘诇 讗诐 讛讜讗 讻谉 nil 讗讝 诇讗 注讜砖讬诐 讻诇讜诐. 讛讗讜驻专讟讜专 谞拽专讗 Optional chaining 讜讙讬专住讗 砖诇讜 转讙讬注 讘拽专讜讘 讙诐 诇 JavaScript.
讘讞讝专讛 诇专讜讘讬 - 讗谞讬 诪讘讬谉 诪讗讬驻讛 讘讗 讛专爪讜谉 诇讘诇讜注 砖讙讬讗讜转. 讗谞讬 诪讘讬谉 讗转 讛驻讞讚 诪诇讜讙讬诐 讗专讜讻讬诐 诪讚讬 讜诪讝讛 砖讗祝 讗讞讚 诇讗 诪讜爪讗 讝诪谉 诇讞驻砖 砖讙讬讗讜转 讗讜 诇讟驻诇 讘讛谉 讜诪诪讬诇讗 讬砖 诇谞讜 诪住驻讬拽 讘讗讙讬诐 讙诐 讘诇讬 诇拽讘诇 注讜讚 讚讬讜讜讞讬 砖讙讬讗讜转 诪讛诪注专讻转. 讘讗诪转 砖讗谞讬 诪讘讬谉. 讗讘诇 讛讗诪转 砖讘诇讬注转 砖讙讬讗讜转 诇讗 讞讜住讻转 诇讻诐 讝诪谉 讗诇讗 诪讘讝讘讝转 诇讻诐 讬讜转专 诪诪谞讜, 讻讬 讻砖诪砖转诪砖 诪讚讜讜讞 注诇 讛转谞讛讙讜转 诪讜讝专讛, 讛讚讘专 砖讗转诐 讛讻讬 专讜爪讬诐 讘注讜诇诐 讝讛 诇驻转讜讞 讗转 讛拽讜讘抓 诇讜讙 讜诇专讗讜转 讛讜讚注讛 砖讻转讘转诐 诇注爪诪讻诐 诪讛拽讜讚 讜诪住讘讬专讛 讘讚讬讜拽 诪讛 拽专讛.1 419
# 拽讜讚 住讟讗专讟专 诇驻讬转讜讞 Dashboard 讘 React
讛砖讬诇讜讘 砖诇 React 讜 Redux 注讜砖讛 注讘讜讚讛 诪爪讜讬谞转 讘驻讬转讜讞 讬讬砖讜诪讬诐 讗讬谞讟专拽讟讬讘讬讬诐 讜讘诪讬讜讞讚 讻讗诇讛 砖爪专讬讻讬诐 诇讛爪讬讙 讗讜 诇注专讜讱 诪讬讚注 诪砖讜转祝. 讘诪拽专讛 砖诇 Dashboard 讛诪讬讚注 讬讻讜诇 诇讛讬讜转 注讜诪住 注诇 讛砖专转, 诪住驻专 诪砖讬诪讜转 砖讘讜爪注讜, 砖讜专讜转 拽讜讚 砖谞讻转讘讜 讛讬讜诐 讗讜 讗驻讬诇讜 讗讬讝讛 转讗讬 砖讬专讜转讬诐 驻谞讜讬讬诐 讘讻诇 专讙注 谞转讜谉. 讘注拽讘讜转 砖讗诇讛 砖诇 讞讘专 讻转讘转讬 拽讜讚 住讟讗专讟专 诇讬讬砖讜诪讬诐 诪住讜讙 讝讛 讜讗谞讬 诪砖转祝 讗讜转讜 讻讗谉 讙诐 讗转讻诐.
## 讗诪诇拽
讛拽讜讚 谞诪爪讗 讘拽讜讚住谞讚讘讜拽住 讘拽讬砖讜专 讻讗谉: https://codesandbox.io/s/ecstatic-chandrasekhar-1cl0d
讜讗驻砖专 诇专讗讜转 讗讜转讜 诇讬讬讘 讘讛讟诪注讛 讻讗谉:
<iframe src="https://codesandbox.io/embed/ecstatic-chandrasekhar-1cl0d?fontsize=14&hidenavigation=1&theme=dark" style="width:100%; height:500px; border:0; border-radius: 4px; overflow:hidden;"
title="ecstatic-chandrasekhar-1cl0d"
allow="geolocation; microphone; camera; midi; vr; accelerometer; gyroscope; payment; ambient-light-sensor; encrypted-media; usb"
sandbox="allow-modals allow-forms allow-popups allow-scripts allow-same-origin"
></iframe>
## 讗讬讱 讝讛 注讜讘讚
讛讚砖讘讜专讚 讻讜诇诇 Redux Store 砖砖讜诪专 讗转 讛诪讬讚注 讜砖谞讬 Widgets 砖讬讜讚注讬诐 诇讛爪讬讙 讗转 讛诪讬讚注: 讗讞讚 讘爪讜专转 讟讘诇讗 讜讗讞讚 讘爪讜专转 讙专祝.
讛诪讬讚注 谞砖诪专 讘转讜专 诪注专讱 讚讜-诪讬诪讚讬 讻讚讬 砖讬讛讬讛 拽诇 诇讛爪讬讙 讗讜转讜. 讛砖讜专讛 讛专讗砖讜谞讛 讛讬讗 讛讻讜转专讜转 讜讗讞专讬 讝讛 讛诪讬讚注 注爪诪讜. 讘砖讘讬诇 讛讚讜讙诪讗 讛诇讻转讬 注诇 诪讚讬讚转 rpm (讘拽砖讜转 诇讚拽讛) 诇讗讜专讱 讝诪谉, 讻诇讜诪专 讗讜讘讬拽讟 诪讬讚注 砖谞专讗讛 讻讱:
data: [
['time', 'rpm'],
['10:00', 50],
['10:15', 60],
['10:30', 50],
['10:45', 80],
['11:00', 30],
],
讘谞讜住祝 讚砖讘讜专讚讬诐 谞讜转谞讬诐 诇诪砖转诪砖讬诐 讗驻砖专讜转 诇讘讞讜专 讗讬讝讛 Widgets 讬讜爪讙讜, 讜讙诐 砖诇谞讜 诇讗 砖讜谞讛. 讘砖讚讛 谞讜住祝 讘 store 讗谞讬 砖讜诪专 讗转 专砖讬诪转 讛 Widgets 砖诪讜爪讙讬诐 注诇 讛诪住讱 (讻专讙注 谞转诪讻讬诐 专拽 讟讘诇讗 讜讙专祝):
widgets: new Set(['table', 'graph']),
讘讝讻讜转 讛讞讬讘讜专 诇 Redux 砖谞讬 讛 Widgets 诪拽讘诇讬诐 讗转 讛诪讬讚注 讘讝诪谉 讗诪转 讜讻诇 注讚讻讜谉 砖诇 讛诪讬讚注 讬讜驻讬注 诪讬讬讚讬转 讘砖谞讬讛诐. 讻专讙注 讘拽讜讚 讛住讟讗专讟专 讗讬谉 讗驻砖专讜转 注专讬讻讛 讗讝 讛讚专讱 讛讬讞讬讚讛 诇专讗讜转 讗转 讝讛 讛讬讗 诇砖诇讜讞 讛讜讚注转 砖讬谞讜讬 注专讱 诪转讜讱 讛 Developer Tools.
讗转 讛讙专祝 爪讬讬专转讬 注诐 recharts 砖讛讬讗 住驻专讬讬转 讙专驻讬诐 诪讗讜讚 谞讜讞讛 诇专讬讗拽讟. 讬砖 讙诐 转讬注讜讚 讟讜讘 讜讛诪讜谉 讚讜讙诪讗讜转 讘讗转专 砖诇讛诐, 讜讘谞讜住祝 诇 Line Graph 砖讘讚讜讙诪讗 讛诐 讬讜讚注讬诐 诇爪讬讬专 讙诐 讙专驻讬诐 砖诇 注诪讜讚讬诐, 砖讟讞讬诐, 注讜讙讜转, 专讚讗专, 谞拽讜讚讜转, 诪砖驻讱 讜讗驻讬诇讜 诪驻讛.
## 讛专讞讘讜转
讬砖 讛诪讜谉 讚专讻讬诐 诇讛驻讜讱 讗转 讛住讟讗专讟专 讛讝讛 诇讗驻诇讬拽爪讬讛 诪注谞讬讬谞转. 讛谞讛 讻诪讛 专注讬讜谞讜转:
1. 讗驻砖专 诇讛讜住讬祝 拽讜讚 爪讚 砖专转 讜 Middleware 砖砖讜诇祝 讻诇 砖谞讬讛 讗转 讛诪讬讚注 讛诪注讜讚讻谉 诪讛砖专转. 讛诪讬讚注 讛讞讚砖 讬讬讻谞住 诇 Redux Store 讜讘讗讜驻谉 诪讬讬讚讬 讬讜爪讙 讘讻诇 讛 Widgets 砖注诇 讛诪住讱 诪讛 砖讬转谉 转讞讜砖讛 砖诇 注讚讻讜谉 讞讬.
2. 讗驻砖专 (讜专爪讜讬) 诇讛讜住讬祝 拽讜讚 CSS 讻讚讬 砖讛 Widgets 讬讛讬讜 诪住讜讚专讬诐 讬驻讛 讬讜转专 注诇 讛诪住讱. 讛讛专驻转拽谞讬诐 砖讘讬谞讬讻诐 讬讻讜诇讬诐 诇讝专讜拽 驻谞讬诪讛 讗转 react-dnd 讜讻讱 诇讗驻砖专 诇诪砖转诪砖讬诐 诇住讚专 诇注爪诪诐 讗转 讛 Widgets 讘讗诪爪注讜转 讙专讬专讛 注诇 讛诪住讱. 讜诇砖诪讜专 讗转 讛住讬讚讜专 讘 local storage 讻讚讬 砖讬讬砖讗专 诇谞讜 讙诐 诇驻注诐 讛讘讗讛.
3. 讗驻砖专 诇讛讜住讬祝 诪住讱 驻转讬讞讛 砖讬爪讬讙 专砖讬诪讛 砖诇 Dashboards 砖诪讜专讬诐 讘诪注专讻转. 讻诇 Dashboard 讬讻讜诇 诇讛拽砖讬讘 诇讗讜讘讬拽讟 诪讬讚注 砖讜谞讛 讜诇讛爪讬讙 讗讜转讜 讘讗诪爪注讜转 Widgets 砖讜谞讬诐. 诪砖转诪砖讬诐 讬讜讻诇讜 诇讬爪讜专 Dashboards 讞讚砖讬诐 讗讜 诇诪讞讜拽 讻讗诇讛 砖讛诐 讻讘专 诇讗 讗讜讛讘讬诐.
专注讬讜谞讜转 谞讜住驻讬诐? 讚专讬砖讜转 砖讗转诐 诇讗 讘讟讜讞讬诐 讗讬讱 诇诪诪砖? 诪讜讝诪谞讬诐 诇住驻专 讜诇砖转祝 讘转讙讜讘讜转.