專訪搜狗輸入法 iOS 版開發負責人李騰杰:第三方輸入法開發與優化實踐

入法是一種對性能要求極高的產品,不同于普通應用開發,很多在普通應用開發看來不是問題的,在輸入法看來卻是比較關鍵。同時,由于 iOS 系統的某些限制,輸入法不得不在產品功能和性能方面做出調整,以盡可能地優化用戶體驗。在MDCC 2016 中國移動開發者大會前夕,iOS 開發峰會演講嘉賓——搜狗輸入法 iOS 版負責人李騰杰接受 CSDN 專訪,分享了其與團隊在第三方輸入法開發與優化方面的經驗,以及搜狗輸入法 iOS 版開發團隊在新技術與一線項目開發相結合的嘗試與實踐。

專訪搜狗輸入法 iOS 版開發負責人李騰杰:第三方輸入法開發與優化實踐

搜狗輸入法 iOS 版負責人 李騰杰

請介紹一下您和目前的工作,以及關注/正在研究的技術。

李騰杰:我目前在搜狗公司從事 iOS 平臺搜狗輸入法的相關研發工作,重點關注輸入法關鍵性能指標(如鍵盤調起速度、內存、CPU 等)和代碼架構的優化。同時,也在研究 Swift 3,在合適的時間點安排項目適配 Swift 3。

在 iOS 開發新的技術點方面,搜狗輸入法 iOS 版開發團隊有著怎樣的嘗試與實踐?

李騰杰:在 iOS 動態更新方案上,我們跟進了對 JSPatch 和 React Native 的調研,最后根據輸入法的項目實際情況,擇選 JSPatch 應用于輸入法,完成了輸入法熱更新的工作。JSPatch 集成較為簡單,是一種應用較廣泛的熱修復解決方案,它可以通過服務器后臺下發 JavaScript 腳本,實時修改 Objective-C 方法的實現,達到修復 Bug 和動態運營的目的。

由于 JSPatch 存在性能方面的限制,實際項目中僅用于做一些輕量級代碼的修復,并沒有頻繁的使用??悸塹槳踩?,輸入法自行部署了服務器后臺來分版本管理下發的腳本,針對鍵盤擴展和其容器 App 兩種類型的下發腳本。同時,由于輸入法鍵盤擴展的特殊性,受到鍵盤允許完全訪問控制權限的影響,輸入法嘗試了通過鍵盤容器 App 來獲取修復腳本,借由相同 Group 的共享目錄來影響鍵盤。在輸入法關鍵性能指標的優化上,我們也跟進了 FBRetainCycleDetector(Facebook開源的一個內存泄漏檢測解決方案)、FastImageCache(Path 團隊開發的一個開源庫,用于提升圖片的加載和渲染速度)的調研,并運用于項目實踐,優化產出效果較好,確實發現了一些代碼實現中的問題,并改進了輸入法換膚的穩定性。

在搜狗輸入法 iOS 版研發與更新過程中,遇到過哪些比較棘手的問題,如何解決的?

李騰杰:最棘手的問題,往往是和 iOS 系統相關的,這里舉一個輸入法遇到的字符繪制產生的詭異崩潰。我們在分析輸入法收集的崩潰日志時,曾經遇到一種特別詭異的崩潰,從崩潰棧來看是崩潰在候選繪制上,其占比也挺大,直接影響到輸入法的穩定性。單純分析崩潰棧對應的代碼調用,并沒有任何問題,也確認了并不是內存越界等造成的崩潰,我們嘗試了各種自動化評測或人工操作方案,都沒能復現該崩潰。經過初步分析,懷疑是和系統繪制某些特定字符異常導致的崩潰,于是就對崩潰日志收集進行了改進,增加了對崩潰異常時當前候選內容的收集,上線版本后通過收集的崩潰日志,發現對應的候選內容在繪制時并沒有任何問題。

鑒于這種情況,我們在原有自動化評測的基礎上,單獨抽調一臺 iMac 機器,通過 Xcode 真機調試的方式來分多個機型和系統進行更細致的評測,最終在其中一臺測試機器上發現了類似崩潰。且發生崩潰時,在 Xcode 上看到的當前繪制候選字符是一個表示“哭”的顏文字表情。一般情況下繪制該表情并不會有什么問題,我們在該機型上又持續進行了三次長時間的模擬輸入評測,有一次崩?;故怯敫帽砬橄喙?。根據這個情況,我們在后續的上線版本中,從詞庫中剔除了該表情,根據后臺監測到的崩潰情況,這個困擾許久的崩潰問題終于得到解決。最終分析結論是 iOS 系統在某些條件下繪制該復雜的表情可能會產生崩潰,而為何會如此,一直也沒弄清楚,雖然這個崩潰確實是修復了。

中文字體文件大,以 Webfonts 的方式加載困難加載比較困難,搜狗輸入法是怎么優化的?

