當前位置:編程學習大全網 - 源碼下載 - ios測試和web測試的區別

ios測試和web測試的區別

ios測試和web測試的區別:

壹.語言

作為面向客戶端的程序,前端和終端有著相同的特點:需要依賴用戶機器的運行環境,所以在開發語言上基本沒有選擇。和後臺要的不壹樣,iOS只能用object-c,前端只能用javascript,當然iOS也可以用RubyMotion,前端也可以用GWT/CoffieScript,但不是主流,用的人少,實際用起來會造成很多麻煩。IOS也可以使用蘋果新的swift語言,以後可能會用來替代object-c。還在起步階段,先不討論。

objc和js之間有壹個有趣的對比:變量/方法的命名風格正好相反。蘋果壹直倡導用戶體驗,寫代碼也不例外。程序名都是英文的,而且要盡量詳細,這樣看變量和方法名就知道自己在做什麽,比如application:didfinishlaunching with Options:但是js因為每次都是從網絡上下載的,所以盡量把變量方法名縮寫。其實有代碼壓縮工具,變量名不管寫多長效果都是壹樣的,只是大家都習慣用短名字。比如上面提到的objc application:did finishing launching with Options:method在js中被命名為$()。

Objc和js都是動態語言,使用起來挺像的,但是objc是編譯的,速度很快,在編譯過程中可以發現很多錯誤。js是解釋的,其性能取決於解釋引擎。即使在強大的v8引擎下,性能也趕不上編譯語言。語言太動態了,變量完全沒有類型化,寫起來很爽,調試起來也有點費勁。總覺得js輕巧靈活,放蕩不羈,充滿了各種奇奇怪怪的技能。objc沒有c++ java那麽嚴肅,也沒有js那麽靈活。

第二,線程

前端開發幾乎不需要線程的概念。在瀏覽器實現中,頁面的HTML和CSS解析和渲染可能和js不在同壹個線程,但是所有的js代碼都只在壹個線程上執行,不會並發執行,所以不需要考慮各種並發編程問題。在新的JS特性中,您可以創建壹個worker任務,它可以由另壹個線程並行執行。但是因為不是所有的瀏覽器都支持,不同線程傳輸數據的標準也不壹樣,使用場景很少,所以似乎還沒有大規模使用。數據庫操作/發送網絡請求等任務不同於js代碼執行線程,但這些任務是由瀏覽器管理的,前端不需要關心或影響這些線程,只需要接收事件回調,不需要處理任何並發問題。

終端開發需要很多多線程。iOS有壹個主線程,UI渲染就在這個線程裏。其他耗時的邏輯或數據庫IO/網絡請求需要另壹個線程執行,否則會占用主線程的時間,導致界面無法響應用戶交互事件,或者渲染緩慢導致滾動卡頓。程序邏輯分布在多個線程中,需要處理各種代碼並發執行可能帶來的數據不壹致/時間錯亂等問題。並發,有些bug很難排查,壹不小心就會掉坑裏。需要使用壹些隊列/鎖來保證程序的執行順序。IOS提供了壹套多線程管理方法GCD,用非常簡單強大的方式封裝了線程和隊列,比其他終端或者後臺好很多,但是在處理多線程問題上還是會花很多功夫。

第三,存儲

終端開發需要大量的數據存儲邏輯。手機APP不像瀏覽器。當用戶打開瀏覽器時,他們必須連接到互聯網,但當他們打開壹個APP時,他們很可能處於離線狀態或在網絡條件極差的移動GPRS中,因此他們必須保存他們之前請求的數據。數據保存後,需要與服務器的最新數據同步。如果同步數據總量太大,流量消耗速度慢,就需要增量同步。它需要制定壹個與服務器實現增量數據返回的方案,並且需要處理客戶端與服務器之間的數據壹致性問題。當數據存儲容量較大,結構復雜時,需要利用好有限的內存作為緩存,優化各種存儲查詢的性能。

