2016年8月27日去國家會議中心參加iweb峯會。
8點半開始簽到入場,8點20分排隊簽到的人已經排到另外一個門口,人超級多啊。
9點一如既往的由h5女神娜姐開場。css
基本是各公司的大佬們介紹各公司產品,回收往事如何抓住機遇,如何賺的人生第一桶金,如何規避風險等。宣傳性質居多。html
表明遊戲 傳奇世界 千年 身爲一個程序媛妹子,我基本上是不怎麼玩遊戲的,對遊戲的理解也限於日常身邊男同事的聊天中,對遊戲很少說。 印象最深的是凌海說的如何規避風險,如何作時間管理,舉例說明了有投資方要求360出3年規劃,3年對互聯網來講時間太長了,3年可能發生不少事,風險是沒法預知的;列舉本身針對一個須要90天的項目,他們公司每每是比較慎重的,他們會把時間細化到30分鐘,相比90天或者3年30分鐘的風險是基本能夠徹底把控的。
一個領先的html5移動技術與服務提供商,erget開放平臺,出款多個遊戲,什麼暗黑之王,亂彈三國,稀有神傳,小小戰爭,三國魂等,支持多種動畫解決方案,平滑動畫,可視化代碼,專業遊戲引擎。 h5遊戲行業有機遇也有挑戰,性能的大幅提高和微信帶來的流量都是h5遊戲行業的機遇(流量變現等)
他從h5遊戲的性能方面作了分析,對於h5的將來,他報以謹慎樂觀的態度 分析了h5遊戲的性能方面 1. webGL性能提升 5~10倍 2. Canvas 髒矩形算法 性能提升2倍 3. 內存佔用下降5% 4. 包體減少30% 5.
「很快」鼓勵開發者將技術轉化爲流量,並現場宣佈,和9g合做,啓動了億元流量計劃,爲開發者提供流量
首先這位被娜姐介紹說是「90後」ceo,引發現場一片轟動,90後出道的~ 哈哈 從互聯網的擴大入口:h5會致使病毒式傳播,造成閉環,不像傳統app的場景分割。還有云計算即將來和對新技術的思考:要從應用場景切入,而不是重複造輪子。 對比了優秀app和傳統app的區別, devops區別,這位乾貨不少
提到了web前沿技術:web assembly nodejs 還有Intel在虛擬現實的技術嘗試和酷炫的體驗前端
野狗是國內領先的實時後端雲; 野狗api--最實時通訊api來了,應用於各大場景,可實時同步數據,網頁通訊,實時遊戲,運用於汽車,實現實時同步汽車數據等 使用野狗API,能夠得到實時後端雲的兩大功能 1. 實時通訊 ,包括消息訂閱,推送,雙向通訊等功能。網絡延遲小,服務響應速度快,API簡單易用。 2.數據存儲,提供了一個Key-Value的雲端數據存儲,直接經過API就能夠對數據進行存取操做。操做簡單,按需擴展。
互聯網下半場,原生應用成本高,留存率低等問題已經顯現。如何用HTML5解決這個問題呢?他提供的答案就是流應用啦~
這個比較接地氣,說什麼目的都是能掙錢,第一桶金開發一款小遊戲賺到一點小錢650萬 LayaBox闡述了將來遊戲市場將呈現頁遊、手遊、HTML5多端融合的趨勢,強調了HTML5技術跨端、多屏、免下載等特色給遊戲行業帶來的革新性變化。在LayaBox看來,HTML5遊戲是遊戲市場上一課冉冉升起的新星,即將迎來爆發。同時,LayaBox也詳細介紹了旗下第二代HTML5遊戲引擎LayaAir,其支持Flash頁遊、APP手遊、HTML5遊戲 三端同發的特色和超越Unity3D的性能贏得了現場陣陣掌聲。目前,LayaBox業務涵蓋了引擎提供、遊戲發行、遊戲渠道、IP合做、項目投資、教育培訓6大板塊,是一家綜合性的遊戲服務企業。
主要對原生APP和hybrid app的比較,簡述爲解決白頁多webview 實現轉場動畫等, 複雜效果native 實現,簡單效果h5實現「重混」 - wex5 「輕混」,只需前端調用,提供打包平臺 WeX5的可視化操做,同咱們公司Hy框架比較來講,wex5基於phonegap 源碼改造,組價可拖拽組成頁面,HY是本身實現的一套,組件開發參考phonegap wex5,一個純h5app開放平臺,組件風格分離,基於css3,引入bootstrp資源,可快速開發。一次開發,全面擁有安卓app,蘋果app,微信服務號。真正的html5 app開發雲。
由於去年參加完D2大會後,我在公司內部作過一次Hybird的分享,主要對百度BlendUI和其餘框架對比展開,當時雖然查了不少資料,單因爲實際使用很少,對hybird只知其一;不知其二,分享效果很不理想,我亦耿耿於懷很多天,可是當時的辛苦沒有白費,昨天再聽到wex5 王潔講述Hybird的時候,易於接受不少~ 因此啊,別因你當下的努力沒有效果就懊惱~ 因爲本人演講時易緊張,不善措辭,想用本身的話把wex5解釋明白有點困難,遂轉載以下文章,供我的參考學習 [http://www.weixinla.com/document/22647975.html]html5
基本上從早期的多元化走向了只有Android和iOS兩個系統的環境。對於開發者來講,就意味着一個App須要制定兩套實現方案,這對開發成本和維護成本都是很是大的挑戰。基於這樣一個現實,其解決方案就是想辦法實現套代碼跨端運行,因此Hybrid APP混合應用模式應運而生 在Hybrid APP發展早期,Web運行性能是當時的主要的瓶頸。Web在性能方面有缺陷,Web不夠就用Native來湊,就是選擇了用原生技術來彌補Web上的性能不足,其實就是多WebView。混合的單WebView最大的障礙就是頁面切換,閃白很明顯。手機裏面又講究用戶交互體驗,從一個頁到另外一個頁想作個平滑的動畫,用純Web技術在當時的條件下是很是難以實現的,其實目前大多數框架也是這麼作的,就是採用多WebView,這樣能夠平滑的轉場。 由於早期硬件比較差,瀏覽器性能也通常般,因此有一些比較複雜的組件在實現一些功能的時候,速度比較慢。當時框架裏是用NativeUI組件來彌補的,配合Web來實現這些功能。這種模式被定義爲「重混」,用原生的能力去彌補UI,或者技術更偏Native的框架就被定義爲重混的Hybrid App框架。 重混框架優缺點很明顯,優勢是提高了運行性能、加強了交互。缺點是Web和Native技術交叉混雜,增長了開發人員的工做難度。可是,當下的手機硬件配置已經有了很大的改善,包括瀏覽器技術的發展也很重要,在GS引擎方面都有長足的進步。實現功能的時候用Web的技術的前提下已經再也不須要Native技術來彌補了,隨着技術的發展,性能已經再也不是瓶頸。
另外一個改變了移動應用這一領域的進程事件是,自從微信推出之後,至關於從新定義了移動應用的概念,經過它的服務號、公衆號、企業號,微信自己變成了一種應用平臺。包括微信最新的版本更新,它瀏覽器內核的升級,包括對遊戲的支持,都和大量的移動App開發有着莫大的關聯。而這個時候重混的框架就顯得多餘了,由於在重混框架裏面不少性能的解決是依賴Native的原生部分。而到了微信裏面,多WebView和NativeUI都沒有了。原來在重混框架裏面很強的一些能力徹底就消失了,這時候在微信裏面就有不少能力就不能用了。 因而輕混就成了目前真正要跨端Hybrid App的必然選擇,這時候輕混的UI部分必須用純Web技術,在底層的設備接口上,GS沒法完成的原生部分須要Native技術來彌補。須要強調的是,Native的技術是不該該去侵入UI的,這樣的一個框架就是咱們所說的輕混Hybrid App框架,這纔是真正的HTML5 App框架。 ![](media/14723796454471/14723805778403.jpg)
伴隨着以上的觀點,接下來談談如何構建輕混模式下的HTML5 App框架。這種混合框架很簡單,首先要有一個內置了瀏覽器的外殼,在瀏覽器裏提供網頁運行環境,同時在這個外殼上提供不少插件,可讓網絡經過GS進行操做。 基於這樣的認識,王潔說,在選擇HTML5框架設計的時候,要解決兩個框架的問題,一個是HTML5的框架,一個是Native的框架。首先看Native框架的選擇,選擇PhoneGap框架,受到了業內主流廠商支持,微軟也是用Cordova,它的插件框架是開放的,很容易自定義。 另外就是要解決HTML5的一些性能問題,若是不採用重混架構的話,在頁面切換仍是會有一些障礙,王潔說到,WeX5採用SPA單頁應用模式,它是基於傳統的頁面加載模式MPA,頁面之間互相獨立。可是SPA的不一樣之處在於,其框架裏整個頁面是由外殼頁面框架組成的,是用AJAX技術完成的,AJAX在桌面時代就存在,經過局部刷新來提高用戶體驗。可是把AJAX技術最大化來使用,整個頁面框架都用AJAX來實現,每一個頁面的加載都是這樣的方式。
對設備的局部渲染,能夠在加載的時候在後面預加載再作轉場動畫,並且還不須要依賴多Web應用,不須要依賴Native就能夠完成。並且在加載多頁框架時每一個頁面的共用功能要重複加載。因此從各方面來講SPA相對於MPA是有極大的性能提高的。 SPA確實很好用,可是在設計產品的時候須要考慮到多人協做過程當中,支持複雜應用的開發過程當中,會不會出現多個ID會衝突,樣式衝突,JS衝突等等致命問題?因此下面就談到了頁面隔離的問題。
解決這樣棘手的問題,王潔說,首先要考慮到HTML元素ID衝突的問題,由於是可視化工具,因此ID屬性的設計是拖到一個屬性欄裏去定義ID,這時候恰好能夠用一個替換原則,用了XID來替換,不會直接設定ID屬性。這樣到內存裏,會動態的生成真實的ID,會在XID後面加一個頁面標誌,這樣能夠保證多人寫的頁面在加載內存裏ID是不相同的,也就不存在衝突。固然提供一些API的時候是能拿到真實ID,對應相應的元素,不影響訪問。在整個組件體系裏,開發者利用很簡單的方法就能夠拿到組件,能夠很平滑的解決掉ID衝突的問題。 CSS樣式衝突問題分爲兩類,一類樣式是共用樣式,多頁面引用同一個頁面;另外一類樣式被定義爲私有樣式,只使用頁面,但不但願這個頁面干擾到其餘頁面。這時候給每一個頁面都配了一個CSS文件,定義私有樣式,限定在當前頁面。實現起來也很簡單,經過對工具的編譯,把私有CSS文件裏的全部樣式加一個頁面標誌,在頁面節點的屬性上加一個標誌,這樣就使得class只能做用於當前頁面的HTML元素,這就成爲了一個私有樣式。 而後是JavaScript問題,如今JavaScript模塊化技術很流行,借用JavaScript模塊化技術,解決JavaScript隔離問題。王潔在這裏順便把RequireJS簡單的提了一下,經過define能夠定義模塊,在RequireJS定義裏,這個大括號裏的纔是模塊裏的代碼。無論是方法仍是變量,都封裝在閉包裏,每一個代碼都是寫在define的模塊裏,這樣就把代碼天然隔離了。 ![](media/14723796454471/14723810488469.jpg) 王潔說他們在外圍還作了一些工做,首先是實現完整的外殼管理,Shell類提供外殼管理。爲了防止信息泄露,在配置的時候確實會把頁面完整卸載掉。當加載頁面片段時,會從當前外殼數把JS刪掉,頁面加載的時候建立的JS對象都會完整的釋放掉,這是由框架來保證的。另外是路由的問題,在SPA單頁面框架里路由是很重要的,由於是單頁面應用,加載的頁面都是片段,其實UI地址一直是外殼的地址。 下圖是總體框架的架構。黃色部分用的是Cordova,解決安卓和蘋果的原生調用問題。同時要兼容微信,因此上面把Cordova和微信又作了封裝,抽象成統一的HTML5 API。若是經過統一的Native API去拍照,會自動根據頁面環境,經過Cordova接口調用,這樣能夠更方便的實現一次開發,多端運行,代碼不須要改,既能夠運行在原生App裏,也能夠運行在微信裏。包括拍照、GPS地圖,一系列的API均可以進統一分裝。
Bootstrap在這裏提供了幾個能力。一個是樣式美化,扁平化風格,另外響應式佈局。基於Bootstrap設計的頁面,運行在不一樣的設備上不須要考慮分辨率,會自動處理設備分辨率。再上面實現了WeX5的組件框架和數據框架,頁面上不只有交互的UI組件,頁面裏面還有數據。接下來是業務框架層,即SPA單元頁面框架。在服務端WeX5還提供了XBaaS服務,負責後端數據存取、邏輯,還有第三方地圖、支付等功能實現。WeX5提供多語言實現,提供了不一樣語言的版本,開發者能夠針對本身的版原本集成到本身的框架裏。
在分享的最後,王潔給你們展現了基於WeX5這樣的框架所開發出來的一些功能。首先是可視化的快速開發程度,幫助開發者經過可視化開發定義頁面,框架能夠保證運行體驗,必須能快速加載,並且各類首試、硬件能力的是一體化集成的。把組件拖到表單上定義佈局,設置屬性,便可獲得最終頁面,設計室和運行室相鄰,徹底所見即所得。
豐富多樣的組件,足以適應各類複雜表單的組合。經過把常見功能組件封裝,能夠極大減輕開發者的開發工做量。最關鍵的是整個組件框架徹底開源,除了WeX5提供的上百個組件之外開發者還能夠本身定義這個可視化組件,甚至能夠繼承第三方組件,經過規範的方式封裝成HTML5的可視化組件。 編程問題也是重點,WeX5的定位是可視化程度更高的前端編程工具。不只能夠可視化設計,編程也是便捷。它能實現代碼的智能提示、代碼模板,還內致了Emmet框架。隨後考慮的是調試問題,WeX5是一體化的環境,不只要解決開發、編程,還要解決調試的過程,既能夠在Web瀏覽器上調試,也能夠連到手機上調試,全部代碼都是開源的,底層內庫也是開放的。最後就是打包的問題,打包要考慮不少插件的配置,參數,資源在命令行的配合。WeX5提供了一個打包的嚮導,徹底本地打包,不須要依賴雲打包服務,只須要把打包過程當中要設置的東西徹底工具化,能夠設置應用版本、證書、LOGO、圖片、插件裏的參數,最後就能夠應用到App上。
講述了Intel的各類「黑科技」,還介紹了關於深度加強攝像,場景感知與模型,crosswalk,nw.js
nwjs是在英特爾開源技術中心建立的,它是基於谷歌瀏覽器核心引擎和nodejs運行,你能夠經過nwjs技術使用html和js語言編寫本地應用程序,它也可讓你直接從DOM調用nodejs模塊,使用一種新的方式與全部的Web技術編寫本地應用。它主要有如下6個特色: (1)以網絡最流行的技術編寫原生應用程序的新方法 (2)基於HTML5, CSS3, JS and WebGL而編寫 (3)徹底支持nodejs全部api及第三方模塊 (4)可使用DOM直接調用nodejs模塊 (5)容易打包和分發 (6)支持運行環境包括32位和64位的Window、Linux和Mac OS
瑤姐機智自沒必要說,網紅魅力;
開場前有蹲在我旁邊的妹子跟同伴聊天說「瑤姐,原來是個男的啊」,後面還有一位男生聽到是去哪兒的遂說「去哪兒的杜瑤是要講avalon吧「,我和胖子王濤笑哭,不知司徒聽到這話會不會哭node
YO 一款基於Sass開發的css框架,用於快速構建移動UI項目react
代碼更輕量jquery
ios的交互及展示更具有普適性webpack
不緊密捆綁UI組件ios
Yo將不一樣的功能拆解成結構清晰的類別分散到不一樣的層去進行處理css3
yo|---usage
|---lib
結束混亂的文件引用
字體,大小等除邊框厚度外的定義使用rem
解決實現retina屏真正的1px 邊框問題
下面是瑤姐展現的一些demo:
大體是使用scss語法 @include XX(yo定義好的插件模塊eg: circle(2rem) ellipsis)
響應式
講述了手機QQ在react框架下的全家桶開發套件,以及踩過得各類坑和性能的極致優化
資料參考http://dev.qq.com/topic/579083d1c9da73584b02587d
在手Q家校羣重構以前,其實咱們已經作了一版PC家校羣。當時將native的頁面所有web化,直接就採用了React比較經常使用的全家桶套裝:
• 構建工具 => gulp + webpack
• 開發效率提高 => redux-dev-tools + hot-reload
• 統一數據管理=> redux
• 性能提高 => immutable + purerender
• 路由控制器 => react-router(手Q暫時沒采用)
狀態/數據管理優化
針對React的這個數據比較的深比較deepCompare,要點有2個: • 儘可能使傳入的數據扁平化一點 ![](media/14723796454471/14723916417700.jpg) ![](media/14723796454471/14723917054772.jpg) • 比較的時候作一些限制,避免溢出棧
渲染性能優化
簡單回購
Starter-Kit
steamer-react
https://github.com/SteamerTeam/steamer-react/tree/react-preact
web分支,同構分支,preact兼容分支
騰訊發起的交流會 將於2016-10-23 日舉行
他鼓勵前端開發者們沉澱出本身的最佳實踐,同時你們能夠去看一下他們開源的解決方案:站在巨人的肩膀上才能看得更遠
對比之前需求來了-幹活的工做模式,工程化-自動化工做流能提升效率即新一代構建工具 rollup (參考文章 http://jixianqianduan.com/frontend-build/2016/01/20/next-generation-js-module-bunlder.html?utm_source=tuicool&utm_medium=referral)
索性github上有demo,我尚未來的及實踐,拋連接
手機淘寶營銷互動腳手架 https://github.com/amfe/activity-template
ppt 地址 https://pan.baidu.com/s/1kVwbDsV Mi Cloud的主站就是這樣的一個大型的SPA,它主要定位於PC端,PC端包括Web版和桌面應用,同時也兼顧一下移動端。Mi Cloud也正在基於electron開發一個桌面應用
model層和view層不知道彼此的存在,甚至不知道controller的存在,它們只是經過拋出事件通知外界本身處於什麼狀態,好比view中的哪一個按鈕被點擊了,model中的哪一個字段有更新了。它們不關心誰監聽這些事件。
好處:
• model層和view層徹底分離,能夠由不一樣的人並行開發
• 能夠不依賴走通整個流程來測試,model層和controller徹底沒有DOM操做,能夠實現自動化的單元測試
• 要增長或刪除功能,只須要開始或中止監聽事件便可,層與層之間解耦以後很容易實現對某一部分的替換、增減
因而我將controller的兩套流程分離一下,各司其職。
這樣,無論是從model層到view層的數據流,仍是從view層到model層的數據流,雖然這兩個數據流的起點和終點是對調過來的,但它們流經的節點不同,這樣就清晰了不少。
熟悉react和redux的朋友,可能看這幅圖會比較眼熟。是的,這個時候已經造成了一個單向數據流的閉環。其實,當時我也不知道這會造成所謂的單向數據流,只是在探索怎麼化簡複雜度罷了。
架構演變到這一步,其實已經開始了第二輪重構,當時仍是2015年夏天,我開始熱火朝天的寫一些demo嘗試這個架構模式。
另外一方面,我已經開始嘗試將view層組件化,也就是將一個個視圖類實現成可組合可嵌套的,在通用的視圖類上實現了一套添加子組件/移除子組件等等的API,將整個界面實現成一個個視圖實例組成的樹狀結構。
但其中一直有一些痛點,其中以view層的痛點最加重業務的複雜度。
因而在view層我改爲使用react來實現。業務層只須要寫全量渲染的代碼,不再用寫局部更新的代碼了,框架本身會幫業務層對DOM作局部更新。手動點個贊。
網上也有不少使用backbone的model配合react的文章,其實就相似於咱們的架構演變到這一步時的方案。
因而我繼續實踐,很快又挖出了一個痛點。。
更新組件樹中的深層節點時很麻煩。
一開始的作法是,從組件樹的根節點一層層的往下傳數據,這顯然很麻煩。
再次帶着問題尋找解決方案。此時redux框架通過屢次迭代以後,開始成熟、穩定下來,我發現redux提供的connect函數正好能讓我直接把數據傳遞給組件樹中的深層節點。
因而我引入了redux,最終項目的架構就變成了這樣
• 強類型,靜態類型檢查 • 異常處理的最佳實踐 • 自動化測試的健全:由於基於react這種視圖層框架幾乎不須要操做DOM,基於redux這種函數式編程思想的框架管理整個應用的狀態,反作用和狀態都獲得很好的控制
1. 分治:無論多麼龐大的問題,咋一看很複雜,但把它切割成一個個小問題以後,局面就變得清晰了不少。模塊化、組件化都是這個思路,我以爲前端的路由也體現了分治的思想,把路由看做一個有限狀態機,它就將應用的生命週期劃分紅了幾個大的狀態。 2. 善於利用巨人的肩膀:其實,複雜度並不會減小,它只會從一個地方轉移到另外一個地方,複用組件如此,框架爲業務層封裝複雜性也是如此,因此,善於利於巨人的肩膀,由於它已經幫你轉移了複雜度。 3. 先確認瓶頸再作性能優化:雖然是老生常談,但仍是要強調一下,由於真的頗有用但又很容易忘記。 4. 二八原則:考慮項目的生命週期、影響力來衡量投入的資源,好鋼用在刀刃上,我我的感受小米挺強調成本控制的,畢竟咱們是創業公司,跟大公司能夠適當冗餘不太同樣。
做者出過書
http://www.doc88.com/p-1896013152047.html
https://github.com/scrat-team/scrat