摘要:實踐專家用戶的花式使用實踐專家用戶的花式使用實例演示實例演示我們用一個簡單的例子,看看在前端電子表格單元格計算中,如何使用異步函數。這一次用戶使用異步函數從服務器獲取當前服務名,并在顯示出來。
60年代時,操作系統中獨立運行的單元通常是進程。但隨著計算機技術的發展,人們發現在進程運行過程中,創建、撤銷與切換都要花費較大的時空開銷。
到了80年代為了解決這一問題,出現了更小的獨立運行基本單位——線程。
操作系統把 CPU 處理時間劃分成許多更小的時間片,在每一個獨立時間片執行一個線程的指令,到下一個時間片繼續執行下一線程的指令,各線程輪流執行,由于每一個時間片時間都比較短,所有線程都會運行,對于使用者而言就好像所有線程在同時進行。最終達到的效果就是在編程時可以創建多個線程,同一時間運行,各線程可以"并行"運行,以完成不同的任務。
這時新的問題也出現了,在多帶帶線程的運行模式之下,一段代碼調用另一段代碼時,只能采用同步調用,只有當前代碼執行完成返回結果之后,調用才能繼續往下執行。用一個例子就是現在只有一個水槽,一匹馬想喝水只能等上一匹馬走了才能繼續喝。
而有了多線程的支持,可以采用異步函數的調用,這個問題就迎刃而解了。
程序中會有很多內容,計算內容復雜、渲染內容繁多,在處理過程中需要花費比較多的時間。當某個模塊A調用了模塊B的處理內容時,這時模塊B中的內容就需要一些時間處理,此時模塊A如果不停地等待,就會嚴重影響程序性能。在實際情況中,就比如在前端頁面中需要進行在線填報的數據處理,需要對數據內容進行計算后放入表格中展示,這是由于計算并未完成,頁面內容也不顯示,給用戶帶來的感覺就是內容都點擊運行了,但是頁面遲遲沒有任何反饋。
出現了異步函數的調用之后,此時執行的模塊A和模塊B分別屬于不同的線程。
在異步調用中,模塊A不需要等到模塊B返回內容,就可以繼續執行后續代碼。
模塊B中的內容執行完畢后,會通知模塊A:我這邊處理完畢,你記得處理后續內容。
借助異步調用,可以把剛剛我們提到的前端頁面中顯示問題進行優化:把整個初始化處理放進一個多帶帶線程,主線程啟動此線程后接著往下走,讓主窗口瞬間顯示出來。等思索需要進行的操作的內容時,數據計算處理就已經在暗中處理完畢;程序開始穩定運行以后,異步調用還可以進一步優化人機交互的過程。用戶點擊鼠標時進行操作的時候,操作內容比較費時,點擊后系統沒有立馬作出回應,這會讓用戶的使用體驗很糟糕。將更費時、速度更慢的操作內容轉為異步調用,讓主線程隨時恭候下一條消息,這樣用戶的鼠標操作動作響應速度更快,使用體驗自然大大提升。
我們用一個簡單的例子,看看在前端電子表格單元格計算中,如何使用異步函數。
var ServerDecode = function () {};ServerDecode.prototype = new GC.Spread.CalcEngine.Functions.AsyncFunction("DECODE", 1, 255);ServerDecode.prototype.evaluateAsync = function (context, arg1) { $.get("decode/" + arg1, function (data, status) { context.setAsyncResult(data); });};spread.addCustomFunction(new ServerDecode());sheet.setFormula(0, 1, =DECODE(A1));
在這個算法中我們將設定的計算解析方法部分放在服務器上,方法名稱叫DECODE
下一步將參數用jquery.get請求發送到服務器中,然后獲取請求內容后完成設置
然后將整個異步函數注冊進入Spread中
最后在B1單元格中,輸入DECODE(A1)
這樣當A1單元格內容發生變化的時候,B1就會根據我們設定的計算規則重算成對應內容
工具總在不同人手中被挖掘出各種各樣的用法,而在去年冬天我們就收到了用戶反饋的異步函數的各種奇妙使用方式。
他們使用異步函數的參數組合成了一個SQL,發送給數據庫進行數據查詢,并在查詢結束后顯示查詢結果。結果一切正確,但是卻出現了一個小問題。
在使用過程中,用戶發現查詢在整個過程中超過了 四次 ,詢問我們是否是公式出錯?
我們當即開展問題排查,在查看源代碼的過程中我們發現,在最早實現這個功能的時候為了強調數據重要性,當同一個公式中出現多個異步函數調用時,再次計算下一個內容時我們還會再計算一次已經計算過的異步函數的內容。
沒想到用戶確實會這樣使用異步函數,這一部分內容隨后也進行整體調整?,F已調整為每次調用只計算一次異步函數。
有了這次經歷,再遇到用戶對異步函數的其他花里胡哨的用法,我們就見怪不怪了。
果不其然,沒多久又收到了其他用戶的花式使用反饋。
這一次用戶使用異步函數從服務器獲取當前服務名,并在SpreadJS顯示出來。
我們發現這個用戶還在其中添加了格式字符串,用以獲取用戶的二維碼。同時在這里還設置了條件格式,如果用戶沒有登錄會有報錯提示。
這個例子內容雖短,但在這里用戶將異步函數、條件、格式還有格式字符串三個功能都結合在一起使用。
以上就是我們全部對異步函數誕生背景和原理,以及在前端電子表格中異步函數的使用和各種神仙用戶的花式使用,到本節關于電子表格計算原理的全部內容就已經介紹完畢。
覺得內容不錯點個贊再走吧~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/123644.html
摘要:類型瞬時的代碼審查第一種類型是瞬時代碼審查,它發生在結對編程的情景中。相同的專業水平考慮進行結對編程的另一個重要方面,是一起工作時,兩個開發者的專業水平。讓一個初級開發者和一個高級開發者進行結對編程,效果并不好。 本文翻譯自:https://dzone.com/articles/4-... 轉載請注明出處:葡萄城官網,葡萄城為開發者提供專業的開發工具、解決方案和服務,賦能開發者。 沒...
摘要:你應該知道的種設計模式前端掘金每位開發者都努力寫出可維護的易讀的可復用的代碼。繼承關系本前端書籍整理,高清前端掘金發現了一個下載前端書籍的地方,分享給大家。 你應該知道的 4 種 JavaScript 設計模式 - 前端 - 掘金每位開發者都努力寫出可維護的、易讀的、可復用的代碼。隨著應用變得越來越大,代碼的結構也越來越重要。設計模式驗證了解決這個挑戰的重點——在特定環境中,對同類事物...
摘要:解決辦法如下測試表格我們從引入,首先對文件名進行編碼,然后中作為的參數,這時候能成功下載文件,但是文件名是編碼后的名字,要解碼的話,我們需要在里面聲明編碼格式,即這樣的話,對文件名進行解碼,我們的文件名就是中文了。 在寫 flask 后端的時候,特別是在做數據相關的操作的時候,產品往往需要我們做一個導出數據的需求,一般都是導出 excel 格式的文件。 那在 flask 上,如何實現請...
閱讀 739·2023-04-25 19:43
閱讀 3983·2021-11-30 14:52
閱讀 3811·2021-11-30 14:52
閱讀 3872·2021-11-29 11:00
閱讀 3806·2021-11-29 11:00
閱讀 3905·2021-11-29 11:00
閱讀 3584·2021-11-29 11:00
閱讀 6192·2021-11-29 11:00