前端很少需要存放在桌面上。除非是壹個壹頁的app,否則自然不需要壹系列的工作來更新數據。數據從後臺取出,直接拼接顯示在頁面上。即使微博可以在頁面中持續加載更多的數據,數據也只是存在於內存中,不會永久存儲,因為桌面的網速是穩定的,不考慮流量,所有數據都可以直接從後端取,不需要客戶端再做壹套存儲。非常像移動端原生app的Web應用,就像終端開發壹樣。數據也保存到SQLite,存儲邏輯和要處理的問題都差不多。

四。結構

在第三方框架上,web前端與iOS開發完全相反。web本來就很弱,又很開放,讓大量第三方框架和類庫施展拳腳,而iOS本來就很強大,又很封閉,導致第三方框架的空間很小。

壹開始瀏覽器只是為基於內容的網頁設計的,js只是壹種腳本語言,可以給這個網頁添加壹些特效。web應用時代,跟不上發展,需要很多第三方庫和框架的輔助。另外前端開發完全開放,導致了很多庫和框架。早期大部分庫專註於封裝dom操作,大家都在不停的搭建dom操作基礎庫的輪子。經過壹段時間的爭奪,jQuery是網站中唯壹使用庫的。後期人們不再重復制作這個基礎庫的輪子,而是加入了壹些代碼組織和前端架構的框架,比如框架require.js、MVC框架backbone/angular.js等。

IOS開發蘋果提供了完整的開發框架cocoa,並且這個框架在每壹代系統中都有升級優化,開發模式已經定型。第三方框架的空間不大,大量流行的開源項目都是壹些常用的組件和庫,比如網絡請求庫AFNetworking和數據庫操作庫FMDB。然而,像beef framework/reactive cocoa這樣的大型框架很難流行起來。

動詞 (verb的縮寫)和睦相處

前端開發需要兼容大量的瀏覽器,桌面瀏覽器如chrome、safari、ie6-ie10、firefox,各種瀏覽器如獵豹360,手機瀏覽器如iOS/Android,屏幕大小無限不同。看起來很可怕,其實沒那麽難。只是為了嚇唬人。桌面的Chrome/safari和shell的各種極速模式都用webkit,差別不大。firefox基本是按照標準實現的,和webkit差別不大。老的ie6/7需要特別照顧,但是很多網站都不支持ie6,移動端是壹家,都是webkit,除了支持新功能之外差別不大。對於不同的屏幕尺寸,高端點會使用響應式布局,根據不同的屏幕尺寸適配不同的布局。通常,點的桌面端將是固定的,移動端將拉伸自適應寬度。

終端開發還需要兼容不同的系統版本和手機尺寸。Android不用說也有3.5/4/4.7/5.5/9.7英寸的尺寸,但是和web壹樣容易兼容,也就是自適應寬度。iOS的UIKit已經把這些都處理好了,autolayout、sizeClass等高級功能都有了,所以在尺寸上也不用花太多功夫。在系統版本上,iOS7是壹個分水嶺。iOS7之前和之後的版本UI差別很大,需要做壹些努力才能兼容。不過iOS的用戶更新會很快,預計再過壹兩年iOS7以下的用戶就會被忽略。

不及物動詞表演

終端和前端都是面向用戶的,性能優化的目的是將內容盡快呈現出來,讓程序在用戶的操作下流暢運行。終端主要關註存儲/渲染性能。當壹個APP存儲大量數據,數據關系復雜時,數據查詢很容易成為性能瓶頸。需要不斷優化數據訪問效率,規劃數據IO線程,設計內存緩存,利用好終端設備有限的內存,避免重復渲染,盡可能重用視圖,找到最高效的渲染方案。

前端關註頁面的加載速度。因為網頁的結構/樣式/程序/資源圖片都是實時請求的,為了讓頁面更快的呈現內容,就需要優化這些請求,讓這些資源以最快的速度加載,包括合並圖片/代碼減少請求數量,壓縮代碼,並行請求,根據版本號緩存代碼請求,gzip壓縮,模塊/圖片的懶加載。另外,和終端壹樣,我們也註重渲染性能,遵循壹些規則避免頁面回流,避免使用CSS陰影,使用CSS3動畫代替js。

七。匯編

