中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

基于HTML5&Js的在線導航系統架構

發布時間:2020-06-21 14:31:11 來源:網絡 閱讀:806 作者:minepub 欄目:移動開發

本文主要就項目中應用HTML5&Javascript開發導航系統時,遇到的問題做一總結及分享.具體從以下三個方面進行說明:

1.發現和解決問題

   導航系統有這么幾個特點:多任務性,實時性,交互性,數據多樣性.

   針對上述特點個人在進行架構設計時,采用如下解決方案:

   (1)多任務性:采用HTML5的Webworker解決方案.

      HTML5的webWorkers提供了js的后臺處理解決方案,它允許將復雜耗時的單純js邏輯處理放在瀏覽器后臺線程中進行處理,讓js不阻塞UI線程的渲染。

   (2)實時性:主要體現在實時渲染. HTML5的Canvas可以解決這個問題,

      HTML5的Canvas(畫布)可以用來繪制圖形,圖案,允許使用腳本動態渲染點陣圖像。簡單來說,Canvas就是允許你在HTML5中,使用Javascript去繪制你喜歡的任何圖形,包括文字,圖片、線、點、各種形狀等。這正是導航系統所需要的基礎矢量繪圖功能.

   (3)交互性:主要體現在導航人機交互界面HMI框架的設計.項目采用 利用開源類庫zepto來搭建導航HMI框架的方案解決此問題.

      zepto是一個專為mobile WebKit瀏覽器(如:Safari和Chrome)而開發的一個JavaScript類庫.能夠幫助開發人員簡單、快速地完成開發任務。最重要的是這個JS類庫,是超輕量級的,只有5KB.

      HMI框架在設計時,主要考慮:

      1)實現頁面結構和數據的分離。

      2)實現html和js的分離。

      3)減少組件間的耦合,實現業務模塊的組件化,獨立性。

      4)方便多人并行開發和測試。

      基礎框架圖如下:

基于HTML5&Js的在線導航系統架構

      該框架實現了HMI基本功能(包括畫頁的遷移,數據的傳遞).框架中,畫頁是基于div設計的,即每一個畫頁使用一個div來表示,畫頁的遷移過程就是控制div顯示與否的過程.

      開發人員在制作頁面時,每個頁面需要制作一個HTML(內部是一個div)文件和一個頁面類(js)文件,頁面文件(html)用來描述頁面的構成和元素,頁面類(js)用來獲取數據,渲染頁面和增加頁面元素的監聽.

   (4)數據多樣性:主要體現在數據格式及數據來源的多樣性.

      1)導航用二進制數據的解析方案

          通常我們使用的導航數據都是緊密排列的二進制格式數據,此種數據,我們采用的解析方案是:使用ArrayBuffer進行解析.ArrayBuffer表示二進制數據的原始緩沖區,該緩沖區用于存儲各種類型化數組的數據。實際應用時,將ArrayBuffer傳遞到類型化數組或 DataView 對象,來解釋緩沖區中相關數據類型.

      2)導航用配置文件的解析方案

          配置文件的解析,在Javascript中比較簡單,直接使用Json進行存儲和讀取即可.Json是一種輕量級的數據交換格式,在Javascript中可以將對象直接轉換為Json數據,也可反向將Json轉換為對象.

      3)導航數據的本地存儲

          導航數據的本地存儲采用HTML5的localStorage特性.localStorage是瀏覽器用于存儲本地數據的一個對象.其保存的數據,一般情況下是永久保存的.在應用時,我們使用localStorage來保存配置文件和緩存數據.


   在進行架構設計時,除了考慮上述因素外,還要考慮如下問題:

   (1)導航NaviCore框架設計

基于HTML5&Js的在線導航系統架構

     在設計之初,我們考慮NaviCore框架需具備如下特點:

     1)具備Js腳本按需加載特性.

        由于導航系統比較龐大,js腳本必然非常多,腳本之間的引用關系如果控制不好后期將成為很大問題,為解決此問題,我們采用Js腳本按需加載的解決方案,即當某個腳本js需要使用其他腳本中的數據或對象時,采用某種方式(如:像C語言的Include或Java的Import),在文件開頭做一聲明,框架根據聲明進行加載,達到按需加載的目的.

     2)實現類的繼承關系

        Javascript的繼承關系是通過prototype實現的,但prototype有一些不足(如:父類的構造函數不是像JAVA中那樣在給子類進行實例化時執行),因此,我們重新設計了一套類的繼承模型,實現了類的繼承,類的構造函數執行.

     3)減少模塊間的耦合,增加獨立性。

        為減少模塊間耦合,增加獨立性,我們設計了一套事件通知機制,該機制支持瀏覽器事件,支持dom對象綁定,也可以綁定到某一個類對象,采用觀測者模式設計,大大減少了模塊間的耦合度.


   (2)異常處理

        我們使用Javascript中的try catch處理異常.請大家注意,一定要指定window.onerror錯誤處理函數。這樣可以第一時間捕捉到程序未捕捉的異常.


2.預見與避免錯誤

   在設計階段,我們預計,后期性能問題可能是比較棘手的問題.因此,在設計階段專門針對性能相關問題點進行了分析和設計.

   1.對于更新頻率較高的過程的分析.

   (1)Map刷新頻率可能會很高,這可能會導致系統負荷較高.

      采用異步地圖刷新機制,并控制地圖刷新頻率,保證系統負荷.

   (2)DG對聲音文件下載頻率較高,導致網絡帶寬被長時間占用.

      采用聲音文件分類下載機制,共通聲音文件直接放入安裝包,常用聲音文件緩存到本地的方式減少帶寬占用.

   2.對于耗時較長的處理過程的分析.

   如果主線程中有耗時較長的處理過程,則必然會阻塞UI響應,影響用戶體驗.對此,我們采用在程序執行入口加入性能監控代碼的方式,保證第一時間找到問題點.對于耗時較長的處理過程,采用Webworker解決方案,將其放入后臺獨立線程中進行處理.

3.分析和總結

   本項目總結的技術方案和設計文檔有:AD架構設計文檔,概要設計文檔,詳細設計文檔,HMI架構設計方案.


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐石市| 搜索| 进贤县| 桃园县| 本溪| 潜山县| 肥东县| 秀山| 叶城县| 丘北县| 漯河市| 建昌县| 西安市| 石城县| 沙河市| 南丹县| 武山县| 钟山县| 且末县| 班玛县| 乌拉特前旗| 陈巴尔虎旗| 京山县| 天峨县| 潮州市| 扎囊县| 江津市| 周口市| 武冈市| 张家港市| 泾源县| 镇巴县| 于田县| 潜江市| 山东省| 乐安县| 买车| 钟山县| 武川县| 凤庆县| 上栗县|