李騰杰:由于中文字體比較大,且從 iOS 8 開始被系統一旦加載,并不能立即釋放,而是由系統決定在什么時機釋放,且不能完全釋放。針對這種情況,搜狗輸入法的候選詞繪制并沒有開放讓用戶自定義,而是根據不同的 iOS 系統,使用其默認的系統字體;輸入法在皮膚個性化里,允許皮膚作者自定義鍵盤區域的文本顯示字體,并建議皮膚作者將該皮膚對應的字體文件包含的字符集控制在最小夠用,避免字體太大導致皮膚下載流量和內存占用的增加。如果輸入法被啟用的皮膚沒有指定字體,則輸入法使用當前系統的默認字體。上述方案是輸入法認真權衡用戶輸入性能優先,并兼顧輸入法皮膚功能多樣性之后,得到的一個優化方案,也避免了中文字體過大對輸入法性能帶來的壓力。

在輸入法框架方面,搜狗輸入法是如何實現不同平臺代碼復用的?

李騰杰:搜狗輸入法會將某些不同平臺共有的基礎??椋ㄈ縭淙敕諍耍┦褂肅/C++來實現,并用宏分隔開平臺相關的某些具體 API 實現,封裝成統一的接口來供平臺調用。在更新某些??櫚墓δ蓯迪質?,對平臺調用始終透明,盡量保證接口的一致性。

搜狗輸入法的內核???,劃分了接口層、功能邏輯層和設備層三個層次,接口層對應平臺代碼調用,接口一般相對較為固定,除非大的功能調整才變化。功能邏輯層封裝了具體的內核功能邏輯的實現代碼,對各個平臺是透明的,主要用于接口層的調用。設備層封裝了與平臺相關的某些API實現,不同平臺會有不同的技術實現,如字符串操作、文件操作等,供功能邏輯層調用,一般很少變化。通過這三個層次的封裝,內核實現某個新功能時,一般只需要調整功能邏輯層的實現,然后通過內核自動化測試工具來完成測試,就可以方便地提供給各個平臺使用,平臺調用也不用做什么接口層的更改。

專訪搜狗輸入法 iOS 版開發負責人李騰杰:第三方輸入法開發與優化實踐

搜狗輸入法的 Emoji、顏文字一直以來都頗受用戶喜愛,使用率非常高,在這方面你們做了哪些工作?

李騰杰:在不同的 iOS 系統上,Emoji 表情的顯示效果可能會有差異,且隨著 iOS 系統的更新,Emoji 表情編碼也會有新增或更改,這就要求輸入法始終關注每個 iOS 系統的 Emoji 全集,及時更新到輸入法中。搜狗輸入法通過自動化評測的手段來分析每個 iOS 版本其系統表情鍵盤的 Emoji 表情全集,看是否有新的變化,并及時跟進更新。同時,Emoji、顏文字等表情字符的繪制又比較消耗資源,輸入法嘗試了提前將字符繪制成圖片打包的方式來解決實時繪制表情字符造成的內存壓力;并考慮到相同 Emoji 編碼在不同 iOS 系統上的顯示效果差異,又調研了在 iOS 9 及以上系統繪制 Emoji 表情不緩存的技術解決方案,將圖片和繪制兩種方式結合使用,保證了 Emoji 和顏文字表情功能的良好性能。除此之外,輸入法提供了表情商城,用戶可以在里面很方便地下載到顏文字表情包、圖片表情等,大大豐富了用戶的輸入體驗。

Emoji、顏文字功能內存方面的優化實踐,在后續的 MDCC 2016 移動開發者大會上會詳細介紹。

從 2009 年加入搜狗從事輸入法的相關研發工作至今,從您的親身實踐來看,iOS 系統對于第三方輸入法研發的支持有著怎樣的改進與發展?就目前而言,在開發過程中,還有哪些特別想吐槽的限制?

李騰杰:iOS 系統在 iOS 8 上才開始開放第三方輸入法的研發,在這之前,只能通過越獄的方式來進行第三方輸入法的研發,Hook 系統輸入法相關的 API 來實現輸入法的功能。越獄方式開發輸入法不容易,每每 iOS 系統更新,第三方輸入法都需要及時跟進,調研該 iOS 系統輸入法相關 API 是否有變更,并在新的越獄工具出來之后,以最快的速度去跟進適配,保證用戶率先用上最穩定的輸入法。

但越獄輸入法由于 iOS 系統的限制,性能和穩定性方面難免存在一些避免不了的問題,很難將輸入法體驗做到完美。且越獄輸入法的安裝門檻也比較高,阻隔了很大一部分用戶的第三方輸入法需求。從 iOS 8 開始,iOS 系統對第三方輸入法的研發提供了支持,接口也比較穩定,開發者在適配不同 iOS 系統上耗費的精力也少了很多,廣大用戶也能很便捷地通過 App Store 安裝自己想要的輸入法,皆大歡喜的場面。

即便如此,iOS 系統至今仍有的某些限制,仍給第三方輸入法造了不少麻煩事兒,主要有以下三個點:

首先,是系統第三方自定義鍵盤框架的穩定性不夠,諸如升級輸入法后舊版本的輸入法進程仍存在、未能及時更新導致某些界面顯示異?;蟣覽?;鍵盤無法調起;鍵盤需要重新添加等等,都給用戶體驗造成了較大影響,而第三方輸入法又無能為力。

其次,是iOS系統對第三方鍵盤的諸多限制,如允許完全訪問控制權限的限制,限制了用戶需要開啟入口隱蔽的權限開關,才能體驗到輸入法的某些特色功能;而且,由于iOS系統的限制,第三方鍵盤并沒有如系統鍵盤一樣被系統一視同仁,鍵盤調起體驗始終無法像系統鍵盤那么流暢。

再者,是iOS系統對第三方鍵盤的資源使用限制比普通App更為嚴格,一旦第三方鍵盤使用的內存被它認為較多或系統內存緊張,就會直接kill鍵盤進程,切換成其它輸入法,直接影響了輸入法的穩定性,也對輸入法開發的性能優化提出了相比越獄輸入法更高的挑戰。

根據您的經驗,當前在開發第三方 iOS 輸入法方面,開發團隊所面臨的主要挑戰是什么?在此過程中又容易陷入怎樣的誤區?

李騰杰: 輸入法不同于普通 App 的開發,對性能非常敏感,開發團隊面臨的主要挑戰是兼顧功能效率的同時如何充分保障性能,并讓每個開發組員都對性能足夠敏感和關注。在實際項目過程中,針對某些涉及敏感性能的技術實現方案,可能會涉及到新技術的使用,需要避免“它性能應該沒問題”這種猜測方式,通過評測來評估新技術的性能如何,這看起來有點麻煩,但確實省不得。

輸入法在最初適配不同鍵盤尺寸的按鍵布局時,使用了 Autolayout 的解決方案,Autolayout 方法簡單、強大易用、可讀性強,但是 updateConstraints 調用時機不一樣,計算布局的耗時也不一樣;尤其在適配較為復雜的界面依賴布局時,耗時會顯著增加,性能會比直接setFrame差。下圖所示是某技術同行對Autolayout的性能分析(詳見://pilky.me/36/)。

專訪搜狗輸入法 iOS 版開發負責人李騰杰:第三方輸入法開發與優化實踐

輸入法最早就踩了 Autolayout 性能的這個坑,缺少對該技術方案的詳細分析評測,影響了鍵盤調起速度,后續針對鍵盤調起速度的優化過程中,通過 Instruments 的 Time Profiler 才定位到該問題。

在輸入法某些基礎關鍵性能指標(如鍵盤調起速度、內存等)的優化上,輸入法同樣踩過一些坑,這些坑在普通App看來可能并不是太大的問題,但在輸入法上體現卻相對明顯,在 MDCC 上我會就此做詳細分享。

對于輸入法的使用,用戶比較關心信息安全的問題,搜狗輸入法對于用戶信息的?;び兇旁躚木??

李騰杰:首先,輸入法本身不收集用戶的任何輸入信息,用戶輸入信息在本地進行運算,并給出對應的候選詞結果,然后再調用系統 API 直接上屏到輸入框之中,中間不做任何緩存。其次,輸入法某些功能需要訪問到用戶隱私信息時,會在產品交互層面,明確說明訪問哪些用戶信息及其用途,只有用戶允許了該訪問,才會進行后續的功能邏輯。再者,iOS 系統為所有的第三方輸入法都提供了“允許完全訪問控制權限”的選項,用戶一旦關閉該選項,那輸入法便無法進行聯網或訪問系統某些權限要求比較高的功能???。另外,輸入法某些功能的聯網請求,諸如云輸入、詞庫同步功能,會使用加密方式與服務器進行通信,確保整個通訊過程是非明文可靠的,且整個請求不在服務器緩存任何數據。

您在 MDCC 2016 上將分享《搜狗輸入法性能優化實踐》,希望此次演講能夠為聽眾帶來哪些方面的啟發?

李騰杰: 這次分享的搜狗輸入法在項目過程中某些關鍵性能指標的優化實踐,希望通過實際案例來說明一些性能優化的方法和建議,與同行共同交流。

對于您而言,您最期待在 MDCC 2016 上看到哪些內容?收獲什么?

李騰杰: 期待在今年的 MDCC 上看到 iOS、Android 相關新技術如何應用于實際項目,與同行交流性能優化方面踩過的坑,學習好的優化經驗。

來源:CSDN

上一篇: Git之rebase操作分享

下一篇: 一起來認識蘋果在歐洲的首家 iOS 開發學院

分享到: 更多
北京pk拾赛车高手论坛 双色球开奖数据查询 p3六码遗漏组六分析 抢庄牌九平台官网 pk10赛车冠军永无规律 彩票倍投6期方法 龙虎和时时彩骗局 体彩11选五胆拖投注表 篮球直播 广东时时出奖信息 七星彩芝麻数据 全天pk10最精准计划 双色球最新开奖结果 一肖中特免费资料公开选料 扑克三公玩法 pk10冠亚和单双对刷