終端開發需要編譯。將程序編譯成機器語言,然後與各種庫鏈接,生成與平臺對應的可執行文件。最後,它由操作系統調度和執行。iOS終端開發中編譯和鏈接的規則已經封裝在xcode這個開發工具中。壹般不用關心,但是有深度需求的時候還是要處理很多編譯的事情,比如使用編譯器前端Clang,自定義靜態代碼檢測規則,編寫自動編譯和持續集成的編譯腳本,打包生成靜態庫,根據鏈接的可執行文件的構成優化APP的大小。

前端開發程序不需要編譯過程,只需要把代碼扔給瀏覽器,瀏覽器會壹邊解析代碼壹邊執行。雖然js/css代碼不用做任何事情就可以被瀏覽器解析執行,但是為了優化上面提到的性能,在前端代碼上線之前,所有代碼和資源文件都會被處理。這些過程包括:壓縮合並js/css,合並css sprite圖,處理模塊依賴,處理代碼資源版本號,處理資源定位。這個過程非常類似於傳統程序的編譯,通過優化展示給人的代碼,解決壹些依賴關系,可以看作是前端的編譯過程。像grunt.js/fis這樣的工具可以幫助完成這個編譯過程。通常,前端編譯與在線部署相結合,作為在線系統的壹部分。

八。安全

雖然前端和終端的安全性不需要像後端那麽多考慮,但是還是有壹些需要註意的地方。在請求安全性方面,終端和前端是壹樣的。用戶發送到後端的請求需要經過層層路由,不知道在哪裏就被攔截、篡改或者回放。因此,需要采取壹些措施來防止這些情況。最常見的是身份認證,多采用過期令牌形式,而不是用戶名密碼,防止黑客被抓後永遠登錄這個賬號。對數據安全要求高的會使用加密傳輸,或者使用https。另外還需要視情況處理壹些DNS劫持、運營商廣告植入等問題。

終端很少考慮其他安全問題。該系統已經幫助保證了未越獄的iOS機器上整個APP運行環境的安全性。但是在越獄機下,惡意程序可以用root權限做任何事情,APP也是防不勝防。在前端,瀏覽器的特性使得前端開發存在幾個安全隱患。第壹,js代碼可以動態地插入到網頁的任何地方,瀏覽器會無差別地執行這些代碼。第二,認證信息統壹存儲在cookie中。第三,可以通過iframe自由嵌入其他網站的頁面。這些攻擊是由XSS、CSRF和cookie劫持引起的,所以前端在編寫代碼時需要考慮這些安全問題,並采取相應的防範措施。最簡單也是最重要的預防措施是完全過濾所有用戶輸入和輸出內容,以避免惡意代碼嵌入頁面。

九。互動/發展

最後談談我個人對這兩個領域互動發展的感受。以前做web前端的時候,感覺web把人機交互倒退了十年,交互都是硬點擊——結果就是滾動壹個個刷新。當很多人都在鼓吹html5可以有多炫的時候,其實FLASH十年前就可以做出來了,比最現代的瀏覽器都流暢。iPhone普及後,人機交互終於恢復到應有的水平,體驗比web流暢很多。指尖交互/流暢動畫/便捷滑動手勢/無限實現,主流終於恢復或超過了Flash十年前的水平。

但是人機交互提高了,開發方式卻倒退了。web的開發方式非常先進,用戶使用的都是最新版本。發現bug,可以在幾秒內在線修復,特別適合互聯網環境下的快速叠代。但是,終端APP不行。除了iPhone的審查,Android無法保證用戶使用最新的程序,他們使用的是傳統的客戶端更新方式。bug的固定版本不能及時給用戶,壹天也不能上線幾十次,所以很多老的需要維護。這都是因為移動網絡不穩定,流量有限。移動端不能像桌面瀏覽器那樣完全依賴網絡,所以在移動網絡穩定流量免費之前,開發方式不會有太大改變。

另外,我不看好HTML5。網上已經說了三四年可以替代APP,至今沒有記錄。我看不出它的優點。原生APP可以獲得更多的系統資源和更流暢的人機交互體驗。HTML5在這方面永遠無法相比,在移動網絡和流量的限制下無法發揮web的開發優勢,所以不會成為主流,只適合做壹些輕量級的小工具。

  • 上一篇:手機震動源代碼
  • 下一篇:rocketmq消息文件(commitlog)刪除策略分析
  • copyright 2024編程學習大全網