整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          WEBAPP秘密開發(fā)筆記 第五集

          WEBAPP秘密開發(fā)筆記 第五集

          標(biāo):實現(xiàn)一個可以安裝在手機上運行的,ui效果很好的app (開飯了)。

          前端框架匯總:

          框架其實就是優(yōu)秀的代碼,幫助封裝了工具、類庫等,提高開發(fā)速度。

          jQuery: js的庫 簡化DOM操作

          jQuery UI : 是一個html組件庫,實現(xiàn)PC端應(yīng)用

          bootStrap: 響應(yīng)式 pc+移動端 偏向于PC端

          angularJS: 是一個實現(xiàn)SPA的js的MVC框架,數(shù)據(jù)操作比較頻繁

          Ionic:h5的實現(xiàn)移動端應(yīng)用程序的框架,集成了ng、cordova、ui庫、uiRouter

          PhoneGap/cordova:通過plugin插件的形式 提供了豐富的js API,實現(xiàn)原生應(yīng)用程序才能調(diào)用的功能(hybridApp)

          配對組合:框架之間的定位是否有相同的部分

          jQuery+jQueryUI

          jQuery+bootStrap

          jQuery+ng 不建議

          jQuery+Ionic(ng+phoneGap+ui) 不建議

          jQueryUI+bootStrap 不建議

          jQueryUI+ng

          jQueryUI+Ionic 不建議

          bootStrap+ng

          bootStrap+Ionic 不建議

          技術(shù)選型

          ①考慮生態(tài)圈

          ②明確框架的賣點

          ③根據(jù)需求,選擇

          ④技術(shù)是否有定位有很多相似的地方,如果是,建議選其中最好的

          ionic (css\ion-list$ionicLoading + uiRouter )

          目的:實現(xiàn)移動端的app(開飯啦)

          技術(shù)構(gòu)成: ionic

          ('ui庫->內(nèi)容'+

          'ng->數(shù)據(jù)'+

          'uiRouter->處理路由'+

          '打包:部署在服務(wù)器')

          ①完成腳手架的搭建

          ②模擬數(shù)據(jù) 把頁面展示出來

          ③聯(lián)調(diào),在前端調(diào)用后端的接口進行調(diào)試(邊做邊測試)

          ④部署到生產(chǎn)環(huán)境

          1、項目的搭建(15:45 - 16:10)

          ①、創(chuàng)建項目,添加css、js、img、tpl文件夾,添加必須引用的css、js文件,添加自定義的css、js文件以及img圖片,并創(chuàng)建完整的引導(dǎo)頁面kaifanla.html;

          ②、編寫kaifanla.html文件:

          定義模塊ng-app=”kaifanla”


          引入ionic.css以及自定義的css文件

          定義用于替換模板的視圖

          引入ionic_bundle.js文件,并引入自定義的js文件

          ③、添加模板文件:添加 start/main/detail/order/myorder頁面,每個頁面中刪掉原有內(nèi)容,添加一個文字;

          ④、編寫 kaifanla.js 文件

          定義各自的控制器

          定義路由:為所有模板定義路由,默認跳轉(zhuǎn)到start

          ⑥、測試:跳轉(zhuǎn)是否正常,是否有錯誤

          2、所有靜態(tài)頁面的編寫---》運行通暢,數(shù)據(jù)靜態(tài)死數(shù)據(jù)

          ①start.html (16:25 - 16:40)

          1.1 頁面布局

          1.2 實現(xiàn)該頁面時,將通過js跳轉(zhuǎn)的方法封裝在控制器中(所有的代碼片段都可以去用)

          ②main.html 模擬數(shù)據(jù)

          http://ionicons.com/

          可以通過ng-include包含頁頭和頁尾

          has-header has-footer --> ion-content

          ③detail.html 詳情頁

          card

          (9:45 - 10:10)

          ④order.html 表單提交頁

          ⑤myOrder.html 個人中心頁

          通過grid 模擬 table 展示數(shù)據(jù)

          每日一練:

          完成所有的靜態(tài)頁面。

          3、調(diào)用php頁面,聯(lián)調(diào)

          在進行聯(lián)合調(diào)試時,如果遇到了問題?

          ①確認請求的api接口是否正確

          ②請求服務(wù)器端時,確保參數(shù)的個數(shù)和類型服務(wù)要求

          ③服務(wù)器端返回的數(shù)據(jù)是否正確

          ④經(jīng)常去看network(response\header)、console

          條件:

          ①工程在c:\xampp\htdocs

          ②xampp的apache和mySql跑起來

          ③測試-》 localhost: / (不要直接在webStorm中打開)

          要求:通過service創(chuàng)建一個自定義服務(wù)$kflHttp,

          ①在服務(wù)中封裝一個方法sendRequest(url,func),在這個方法中有兩個參數(shù),第一個是要求的地址,第二個參數(shù)是請求成功之后要執(zhí)行的處理函數(shù);

          ②在sendRequest方法被調(diào)用時啟動一個‘正在加載數(shù)據(jù)’的窗口,當(dāng)成功的請求到服務(wù)器端的數(shù)據(jù),關(guān)閉加載中的窗口。

          ①main.html

          ng-model

          -->

          初始化模型數(shù)據(jù):$scope.inputTxt={kw:''};

          $watch : $scope.$watch('inputTxt.kw',function(){})

          方向2的數(shù)據(jù)綁定: ng-model='inputTxt.kw'

          嘗試: ion-infinite-scroll 上拉加載更多

          第一步:要將ionInfiniteScroll放到頁面底部

          第二步:on-infinite

          第三步:$scope.$broadcast('scroll.infiniteScrollComplete');

          ②detail.html (2:15 - 2:30)

          發(fā)送: main->a

          接受: detail

          1、配置detail狀態(tài)中的url /detail/:id

          2、$stateParams

          ③order.html(14:50 - 15:20)

          接收detail傳遞來的參數(shù):菜品的id

          點擊下單,將數(shù)據(jù)一起發(fā)給服務(wù)器端,根據(jù)服務(wù)器返回的結(jié)果,將表單隱藏顯示下單結(jié)果

          序列化:

          $HttpParamSerializerJQLike

          ④myOrder.html

          根據(jù)手機號 去查找所有的訂單

          ⑤設(shè)置頁面

          在點擊設(shè)置的時候,有一個設(shè)置頁面(顯示一個列表:關(guān)于--點擊顯示自定義彈窗,退出登錄--點擊回到起始頁)

          自定義彈窗:

          ①創(chuàng)建一個自定義彈窗

          ②顯示

          注冊邀請:http://t.cn/RqG1Nja

          混合編程:

          打開eclipse,將模擬器,新建一個Android應(yīng)用,通過webView的loadUrl

          wv.loadUrl('http://172.163.0.1/ionic_kaifanla/kaifanla.html');

          方式1:

          將前端工程的全部代碼 拷貝到 assets目錄

          方式2:

          將前端代碼放在服務(wù)器,拿到服務(wù)器的url地址(不需要拷貝assets)

          ①確保前端代碼沒問題

          ②將代碼部署在服務(wù)器

          ③編寫java代碼

          //創(chuàng)建WebView類型的一個變量

          WebView wv=newWebView(getApplicationCotnext());

          //允許執(zhí)行js

          wv.getSettings().setJavaScriptEnabled(true);

          //載入指定的頁面

          wv.loadUrl("http://172.173.0.100/chaptor4/webApp/kfl_ionic/kaifanla.html#/settings");

          //設(shè)置內(nèi)容視圖

          setContentView(wv);

          添加網(wǎng)絡(luò)權(quán)限:

          上午:

          迭代

          在之前的基礎(chǔ)上:start main detail order myOrder

          加入購物車。

          詳情頁:立即下單--》添加到購物車

          中間多了購物車的標(biāo)簽: 跳轉(zhuǎn)到購物車頁面,購物車支持產(chǎn)品數(shù)量的編輯。

          一、ZeptoJS概述

          http://zeptojs.com/

          what?是一個接口和JQuery比較類似的js的庫,它的目標(biāo)是實現(xiàn)一個10k以內(nèi)的通用的模塊化的js的庫

          注意事項:ZeptoJS只是實現(xiàn)了JQuery一部分的功能,也有自己的和移動端相關(guān)的處理。

          where?

          針對現(xiàn)代高級瀏覽器,在手機端用的比較多

          why?

          ①非常輕量

          ②有著熟悉的api接口(開發(fā)者不需要太高的學(xué)習(xí)成本)

          ③非常方便的搭配其他庫去使用

          ④核心庫的性能比較好,舍棄了低版本的兼容的支持

          how?

          引入對應(yīng)的zepto.js文件到工程

          在zepto.js中內(nèi)置:

          zepto核心模塊;包含許多方法

          event通過on()& off()處理事件

          ajaxXMLHttpRequest 和 JSONP 實用功能

          form序列化 & 提交web表單

          ie增加支持桌面的Internet Explorer 10+和Windows Phone 8。

          二、ZeptoJS Core Module

          2.1 操作數(shù)據(jù)的基本方法:

          each/map/grep/parseJson/isFunction/isPlainObject.....

          2.2 常見的選擇器

          id、標(biāo)簽、父子、后代、

          class、屬性($('[name=test]'))

          2.3 簡化DOM操作的方法

          增刪改查

          2.3.1 增

          insertAfter insertBefore append appendTo prepend prependTo

          2.3.2 改

          html()

          css()

          addClass()

          width()

          height()

          2.3.3 刪

          remove

          removeClass()

          2.3.4 查

          三、ZeptoJS Detect Module

          $.os

          {android: true,phone: true ,tablet: false}

          $.browser

          {chrome:true,version:"56.0.2924.87",webkit:true}

          四、ZeptoJS Event Module

          on 綁定一個事件處理程序

          off 解除綁定的事件處理程序

          one 第一次事件觸發(fā)之后,將自動解除綁定

          trigger 通過js的方式觸發(fā)指定的事件(多數(shù)都是自定義事件)

          練習(xí):實現(xiàn)一個頁面,在該頁面中有2個按鈕,兩個按鈕的id分別btn1,btn2;

          要求:

          ①點擊btn1,超過5次自動解除綁定

          ②點擊btn2,在第3次,觸發(fā)自定義的事件,彈窗顯示‘自定義事件被觸發(fā)了’

          Zepto.js默認包含5個模塊

          ①zepto核心模塊;包含許多方法

          ②event通過on()& off()處理事件

          ③ajaxXMLHttpRequest 和 JSONP 實用功能

          ④form序列化 & 提交web表單

          ⑤ie增加支持桌面的Internet Explorer 10+和Windows Phone 8。

          一、Zepto的常見模塊

          1、core

          $(''),支持常見的選擇器

          $.each/map/grep/parseJson/camelCames/trim... 和數(shù)據(jù)操作相關(guān)的方法

          insertAfter insertBefore append appendTo prepend prenpendTO

          html/css/addClass/removeClass/width/height

          remove

          next/prev/parent/parents/children..

          detect

          $.os

          $.browser

          event

          on

          off

          one

          trigger

          2、ajax模塊

          $.ajax()

          $.get()

          $.param() 將一個對象進行表單序列化 (在angularJS時

          提供了$httpParamSerializerJQLike(object))

          $.post()

          練習(xí):使用post請求,將{name:'zhangsan'}發(fā)給服務(wù)器端,服務(wù)器端接收到數(shù)據(jù),返回一個{tip:"Hello zhangSan"}.

          通過Zepto中的$.post()來實現(xiàn)要求。

          打開apache,請求注意端口號。

          3、form模塊

          serialize

          serializeArray

          submit

          使用基本步驟:需要給表單元素指定name屬性。

          注意事項:

          如果表單元素中有復(fù)選、單選框,如果沒有選中的,默認在進行表單序列化時,是不會把它添加到字符串或者數(shù)組中的。

          4、Touch模塊

          //設(shè)置阻止掉默認的滑動效果

          document.addEventListener(

          'touchmove',

          function (event) {

          event.preventDefault();

          },

          {passive:false}

          )

          Touch模塊 給我們提供了兩大類事件的支持

          ①點按類

          tap/longtap/doubletap

          ②滑動類

          swipe/swipeLeft/swipeRight/swipeUp/swipeDown

          如何使用事件呢?

          ①綁定對應(yīng)的事件

          element.on('swipe',function(){})

          ②觸發(fā)事件

          5、動畫模塊 (fx+fxmethods)

          fxmethods:

          fadeIn fadeOut fadeTo fadeToggle

          show hide toggle

          ...

          fx:

          animate()

          二、練習(xí)Zepto的使用。

          1、實現(xiàn)一個網(wǎng)頁版的簡歷

          1.1 向服務(wù)器端獲取數(shù)據(jù),將數(shù)據(jù)顯示在列表中。

          ①獲取數(shù)據(jù)

          ②找到列表,創(chuàng)建元素,插入到列表

          1.2 向服務(wù)器端獲取數(shù)據(jù),將數(shù)據(jù)顯示在列表中。

          ①獲取數(shù)據(jù)

          ②找到id為skills的div,創(chuàng)建元素,插入到div

          2、將pc端的項目移植到Mobile端。

          2048實現(xiàn)混合編程的方式有很多種,phoneGap也是一種的常見的方式,它最大的特點是借助各種各樣的插件來實現(xiàn)對于設(shè)備底層的調(diào)用。

          phoneGap與cordova的關(guān)系:

          最早的時候,phoneGap是一個非常流行的框架,后來被Adobe收購了,PhoneGap依然了自己的商標(biāo)所有權(quán),將核心的跨平臺代碼共享給了Adobe,Adobe將核心代碼全部開源,形成的新的項目叫做cordova。

          cordova是phoneGap的核心代碼

          混合編程:

          ①將前端代碼拷貝到Android工程的assets

          ②將前端代碼部署在服務(wù)器,通過loadUrl載入服務(wù)器的url

          一、PhoneGap的概述

          https://phonegap.com/ phoneGap官網(wǎng)

          http://cordova.apache.org/ cordova官網(wǎng)

          https://build.phonegap.com/ phoneGap提供的云端打包網(wǎng)址

          http://phonegap-plugins.com/ 第三方的基于phoneGap的插件的列表站點

          what?是一個針對移動端的,旨在通過編寫前端代碼來實現(xiàn)開發(fā)跨平臺應(yīng)用程序的開發(fā)框架

          之前通過eclipse創(chuàng)建Android項目,通過混合編程的方式來打包生成安裝文件(沒有辦法通過java來實現(xiàn)很多原生組件的調(diào)用,包括設(shè)備底層的調(diào)用)

          *phoneGap提供了各種各樣的插件,這些插件給我們提供了js的接口來實現(xiàn)設(shè)備低層的調(diào)用。

          理念:

          實現(xiàn)write once,run everywhere.

          where? 低成本的開發(fā)跨平臺應(yīng)用程序(Android/iOS/WP)

          why?

          ①免費開源

          ②標(biāo)準(zhǔn)化 完全遵循w3c標(biāo)準(zhǔn)

          ③提供了非常方便的云端打包工具,可以直接將前端代碼打包生成可以安裝在移動端OS的app

          ④低成本 即使沒有學(xué)過專業(yè)的原生開發(fā)技能,也能夠基于前端技術(shù)以及phoneGap所提供的核心API來實現(xiàn)一個能夠調(diào)用底層硬件的app

          ADB: Android Debug Bridge 安卓調(diào)試橋,之前在Android項目點擊run as去作為Android應(yīng)用去運行,背后就是靠ADB將生成的apk結(jié)尾的文件傳遞到模擬器中。

          how?

          方式1:

          借助于phoneGap所建議的方式,通過兩個軟件,一個安裝在pc,一個安裝在mobile

          ①安裝pc端的軟件 phonegap-desktop

          ②安裝移動端的軟件

          https://github.com/phonegap/phonegap-app-developer/tree/master/resources/release

          adb install **.apk

          2.1 windows+R->cmd

          2.2

          方式2:

          通過命令行 :

          //全局安裝cordova

          npm install -g cordova

          //創(chuàng)建一個基于cordova 的myApp項目

          cordova create MyApp

          //進入到MyApp的目錄

          cd MyApp

          //讓cordova支持Android開發(fā)平臺

          cordova platform add android

          //打包APK的安裝包,運行在對應(yīng)的Android設(shè)備

          cordova run android

          二、PhoneGap支持的事件

          deviceready

          pause/resume

          online/offline

          battery***

          ***button

          綁定事件的方式:

          document.addEventListener(

          'deviceready',

          function(){},

          false

          )

          、實現(xiàn)功能

          使用谷歌瀏覽器將網(wǎng)頁打包為可以在桌面直接打開的app,可以實現(xiàn)直接打開瀏覽器指定網(wǎng)頁,也可以隱藏菜單欄全屏打開網(wǎng)頁應(yīng)用。

          二、適用范圍

          需要直接在桌面打開的網(wǎng)頁應(yīng)用,但不需要客戶端或者硬件交互的場景。

          三、操作步驟

          1、安裝谷歌瀏覽器

          2、打開指定的HTML網(wǎng)頁應(yīng)用

          3、瀏覽器右上角的菜單,依次點擊“右上角菜單-更多工具-創(chuàng)建快捷方式-填寫應(yīng)用名稱”,此時會在桌面生成應(yīng)用圖標(biāo)。


          4、打開桌面的應(yīng)用圖標(biāo),會直接使用谷歌瀏覽器打開網(wǎng)頁。

          5、如果需要全屏展示,可在應(yīng)用圖標(biāo)“右鍵-屬性-目標(biāo)-增加 ‘-kiosk’ 參數(shù)”,打開即可全屏。


          6、備注:如果直接創(chuàng)建谷歌瀏覽器的快捷方式,在“右鍵-屬性-目標(biāo)-增加 -kiosk和網(wǎng)站url”,也可實現(xiàn)相同效果。

          從移動平臺崛起以來,HTML5移動應(yīng)用開發(fā)迅速變成了熱門話題,開發(fā)者們被各種開發(fā)HTML5移動應(yīng)用的方法搞得暈頭轉(zhuǎn)向,今天請到了金山云基礎(chǔ)架構(gòu)部研發(fā)負責(zé)人柴春燕給大家分享如何避免HTML5移動應(yīng)用最容易踩的那些坑。

          柴春燕--

          微軟社區(qū)精英計劃博客組負責(zé)人,HTML5研究小組成員,擅長HTML5及移動應(yīng)用開發(fā);

          具有多年Web開發(fā)經(jīng)驗,曾參與開發(fā)微軟Visual Studio 2010中文學(xué)習(xí)平臺,基于SaaS模式的E-Learning系統(tǒng);

          曾負責(zé)當(dāng)當(dāng)網(wǎng)Web前端開發(fā)及移動應(yīng)用開發(fā),擔(dān)任百度音樂高級研發(fā)工程師;

          目前就職于金山云,初期負責(zé)金山云前端架構(gòu),現(xiàn)任基礎(chǔ)架構(gòu)部研發(fā)經(jīng)理。

          01/移動應(yīng)用中HTML5的新特性

          工欲善其事,必先利其器。我比較推崇的學(xué)習(xí)技術(shù)的方式,是先整體了解,然后結(jié)合實際需求,再做針對性的學(xué)習(xí)。整體了解的方式,比較建議是直接看官網(wǎng)的API文檔,這里可以推薦幾個網(wǎng)站: http://www.w3school.com.cn/html5/index.asp, https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/HTML5, http://www.html5rocks.com, http://caniuse.com/

          其中,特別說明下http://caniuse.com/,通過這個網(wǎng)站,我們可以非常快速的查詢到你所想使用的html5的特性在各個瀏覽器,包括不同終端的瀏覽器的兼容性情況。

          HTML5 在移動應(yīng)用開發(fā)上面能夠利用的特性主要有:

          1. form input type

          表單是我們在開發(fā)中經(jīng)常會遇到的,如果按照傳統(tǒng)的方式,要介入jquery validate或者自己寫正則進行判斷,但是其實html5的form表單新增的input type屬性,能夠快速幫我們實現(xiàn)所需要的功能。

          2. video & audio

          移動瀏覽器是不支持flash的,在一些微信專題活動中,經(jīng)常會看到嵌入音頻,那么audio標(biāo)簽就是比較適合的應(yīng)用場景,html5中audio提供的api attr還是比較全面的。

          視頻格式一般有mp4和webm兩種格式,在使用的時候,一般建議同時生成兩種,根據(jù)瀏覽器兼容性,進行相應(yīng)的選擇。音頻audio,一般會同時制作mp3 ogg格式。

          3. storage

          關(guān)于web storage,大家可以參考我之前分享的一篇內(nèi)容:

          http://www.chaichunyan.com/topics/html5-training/5.html5_storage/#/

          重點是localstorage,尤其是我們在做移動應(yīng)用的性能優(yōu)化時,localstorage能夠發(fā)揮很大的作用。

          學(xué)習(xí)的時候,建議大家?guī)е鴨栴}去學(xué)習(xí),比方說“l(fā)ocalstorage最大的存儲容量是多少?”“有沒有有效期?”“cookie是有域的概念的,那么localstorage呢?”

          4. css3

          html5其實更多的是一個web標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)里邊,包含了html、JavaScript api、css。css3是我們在移動應(yīng)用中要重點學(xué)習(xí)和掌握的。

          1.選擇器

          2.自定義字體

          3.多欄布局

          4.文字,容器陰影

          5.圓角

          6.漸變效果

          7.動畫 ...

          大家可以通過下面一個例子有一個直觀的印象:

          http://www.chaichunyan.com/topics/html5-training/7.css3_summary/demos/index.html

          之前很多我們需要通過js或者切圖實現(xiàn)的效果,在移動端,就可以直接通過css3實現(xiàn)。

          這里特別強調(diào)下關(guān)于布局,css3彈性布局,希望大家能夠仔細去了解,我在面試時候,必問的一道題,當(dāng)然,面試只是手段,更重要的是希望能夠?qū)W以致用,真正在實際工作中發(fā)揮作用。

          flexbox布局的兼容性,彈性盒模型實現(xiàn)的原理,這些我們在做移動終端調(diào)試時候,如果只是靠反復(fù)試錯,那么效率是非常低的。

          了解了html5的特性,開發(fā)者就會在移動應(yīng)用上一展身手了。

          02/HTML5移動應(yīng)用中踩過的那些坑

          1.布局

          移動瀏覽器訪問的web站點,后面稱為mobile webapp哈(泛指移動終端瀏覽器訪問的web站點),能不能使用傳統(tǒng)的流式布局?答案是可以,但是要慎用。

          mobile webapp對css3的彈性布局支持還是比較給力的,iOS Safari還好,但是Android的碎片化非常嚴重,尤其是Android上面各種第三方瀏覽器會做各種各樣的定制化,使用flexbox比float能夠減少你在布局調(diào)試上的時間,而且兼容性有保證。

          2.圖片適配

          這里邊要提供一個概念,是屏幕分辨率和物理分辨率,為什么我們使用ios看到的圖片清晰度那么高,原因是普通的手機屏幕,一點顯示一個像素,但是iphone4s 以后是一個點四個像素。

          那按照320的設(shè)計稿切出來的圖片,在iphone上面顯示肯定是有鋸齒的。

          處理方法可以參見我之前分享的一篇文章:圖片的適配與清晰度

          http://blog.csdn.net/spring21st/article/details/7513906

          3.字體

          我把字體的處理分為兩類,一種是藝術(shù)字體、icon,另一種是我們在頁面中的字體。

          移動終端對網(wǎng)絡(luò)的要求是比較高的,我們要盡可能減少網(wǎng)絡(luò)請求,圖片是非常大的網(wǎng)絡(luò)開銷,當(dāng)然,我們可以用合并圖片的方式減少請求數(shù),但是請求量變大了。

          css3支持web fonts,所以,我們可以引入字體文件,而不是所有的字體都是通過切圖的方式來實現(xiàn)。對于icon,一種方式是base64處理,但是現(xiàn)在更常見的做法,是轉(zhuǎn)換成矢量字體。

          這里推薦一個網(wǎng)站:font awesome http://fortawesome.github.io/Font-Awesome/icon/css3/

          這里邊涵蓋了大部分我們會用到的圖標(biāo),當(dāng)然,公司有精力和人力的情況下,建議可以維護自己的矢量字體庫。

          4.橫豎屏

          我們可以通過css 的media query 判斷橫豎屏。

          但是這種只能控制樣式展現(xiàn),當(dāng)我們需要監(jiān)聽橫豎屏變化的時候,就只能通過js監(jiān)聽window.onorientationchange事件的方式實現(xiàn)。

          但是,下面這種情況會讓你很無語:

          那我們推薦下面這種實現(xiàn)方案:

          相比較pc web,mobile webapp的調(diào)試更復(fù)雜,而且未知的問題更多,遇到問題,我們要有耐心去跟蹤定位,就像之前我們遇到iscroll性能問題、fast-click穿透的問題,都是一點一點排查處理的。

          03/混合應(yīng)用(Hybrid)的注意事項

          現(xiàn)在“快速迭代,敏捷開發(fā),低成本上線“基本上是每家公司都追求的目標(biāo),混合應(yīng)用就是在這種場景下應(yīng)運而生。

          Hybrid App優(yōu)點眾多,Web前端工程師0成本介入,不依賴版本的實時更新,快速實現(xiàn)跨平臺需求,等等。但是,我對混合的看法是,根據(jù)實際情況合理使用,因地制宜。

          那么什么樣的場景適合混合應(yīng)用開發(fā)?

          1. 快速原型,驗證產(chǎn)品功能。我們之前開發(fā)過一個app,Android和iOS提供宿主環(huán)境,webview展現(xiàn)內(nèi)容都是通過html5實現(xiàn)的,半個月就開發(fā)上線了,較之傳統(tǒng)應(yīng)用開發(fā)人員成本和時間成本都縮短很多。

          2. 內(nèi)容類的應(yīng)用,比如csdn的app,就是采用hbuilder混合方案實現(xiàn)的,對性能要求沒有那么高。

          在考慮hybird的時候,要避免以下幾個誤區(qū):

          (1)為了HTML 5而Hybrid App

          html5只是技術(shù)實現(xiàn)手段而已,要根據(jù)公司的實際業(yè)務(wù)場景,以及人員配比,綜合考慮,不能因為react native比較火,就必須要在公司推行這種實現(xiàn)方案,我覺得為技術(shù)而技術(shù)是不可取的。

          (2)忽略移動應(yīng)用中的關(guān)鍵因素

          mobile webapp本質(zhì)上還是基于PC的一種開發(fā)模式,開發(fā)者使用PC瀏覽器模擬App中的webview進行調(diào)試。PC瀏覽器與手機webview的區(qū)別是巨大的,包括能支配的CPU資源,最大占有的內(nèi)存,運行的網(wǎng)絡(luò)環(huán)境,click和touch事件的區(qū)別,瀏覽器對CSS/JS的解析和對事件處理等等。

          app工程師考慮比較多的內(nèi)存的問題,這些在web開發(fā)時候是很少考慮的。另外,就是網(wǎng)絡(luò)環(huán)境方面,雖然現(xiàn)在3g、4g覆蓋率越來越高,但是移動終端的訪問和pc還是有很大差距,wifi和蜂窩網(wǎng)絡(luò)的切換,基站變化等諸多因素都會導(dǎo)致網(wǎng)絡(luò)間歇性斷開,web開發(fā)對于這種不穩(wěn)定網(wǎng)絡(luò)環(huán)境問題的處理上都有所欠缺。

          (3)交互體驗一致性

          ios和Android的交互設(shè)計是兩套規(guī)范,雖然有相似的地方,但是從操作習(xí)慣上,就已經(jīng)決定了,我們想用一套交互設(shè)計,適配兩個平臺是很難的,包括包括視覺風(fēng)格,界面切換,操作習(xí)慣等。

          Hybrid App方案是一把雙刃劍,一方面它平衡了Native App和Web頁面的優(yōu)缺點,一定程度上解決了Native App開發(fā)過程中迭代慢,版本依賴,Native開發(fā)資源不足的問題,但另一個方面過度依賴Hybrid方案會造成Web前端開發(fā)成本快速上升,甚至造成App整體體驗下降,甚至造成功能缺失。

          回到最開始那句話”不要為了Hybrid而Hybrid“,根據(jù)實際場景,控制好方案中native和web的邊界。

          04/Q&A

          Q1:關(guān)于響應(yīng)式開發(fā)中對于手機屏幕高度的解決有沒有什么好的解決方案?

          響應(yīng)式開發(fā)本質(zhì)上是移動設(shè)計優(yōu)先的一種開發(fā)方式,我沒太明白對于手機屏幕高度的解決,具體的問題是什么樣的,原則上高度是不需要做處理的,除非是你對首屏有要求。關(guān)于響應(yīng)式開發(fā),可以看看我這篇文章http://www.chaichunyan.com/index.php/2016/03/03/html5-wrd/

          Q2:對首屏有要求的情況, 除了判斷高度還有沒有其他好的解決方案?如果是flex布局可以解決這個問題嗎?

          問題的根本是獲取首屏的高度,(1)如果你是后端渲染的話,可以獲取機型和瀏覽器版本,拿到屏幕分辨率做適配 (2)根據(jù)屏幕寬度做適配,但是做不到完全絕對的首屏自適應(yīng),如果有更好的方案,我再跟大家分享。

          Q3:hybrid開發(fā)中,h5頁面太多的話,會不會影響ios發(fā)布?

          之前有ios對phonegap這種跨平臺的應(yīng)用審核是不通過,不過現(xiàn)在放開這個限制了。h5頁面過多,會影響應(yīng)用的性能和體驗,建議可以把h5打包放到ipk里邊,但是要做好靜態(tài)資源的版本管理。

          Q4:css3 彈性布局中, 由于android碎片化嚴重的問題, 能不能有好的案例指導(dǎo)? 我們要求支持到android4以上版本。

          真的要善用文檔和工具, http://caniuse.com/#search=flex, 我分享時候提到的這個網(wǎng)站,明確說明了flex兼容性。

          如果是Android4.4以上機型,基本上可以放心使用,注意的地方有兩個:1. 要記得寫各個瀏覽器的css前綴 2. flex里邊可以嵌套flex.

          Q5:hybird開發(fā)過程中, 原生代碼登錄權(quán)限問題,h5部分的頁面,如何共享登錄相關(guān)信息?

          這要看你實現(xiàn)的方案,(1)嵌套靜態(tài)的h5頁面,那么需要native打開webview的時候,使用js briage調(diào)用頁面js的方法,寫入用戶信息,實現(xiàn)登錄共享 (2)如果打開的是動態(tài)渲染的頁面(如php輸出的頁面),那么可以在請求的url中攜帶用戶token,php通過query string判斷驗證,這個是native和webview數(shù)據(jù)交互的問題。

          Q6:h5動畫在部分安卓webview中有時候會出現(xiàn)卡頓,這種情況改怎么優(yōu)化呢?

          1. 可以做簡單的測試,看看瀏覽器支持的情況,如果瀏覽器支持不夠好,那么可能要做降級處理。

          2. 減少動畫效果,因為動畫是要使用gpu渲染的,原生app能夠流暢,很大程度上是直接調(diào)用硬件處理的。

          優(yōu)化的方案我這邊基本上是降級處理,Android低版本不支持的話,就使用基本動畫,比方不會使用3D翻轉(zhuǎn)。因為h5畢竟受限于webview環(huán)境,像jquery 和 zepto都提供對機型和瀏覽器的判斷。

          Q7:在移動端瀏覽器上能支持h5離線存儲的性能嗎?

          No problem.我們在實際項目中,優(yōu)化前端性能,曾經(jīng)用localstorage做靜態(tài)資源的版本管理和存儲。

          更多技術(shù)干貨關(guān)注公眾號“極牛”。


          主站蜘蛛池模板: 国产成人精品一区在线 | 中文字幕在线无码一区二区三区| 福利一区国产原创多挂探花| 中文字幕精品一区影音先锋| 国产精品 视频一区 二区三区| 国产精品视频免费一区二区| 91在线视频一区| 99久久精品午夜一区二区| 人妻无码第一区二区三区| 射精专区一区二区朝鲜| 人妻体体内射精一区二区| 麻豆AV一区二区三区久久| 亚洲美女一区二区三区| 亚洲国产成人久久一区二区三区| 精品一区二区三区在线观看视频| 福利一区国产原创多挂探花| 免费在线观看一区| 无码毛片一区二区三区视频免费播放| 鲁丝丝国产一区二区| 精品人妻一区二区三区四区在线| 精品一区二区三区视频在线观看| 一区二区三区www| 亚洲中文字幕无码一区二区三区 | 在线观看午夜亚洲一区| 韩国福利视频一区二区| 国产成人精品亚洲一区| 波多野结衣中文字幕一区 | 久久国产香蕉一区精品| 国产一区二区电影| 国产主播福利一区二区| 国产一区二区三区樱花动漫| 色狠狠色噜噜Av天堂一区| 久久一区二区明星换脸| 无码人妻啪啪一区二区| 一区二区三区福利视频| 亚洲一区二区女搞男| 无码中文人妻在线一区二区三区| 蜜桃视频一区二区| 久久久无码一区二区三区| 日韩人妻无码免费视频一区二区三区| 日本韩国黄色一区二区三区 |