<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦——學設計>網頁設計>網站建設>網站前端技術>

        web開發有哪些必須的挑戰_web網站開發有哪些挑戰

        時間: 宇民40 分享

          Web軟件開發工程師可以分為Web前端和后端開發。那什么是Web前端,什么是Web后端呢?下面由學習啦小編為大家整理的web前端開發的挑戰,希望大家喜歡!

          web前端開發的挑戰

          第一大挑戰:兼容性

          瀏覽器種類非常多,IE、Firefox、Chrome、Opera、還有眾多的IE加殼瀏覽器,類似搜狗、傲游、360,再加上這些瀏覽器的移動終端版本。需要有Web標準,前端的知識大部分通用于各個瀏覽器,但還是會有歷史遺留問題,不同版本的瀏覽器有不同的問題。特別是市場占有率最高的IE系,雖然IE 9/10看起來相當標準,但向之前版本間各有各的問題,向前兼容非常頭疼。如果不積累點經驗,面對疑難雜癥那是一頭霧水。

          第二大挑戰:交互的復雜度

          CSS和DOM提供的接口水平過低,而BOM提供的控件只有input、select、textarea這幾種最基本的,稍復雜一點的UI效果,都要前端自己利用CSS和DOM去組合創造。看到一個需求,腦子里第一步要想如何利用CSS、DOM這些基本的零件組合成最終的效果,實現最終效果其實是一個“創造”的過程,比如說tabView,treeView,richEditor,colorPicker這種看起來常見的組件,其實在前端里都是沒有現成可用的,需要自己去實現。

          前端語言的 膠水性需求 太強。CSS、DOM、JS是三種不同的技術,這也是前端知識系統中要掌握的最重要的三個基本功。前端的效果是通過CSS、DOM、JS三者配合起來最終呈現出來的,脫了任何一個技術都寸步難行,時刻要同時考慮多個方向的知識點。前端編程像是開了三個線程同時在跑,復雜度成倍增長。

          第三大挑戰:代碼可維護性

          復雜度的提升直接影響代碼的維護性。CSS+DOM+JS的組合實在太強大了,同一個效果可以有多種完全不同的實現方式,每一種實現方式都會有不同的開發難度、擴展性、可維護性。解決方案太多,看到一個效果首先會先想到如何用CSS和DOM里那些low level的接口實現,這是一個“創造”的過程,這時腦子里可能冒出好多種不同的實現方法,“創造”完了之后還要“比較”,權衡各種解決方案的優劣,糾結一陣之后,才能選出最適合的方案。當然,并非前端都是完美主義,一定要選一個最好的方式出來,而是因為前端是GUI編程,直接面向用戶,是最直接的產品呈現的部分,是門面。正因為如此,前端也是最容易被反復修改的部分。反復“修改”有多可怕,是個程序員都懂的,如果可維護性不好,那簡直是惡夢。所以前端不得不重視可維護性,不重視可維護性直接等于自虐。

          第四大挑戰:性能

          第五大挑戰:個人成長

          開發者的思路很重要

          前端的開發,如果沒有總體的設計思路,會成為一種碎片似地程序,一個效果一堆代碼,一個功能一灘腳本,一個需求片邏輯。曾經遇到過,因為ue調整,把整個前端的代碼除了核心數據處理函數保留,其余的全部修改的情況。基本上前端的開發,處于DOM操作,數據處理,數據交互三部分,如果合理的分配這三部分的功能,那么前端的代碼就很容易擴展和調整。

          真正的前端開發挑戰,還在于開發者的思路。兼容性,布局,CSS和JS都不是問題,問題在于如何合理地組織語言邏輯;如何正確抽象出需求中的模塊;如何用代碼處理,清楚地用代碼表達出思路、寫好注釋,給后續維護者一個可閱讀的思路。前端的改動量,是后端的數倍,前端沒有絕對,只有跟隨需求不停的修改。

          Web后端開發的挑戰

          第一大挑戰,后端開發最重要的挑戰,來自于規模

          規模的擴大,比如訪問量擴大,文件存儲量擴大,數據量擴大,服務器數量擴大等。一個前端看起來一模一樣的網站,某一種指標如果擴大十倍,幾乎都會面臨一大堆的問題和挑戰。另一方面,在規模擴大以后,后端系統架構,一定會復雜化。原來只有一臺Server,LAMP都裝在一起。然后數據庫分出來,反向代理,負載均衡,分庫分表,Memcache,Message Queue,事務處理,CDN,NOSQL,種種架構,Server,就逐漸的演化出來了。架構的復雜化,自然會帶來更多的問題和更多的挑戰。

          第二大挑戰,來自于安全

          安全問題層出不窮,防不勝防。需要技術手段,也需要管理制度。

          第三大挑戰,來自于效率

          能否提供足夠的處理速度,能否提供足夠的帶寬,能否保證響應能力,這些是對外的效率。能否使用更少的服務器,能否使用更加便宜的服務器,能否使用更加節省能源的服務器,這些是對內的效率。

          第四大挑戰,來自于需求變更

          無論前端后端,都會面臨需求變更,只要是軟件開發,這都是大挑戰。但是當一個系統已經穩定的,高效的運行時,需求變更來了,在滿足需求之后,原本來沒有問題的部分,會不會突然崩潰,一旦崩潰,就是后端工程師的噩夢。

          第五大挑戰,來自于教條

          這個世界上有無數IT大公司,他們都很開放,都愿意分享自己的架構與技術。于是,對于“眼界開闊”的后端工程師而言,困難不在于如何解決,而在于如何從眾多的解決方案中做出挑選。框架、實踐不斷涌現,成功案例也不斷涌現。人家都用得好好的,你敢用嗎?到底是勇于嘗鮮,還是保守要緊呢?這個很難。

          web前端與iOS終端異同

          語言

          前端和終端作為面向用戶端的程序,有個共同特點:需要依賴用戶機器的運行環境,所以開發語言基本上是沒有選擇的,不像后臺想用什么就用什么,iOS只能用object-c,前端只能javascript,當然iOS還可以用RubyMotion,前端還能用GWT/CoffieScript,但不是主流,用的人很少,真正用了也會多出很多麻煩。iOS還可以用蘋果新出的swift語言,后面可能用于取代object-c,還處于起步階段,先不討論。

          objc和js這兩者有個有意思的對比:變量/方法命名的風格正好相反。蘋果一直鼓吹用戶體驗,寫代碼也不例外,程序命名都是用英文全稱并且要多詳細有多詳細,力求看變量和方法名就能知道是干嘛的,例如application:didFinishLaunchingWithOptions:。而js因為每次都要從網絡下載,要力求減少代碼體積,所以變量方法名是盡量用縮寫,實際上有代碼壓縮工具,無論變量名寫多長最終上線的效果是一樣的,但大家也都習慣了用短的命名,例如上述objc的application:didFinishLaunchingWithOptions:方法在js里習慣的命名是:$()。

          objc與js都是動態語言,使用起來還蠻像,但objc是編譯型,速度快,很多錯誤也能在編譯過程中被發現,js是解釋型,性能依賴于解釋引擎,即使在強勁的v8引擎下性能也趕不上編譯型語言,語言太動態,變量完全沒有類型,寫起來爽,debug起來稍微費點勁。一直感覺js輕巧靈活放蕩不羈充滿各種奇技淫巧,objc中規中矩沒c++ java那么嚴肅也沒有js那么靈活。

          線程

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

          終端開發需要大量使用多線程,iOS有一條主線程,UI渲染都在這個線程,其他耗時長的邏輯或者數據庫IO/網絡請求都需要自己另開線程執行,否則會占用主線程的時間,導致界面無法響應用戶交互事件,或者渲染慢導致滾動卡頓。程序邏輯分布在多個線程里跑,需要處理好各種代碼并發執行可能帶來的數據不一致/時序錯亂之類的問題,并發也導致有些bug難以排查,一不留神就掉坑,需要適當用一些隊列/鎖保證程序的執行順序。iOS提供了一套多線程管理的方法GCD,已經把線程和隊列封裝得非常簡單易用功能強大,比其他端或后臺是好很多了,但還是會花大量功夫在處理多線程問題上。

          存儲

          終端開發需要大量的數據存儲邏輯,手機APP不像瀏覽器,用戶打開瀏覽器必定是連著網,但打開一個APP時很可能是離線,也很可能處于網絡狀況極差的移動GPRS,所以必須把之前請求回來的數據保存好。保存數據后又需要與服務端最新的數據同步,如果全量同步數據量太大,耗流量速度也慢,于是需要增量同步,需要與服務端一起制定實現增量數據返回的方案,需要處理好客戶端與服務端數據一致性的問題。當數據存儲量大結構復雜時,還需要利用好有限的內存做cache,優化各類存儲查詢性能。

          前端在桌面端很少需要存儲,除非是one page app,不存儲自然就不需要數據更新的一系列工作,數據都是從后臺取出拼接后直接顯示到頁面上,即使像微博有可以在頁面內不斷加載更多數據,數據也只存在于內存,不會持久化存儲,因為桌面端網速穩定,不計流量,所有數據可以直接從后端拿取,客戶端沒必要再做一套存儲。移動端那些做得很像原生APP的web應用就跟終端開發一樣了,數據同樣保存到SQLite,存儲邏輯以及要處理的問題都差不多。

          框架

          在第三方框架上web前端和iOS開發完全相反,web原生弱小又十分開放,讓大量第三方框架和類庫可以施展拳腳,而iOS原生強大又十分封閉,導致第三方框架沒有多少生存空間。

          瀏覽器一開始只為內容型的網頁而設計,js也只是這個網頁上能加點小特效的腳本語言,在web應用時代跟不上發展,需要很多第三方庫和框架輔助,再加上前端開發是完全開放的領域,導致庫和框架百花齊放多如牛毛,在初期多數庫的作用集中在封裝dom操作,大家不斷重復造dom操作基礎庫的輪子,在一段時間百家爭鳴后獨尊jQuery,在有使用庫的網站中90%以上使用jq,幾乎成了個標準基礎庫。后期大家已經不再重復造這個基礎庫的輪子了,多了一些代碼組織和前端架構的框架,例如一些幫助項目模塊化的框架require.js,MVC框架backbone/angular.js等。

          iOS開發蘋果已提供了完整的開發框架cocoa,而這框架在每一代系統中都在升級優化和添磚加瓦,開發模式也已經定型,第三方框架沒有多少生存空間,大量流行的開源項目是一些通用組件和庫,像網絡請求庫AFNetworking,數據庫操作庫FMDB。而一些大的框架像beeFramework/ReactiveCocoa較難流行起來。

          兼容

          前端開發需要兼容大——量的瀏覽器,桌面的chrome,safari,ie6-ie10,firefox,以及各種套殼獵豹360等瀏覽器,移動端iOS/Android各自的瀏覽器,以及無限的不同的屏幕尺寸。看起來挺可怕,實際上也沒那么難搞,只是拿出來嚇唬下人。桌面端chrome/safari以及各種套殼的極速模式用的都是webkit,差異很小,firefox也大體遵從標準實現,與webkit差別不大,舊的ie6/7就需要特別照顧,不過很多網站都不支持ie6了,移動端更是一家親,全是webkit,除了新特性上的支持程度不一,其他差異不大。對于不同的屏幕尺寸,高端點的會用響應式布局,針對不同屏幕尺寸自適應到不同布局,一般點的桌面端定死寬度,移動端拉伸自適應寬度就搞定。

          終端開發也需要兼容各種不同的系統版本和手機尺寸,Android不用說,iOS也有3.5/4/4.7/5.5/9.7英寸這些尺寸,不過兼容起來跟web一樣挺容易,就是自適應寬度,iOS的UIKit把這些都處理好了,還有autolayout,sizeClass等高級特性可用,在尺寸上并不用花太多功夫。系統版本上iOS7為分水嶺,iOS7前后版本UI上差異比較大,需要做一些功夫兼容,不過iOS用戶更新換代很快,預計再過一兩年iOS7以下用戶就可以忽略了。

          性能

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

          前端關注頁面加載速度,由于web頁面的結構/樣式/程序/資源圖片都是實時請求的,要讓頁面更快呈現內容,就要優化這些請求,讓這些資源以最快速度加載下來,包括合并圖片/合并代碼減少請求數,壓縮代碼,并行請求,根據版本號緩存代碼請求,gzip壓縮,模塊/圖片懶加載等。此外跟終端一樣也關注渲染性能,遵從一些規則避免頁面reflow,避免使用CSS陰影這樣耗性能的特效,用CSS3動畫代替js等。

          編譯

          終端開發需要編譯的過程,把程序編譯成機器語言,再與各種庫鏈接后生成平臺對應的可執行文件,最后由操作系統調度執行。在iOS終端開發中編譯和鏈接的規則蘋果已經在xcode這個開發工具上封裝好,一般開發可以不用關心,但有深層需求時還是需要跟編譯打很多交道,例如用編譯前端Clang自定義靜態代碼檢測規則,寫編譯腳本做自動化編譯和持續集成,打包生成靜態庫,根據鏈接后的可執行文件的組成優化APP體積等。

          前端開發的程序則不需要編譯過程,只需要把代碼扔給瀏覽器,瀏覽器邊解析代碼邊執行。雖然js/css代碼寫完無需做任何事情瀏覽器就可以解析執行,但為了上面說的性能優化,前端代碼上線前會對所有代碼和資源文件進行處理,這些處理包括:壓縮合并js/css,合并css sprite圖,處理模塊依賴,處理代碼資源版本號,處理資源定位等。這個過程很像傳統程序的編譯,把給人看的代碼優化處理成給機器看的,并解決一些依賴關系,可以算是前端的編譯過程。像grunt.js/fis這些工具可以幫助完成這個編譯過程,通常前端編譯跟上線部署結合在一起,作為上線系統的一部分。

          安全

          前端和終端的安全性問題上雖然不需要像后端考慮得那么多,但還是有些需要注意。在請求的安全上,終端和前端都一樣,用戶向后端發送的請求都需要經過層層路由,不知道在哪里就被截獲篡改或回放了,于是需要做一些措施防御這些情況,最常見的就是身份驗證,多是采用會過期的token形式代替用戶名密碼,防止被抓包后黑客可以永遠登陸這個賬號。數據安全要求高的會用加密傳輸,或者使用https,另外還需要看情況處理一些DNS劫持,運營商廣告植入等問題。

          其他安全問題終端很少考慮,在未越獄的iOS機器上系統已經幫忙保證了整個APP運行環境的安全,而在越獄的機器下惡意程序擁有root權限可以做任何事情,APP也難以防范。前端方面瀏覽器的特性使前端開發有幾個安全隱患,一是web頁面上任意位置都可以動態插入js代碼,瀏覽器會無區別地執行這些代碼,二是身份驗證信息都統一保存在cookie里,三是頁面上可以隨意通過iframe嵌入其他網站的頁面。造成XSS、CSRF、cookie劫持這些攻擊手段,所以前端寫代碼時都需要考慮還這些安全問題,做好相應的防范,最簡單和重要的防范就是對所有用戶輸入輸出的內容做完整的過濾,避免頁面內被嵌入惡意代碼。

          交互/開發

          最后說下對這兩個領域在交互和開發上的個人感觸。以前在做web前端時,感覺web讓人機交互倒退了十年,交互都是硬邦邦的點擊—啪一下出來結果,滾動是一格格地刷新,很多人當時在鼓吹html5可以做出多么炫的效果時,實際上FLASH在十年前就可以做出來了,還比最現代的瀏覽器更流暢。iPhone流行后,人機交互終于恢復了應有的水平,體驗上比web流暢太多,指尖交互/流暢的動畫/便捷的滑動手勢/無限制的實現,主流終于恢復或超越了十年前Flash的水平。

        web開發有哪些必須的挑戰_web網站開發有哪些挑戰

        Web軟件開發工程師可以分為Web前端和后端開發。那什么是Web前端,什么是Web后端呢?下面由學習啦小編為大家整理的web前端開發的挑戰,希望大家喜歡! web前端開發的挑戰 第一大挑戰:兼容性 瀏覽器種類非常多,IE、Firefox、Chrome、Opera、還有眾多的IE加殼瀏
        推薦度:
        點擊下載文檔文檔為doc格式

        精選文章

        26618 主站蜘蛛池模板: 欧美喷潮最猛视频| 久久天天躁夜夜躁狠狠ds005| 最新精品国偷自产在线下载| 国产高清亚洲一区亚洲二区| 亚洲a人片在线观看网址| 99久久国产精品无码| 亚洲熟妇色xxxxx亚洲| 日99久9在线 | 免费| 亚洲午夜久久久久久噜噜噜| 日韩乱码卡一卡2卡三卡四| 深夜在线观看免费av| 丰满人妻被黑人猛烈进入| 国产一区一一区高清不卡| 91精品国产一二三产区| 最新偷拍一区二区三区| 久久SE精品一区精品二区| 久久国产精品夜色| 国产情侣激情在线对白| 日韩av在线不卡免费| 激情五月日韩中文字幕| 久久国产精品99久久蜜臀| 久久99精品久久久久麻豆| 日韩人妻无码一区二区三区99| 国产精品一区中文字幕| 九九久久人妻一区精品色| 亚洲欧洲∨国产一区二区三区| 亚洲精品成人久久av| 亚洲高清中文字幕在线看不卡| 国产97人人超碰CAO蜜芽PROM| A级孕妇高清免费毛片| 国产无遮挡无码视频免费软件| 日韩高清在线亚洲专区不卡 | 亚洲天堂亚洲天堂亚洲天堂| 人妻少妇久久中文字幕| 国产成人无码免费视频麻豆| 91国在线啪精品一区| 亚洲av无码专区在线亚| 久久综合色天天久久综合图片| 无套内射视频囯产| 免费看欧美全黄成人片| 又大又爽又黄无码a片|