vscode編輯器打開大項目能夠快速預覽,這是如何做到的?軟體演算法比atom做的好?
同樣是基於瀏覽器開發的工具,vscode就要比atom的【性能】【流暢】【體驗】會好很多,這個是如何做到的,與它是typescript寫的有關係么?好想學習這門黑科技,大神賜教一下.
code 打開大文件只比 atom 快,100MB 以上或者超長行文件請找專用編輯器
因為顯示第一頁是很快的,完全可以後面偷偷的花很長時間大開大文件,然後先刷新出來給你看。這就是完全一樣的蘋果騙人說自己性能高的伎倆啊。
當然大部分程序員是不願意這麼做的,因為太麻煩(逃
如果文件只有幾百kb,全部load進內存。
如果文件有100G,全部load進內存可以阻擋99%的機器。
怎麼辦呢?如果以前沒有看過,那讀最開始100KB(拍腦袋的數字,具體還要看什麼page size,sector之類的),等你快滾到沒看過的那一部分,再偷偷摸摸地讀100KB。
如果有歷史瀏覽記錄,可以從最後瀏覽的位置開始,讀入100KB。但這種做法有個明顯的缺陷,就是不能從一開始就給你展現「當前是第幾行」。
只要處理好文件指針位置、有沒有EOF、保存的時候的處理(文件大小變了)、讀取上下區塊的時機、釋放的時機就可以了。難是不難,但做細緻了不容易。
另外一個更為現實的問題是,作為一個代碼編輯器,如果你的讀入引擎是block by block的,你讓各種插件怎麼配合?插件一定會把這種方法改成一次性全部讀進來……尤其是靜態分析和代碼提示類的插件。
但話又說回來,作為代碼編輯器,為什麼需要處理「大文件」????我認為算是偽需求。
偷懶有理!!!99.99999%一個字,MapViewOfFile。剩下的太複雜就不討論了。
沒遇到過這個?
以前做安卓軟體,TextView 載入超過 30 KB 的文本就感覺卡頓了。後來寫了一個類,用文件流 seek 的辦法,通過換行符作為界定,每次只讀取適當的長度,應該 vs 也是這種邏輯。但 Notepad++ 使用的演算法可能更合理,那個東東才是真的大文件秒開。
並不能秒開吧,打開大文件的時候也會讀條的。而且有時候讀個幾十M的文件就說文件太大不顯示了。
類似的東西我差不多是做過的,實際上這並不是什麼黑科技,無非是解決界面上的邏輯,讓使用者不感到卡就好了,那麼多線程的優勢就出來了,界面層代碼上可以自己開一個線程去處理非同步邏輯,所有的界面庫例如GTK,QT,wxwidgets好像都有現成的idle函數來給使用者調用的,不知道輪子哥的GacUI有沒有,召喚輪子哥 @vczh
@馮子浩描述的很有意思,其實是不管文件大小,界面層都會去讀取一個固定大小的內容的(比如固定頁,固定內存),然後draw()的時候再算出來當前顯示器的大小的內容,小文件感覺不出來,大文件內核層面還得去處理這個文件怎麼拆分,所以大文件會感覺略卡下,因為得算。
既然你很感興趣,既然typescript是JavaScript的一個超集,不如去看看這個開源的用JavaScript來解析pdf的項目,裡邊有相應的處理邏輯,這個項目我在本地改過,不過沒有提交哈哈哈。
鏈接:GitHub - mozilla/pdf.js: PDF Reader in JavaScript這都能扯到typescript?
大文件秒開?多大在你那裡叫大?醒醒吧,幾十個M就說打不開了,害得我還得開個VS……
除了從磁碟載入文件的優化,其它就是預載入了,就像chrome會猜測用戶可能會打開哪些網頁,提前在後台載入。
看到問題我趕緊試了試,根本不行。我一個700M的log告訴我打不開
我表示notepad打開1G文件沒問題
感覺跟無限循環滾動的banner有點像,用個圓形數據結構應該就行。
是進步不少,原先開sqlite源碼,幾十秒就崩了,現在不崩了。但是語法支持沒了。。。
才81M大小的文件都打不開,還說大文件秒開?你這提問先入為主的給了一個肯定的話:"vscode編輯器打開大項目能夠快速預覽",不會是在做推廣吧?
這個不是webkit的特性?
推薦閱讀:
※如何看待 Angular 2.0 使用的 AtScript 是 TypeScript 的超集?
※如何看待Google和Microsoft在Angular JS 2 和 TypeScript上的合作?
TAG:文本編輯器 | JavaScript | 編程工具 | TypeScript |