1.bundle�ײ�Դ��
2.HDFSçº å ç
3.Text Mesh Pro图文混排如何对任何都能实现
4.Flutter系统网络加载流程
5.å¦ä½è¯ä»· React Native
bundle�ײ�Դ��
React Native UI和写Android XML布局布局在本质上相似,底层读个人感觉差异不大。源码源代
在《ReactJS到React-Native,码阅架构原理概述》中提到,底层读在web环境中,源码源代React框架,码阅chromium 源码使用JSX源码通过React框架最终渲染到了浏览器的底层读真实DOM中。而在React Native框架中,源码源代JSX源码通过React Native框架编译后,码阅通过对应平台的底层读Bridge实现了与原生框架的通信。如果在程序中调用了React Native提供的源码源代API,那么React Native框架就通过Bridge调用原生框架中的码阅方法。底层为React框架,底层读UI层变更映射为虚拟DOM进行diff算法,源码源代diff算法计算出变动后的码阅JSON映射文件,最终由Native层将此JSON文件映射渲染到原生App的页面元素上,实现了通过控制state和props的变更引起iOS与Android平台UI的变更。编写的React Native代码最终会打包生成一个main.bundle.js文件供App加载,此文件可以在App设备本地,也可以存放于服务器上供App下载更新。Yoga是codepay支付平台源码一个使用C语言实现的CSS3/Flexbox的跨平台布局引擎,旨在打造一个兼容iOS、Android、Windows平台在内的布局引擎,让界面布局更加简单。Yoga通过实现许多设计师熟悉的API并对外开放。利用Yoga,目前已经被用于React Native和Weex等开源项目中,虽然只实现了W3C标准的一个子集,但在样式方面也有一定的应用。
核心组件和API在React Native中可以通过reactnative.cn/docs/components/查找。供热服务系统源码为了给React-Native组件加上样式,需要在JavaScript中添加样式表。Flexbox是构建响应式App的最佳选择,虽然CSS在React Native中的表现不太一致,且React Native并不是为web元素设计的,不能像web应用在html中使用CSS。但Weex在这方面具有优势。React和宿主平台之间的桥接包含了一个缩减版CSS子集的实现,主要通过flexbox进行布局。使用内联样式,组织树css源码通过JavaScript对象进行样式组织,这也是React团队先前在Web环境中推荐的。对于复杂的样式,建议使用StyleSheet.create来集中定义组件的样式,这可以弥补编写复杂样式时不能使用CSS的不便。
RN中的宽高可以直接通过style指定,尺寸是无单位的,表示与设备像素无关的逻辑像素点。在组件样式中使用flex可以使组件在可利用的空间中动态地扩张或收缩。与Android LinearLayout的机构报团源码layout_weight类似,值越大,组件获取剩余空间的比例越多,但RN的优先级高于width。使用flex布局,可以与Android类似地调整组件的优先级。
在动画方面,React Native提供了两个互补的动画系统:用于创建精细交互控制的Animated和用于全局布局动画的LayoutAnimation。Animated旨在以声明的形式定义动画的输入与输出,建立一个可配置的变化函数,通过start/stop方法控制动画的执行顺序。配置动画具有高度灵活性,包括自定义或预定义的easing函数、延迟、持续时间、衰减系数、弹性常数等。配置动画时,可以通过parallel、sequence、stagger和delay组合使用多个动画。默认情况下,如果任何一个动画停止或中断,组内所有其他动画也会停止,但可以设置stopTogether属性禁用自动停止。合成动画值可以通过加减乘除以及取余等运算来创建新的动画值。插值可以在动画属性中设置值变化区间,如在接近特定值时改变动画行为。跟踪动态值可以通过设置toValue来实现,同时跟踪多个值。通过启用原生驱动,动画可以在启动前将所有配置信息发送到原生端,利用原生代码在UI线程执行动画,而无需在两端间频繁沟通,从而避免了JS线程被卡住时影响动画的问题。
LayoutAnimation允许在全局范围内创建和更新动画,这些动画会在下一次渲染或布局周期运行,特别适用于更新flexbox布局。使用LayoutAnimation时,注意它对动画本身的控制不如Animated或其它动画库方便,因此在使用时应谨慎考虑。如果要在Android上使用LayoutAnimation,需要在UIManager中启用。
HDFSçº å ç
å¯æ¬æ¯æè´µç--å¨HDFSä¸é»è®¤ç3å¯æ¬æºå¶æ%çåå¨ç©ºé´åå ¶å®çèµæºï¼æ¯å¦ï¼ç½ç»å¸¦å®½ï¼å¼éãç¶èï¼ç¸å¯¹äºä½ I/O æ´»å¨çææ°æ®éåå·æ°æ®éï¼å¨æ£å¸¸çæä½æé´å¯¹å ¶é¢å¤çå¯æ¬å¾å°è®¿é®ï¼ä½æ¯ä»ç¶æ¶èä¸ç¬¬ä¸å¯æ¬ç¸åæ°éçèµæºã
å æ¤ï¼ä¸ä¸ªèªç¶çæ¹è¿æ¯ä½¿ç¨çº å ç ï¼Erasure Codingï¼æ¿ä»£å¯æ¬æºå¶ï¼å®ä½¿ç¨æ´å°çåå¨ç©ºé´æä¾ç¸åç容é级å«ï¼ä¸ä¸ªå ¸åççº å ç 设置ï¼ä¼ä½¿å¾åå¨ç©ºé´çå¼éä¸è¶ è¿%;ä¸ä¸ªECæ件çå¯æ¬å åæ¯æ æä¹çï¼å®ä¸ç´ä¿æ为1ï¼å¹¶ä¸ä¸è½éè¿å½ä»¤ -setrepä¿®æ¹ECçå¯æ¬å åçå¼ã
ç£çéµåï¼RAIDï¼æ¯å¨åå¨ç³»ç»ä¸ï¼ä½¿ç¨ECæåºåçãRAID使ç¨æ¡ 带çæ¹å¼å®ç°çECï¼å®æä¾é»è¾ä¸åºåçæ°æ®ï¼æ¯å¦æ件ï¼å°æ´å°çåå ï¼æ¯å¦æ¯ç¹ãåèãæåï¼ï¼å¹¶åå¨è¿ç»çåå å°ä¸åçç£çä¸ãå¨æ¬æåçå ¶ä½é¨åï¼è¿ç§æ¡å¸¦åå¸åå 被称为æ¡å¸¦åå ï¼æè åå ï¼ï¼å¯¹äºæ¯ä¸ä¸ªæ¡å¸¦åå§æ°æ®åå ï¼è®¡ç®å¹¶åå¨ä¸å®æ°éçå¥å¶æ ¡éªåå ï¼è¿ä¸ªè¿ç¨å«åç¼ç ãéè¿å¯¹å©ä½çæ°æ®åå¥å¶æ ¡éªåå 解ç 计ç®ï¼å¯ä»¥æ¢å¤ä»»ææ¡å¸¦åå çé误ã
å°ECåHDFSéæå¯ä»¥æé«åå¨æçï¼ç¶èåæ ·æä¾ä¼ ç»çåºäºå¯æ¬æºå¶çHDFSæä¹ åé¨ç½²ï¼ä¾å¦ï¼3å¯æ¬çæ件æ6个åï¼å°ä¼æ¶è 6*3 = 个åçç£ç空é´ï¼ä½æ¯ä½¿ç¨ECï¼6个æ°æ®ï¼3ä¸ªæ ¡éªï¼é¨ç½²ï¼ä»å°åªæ¶è9个åçç£ç空é´ã
å¨ECçç¯å¢ä¸ï¼æ¡å¸¦æè¥å¹²ä¸»è¦çä¼ç¹ï¼é¦å ï¼å®è½å¨çº¿ECï¼ä½¿ç¨ECçæ ¼å¼ç´æ¥åæ°æ®ï¼ï¼é¿å 转æ¢é¶æ®µï¼ç´æ¥èçåå¨ç©ºé´ãå¨çº¿ECéè¿å¹¶è¡å©ç¨å¤ç£ç主轴å¢å¼ºI/Oæ§è½ï¼è¿å¨é«æ§è½çç½ç»çé群ä¸å°¤å ¶éè¦ãå ¶æ¬¡ï¼å®èªç¶çååå°æ件å°å¤ä¸ªDataNodesï¼æ¶é¤äºå°å¤ä¸ªæ件ç»å®å°ä¸ä¸ªç¼ç ç»çéè¦ï¼è¿ä¼å¾å¤§çç®åæ件çæä½ï¼æ¯å¦å é¤ãé é¢æ±æ¥åå¨èé¦é群ä¸ä¸åçNamespaceä¹é´è¿ç§»æ°æ®çãå¨å ¸åçHDFSé群ä¸ï¼å°æ件å æ»åå¨ç©ºé´3/4以ä¸çæ¶èï¼ä¸ºäºæ´å¥½çæ¯æå°æ件ï¼å¨ç¬¬ä¸é¶æ®µå·¥ä½ä¸ï¼HDFSæ¯ææ¡å¸¦çECãå¨æªæ¥ï¼HDFSä¹ä¼æ¯æè¿ç»çECå¸å±ï¼æ¥ç设计ææ¡£ï¼æ´å¤çä¿¡æ¯å¨issue HDFS- ä¸è®¨è®ºã
æ¡å¸¦çHDFSæ件æ¯ç±é»è¾ä¸çåç»ææï¼æ¯ä¸ªåç»å å«ä¸å®æ°éçå é¨åï¼ä¸ºäºåå°é¢å¤çå对NameNodeå åæ¶èï¼æåºäºæ°çåå±åå½ååè®®ï¼åç»çIDå¯ä»¥ä»å®çå é¨åçä»»æ ID ä¸æ¨æåºæ¥ï¼è¿å 许åç»çº§å«ç管çï¼èä¸æ¯å级å«çã
客æ·ç«¯è¯»åè·¯å¾è¢«å¢å¼ºï¼å¯ä»¥å¹¶è¡å¤çä¸ä¸ªåç»çå¤ä¸ªå é¨åï¼å¨è¾åº/åå ¥è·¯å¾ï¼ DFSStripedOutputStream ç¨äºç®¡çä¸ç»æ°æ®æµï¼æ¯ä¸ªæ°æ®æµå¯¹åºä¸ä¸ªDataNodeï¼è¯¥DataNodeå¨å½ååç»ä¸åå¨ä¸ä¸ªå é¨åï¼è¿äºæ°æ®æµå¤§å¤æ¯å¼æ¥å·¥ä½ï¼åè°å¨è´è´£æä½æ´ä¸ªåç»ï¼å æ¬ç»æå½åçåç»ãåé æ°çåç»ççãå¨è¾å ¥ / 读路å¾ï¼ DFSStripedInputStream å°è¯·æ±çé»è¾åèèå´çæ°æ®è½¬æ¢ä¸ºåå¨å¨DataNodesä¸çå é¨åçèå´ï¼ç¶å并è¡çåå¸è¯»è¯·æ±ï¼å¨åºç°æ éæ¶ï¼å®ååºé¢å¤ç读请æ±ç¨äºè§£ç ã
DataNodeä¼è¿è¡ä¸ä¸ªé¢å¤ç ErasureCodingWorker (ECWorker) ä»»å¡ç¨äºåå°æ¢å¤å¤±è´¥çECåï¼å½NameNodeæ£æµå°ä¸ä¸ªå¤±è´¥çECåï¼å®ä¼éæ©ä¸ä¸ªDataNodeå»åæ¢å¤çå·¥ä½ï¼æ¢å¤ä»»å¡éè¿å¿è·³ååºä¼ éè³DataNodeï¼è¿ä¸ªè¿ç¨ç±»ä¼¼äºå¯æ¬åéæ°å¤å¶å¤±è´¥çæ°æ®åï¼é建失败çåæ3个主è¦çä»»å¡ï¼
使ç¨ä¸ç¨ç线ç¨æ± 并è¡ç读åè¾å ¥æ°æ®ï¼åºäºECçç¥ï¼å®å°ææç读请æ±è°åº¦å°ææçæºèç¹ï¼å¹¶ä¸åªè¯»åæå°æ°æ®éçè¾å ¥åæ°ç¨äºéæã
ä»è¾å ¥æ°æ®ä¸è§£ç åºæ°çæ°æ®ååå¥å¶æ ¡éªåï¼ææ丢失çæ°æ®ååæ ¡éªåä¸èµ·è§£ç ã
解ç å®æåï¼æ¢å¤çæ°æ®åè¢«ä¼ è¾å°ç®æ DataNodeèç¹ã
为äºä½¿çº å ç çç¥éåå¼æçå·¥ä½æ¹å¼ï¼æ们å 许HDFSé群ä¸çæ件åç®å½å ·æä¸åçå¯æ¬åçº å ç çç¥ï¼çº å ç çç¥å°è£ äºå¦ä½ç¼ç /解ç æ件ï¼æ¯ä¸ä¸ªçç¥ç±ä»¥ä¸ä¿¡æ¯é¨åå®ä¹ï¼
è¿ä¸ªå æ¬å¨ECç»ï¼æ¯å¦ï¼6+3ï¼ä¸æ°æ®ååæ ¡éªåçæ°éï¼ä»¥åç¼è§£ç å¨ç®æ³ï¼æ¯å¦ï¼ Reed-Solomon, XOR ï¼
è¿å³å®äºæ¡å¸¦è¯»åçç²åº¦ï¼å æ¬ç¼å²åºå¤§å°åç¼ç å·¥ä½ã
çç¥è¢«å½å为æ°æ®åæ°é-æ ¡éªåæ°é-ååå ç大å°ï¼å½åæ¯æ6ç§å ç½®çç¥ï¼RS-3-2-k, RS-6-3-k, RS--4-k, RS-LEGACY-6-3-k, XOR-2-1-k åREPLICATIONã
REPLICATIONæ¯ä¸ç§ç¹æ®ççç¥ï¼å®åªè½è¢«è®¾ç½®å¨ç®å½ä¸ï¼å¼ºå¶ç®å½éç¨3å¯æ¬çç¥ï¼èä¸æ¯ç»§æ¿å®çç¥å ççº å ç çç¥ï¼è¯¥çç¥ä½¿3å¯æ¬ç®å½ä¸çº å ç ç®å½äº¤åæ为å¯è½ã
REPLICATION çç¥æ¯ä¸ç´å¯ç¨çï¼èå ¶å®çå ç½®çç¥å¨é»è®¤çæ åµä¸æ¯ç¦ç¨çã
类似äºHDFSåå¨çç¥ï¼çº å ç çç¥æ¯è®¾ç½®å¨ç®å½ä¸çï¼å½ä¸ä¸ªæ件被å建ï¼å®ç»§æ¿ç¦»å®æè¿çç¥å ç®å½çECçç¥ã
ç®å½çº§å«çECçç¥åªå½±åå¨è¯¥ç®å½ä¸å建çæ°æ件ï¼ä¸æ¦ä¸ä¸ªæ件已ç»è¢«å建ï¼å®ççº å ç çç¥å¯ä»¥è¢«æ¥è¯¢ï¼ä½æ¯ä¸è½æ¹åï¼å¦æä¸ä¸ªçº å ç æ件被éå½åå°ä¸ä¸ªä¸åçECçç¥çç®å½ä¸ï¼è¯¥æ件ä¼ä¿çå®ä¹ååå¨çECçç¥ï¼è½¬æ¢ä¸ä¸ªæ件å°ä¸åçECçç¥éè¦éåå®çæ°æ®ï¼éåæ°æ®æ¯éè¿æ·è´æ件ï¼æ¯å¦ï¼éè¿distcpï¼èä¸æ¯éå½åæ件ã
æ们å 许ç¨æ·éè¿XMLæ件çæ¹å¼å»å®ä¹å®ä»¬èªå·±çECçç¥ï¼è¯¥XMLæä»¶å¿ é¡»è¦æä¸é¢ç3é¨åï¼
1ï¼ layoutversion: 表示ECçç¥æä»¶æ ¼å¼ççæ¬ã
2ï¼ schemas: è¿ä¸ªå æ¬ææç¨æ·å®ä¹çEC约æ
3ï¼ policies: è¿ä¸ªå æ¬ææç¨æ·å®ä¹çECçç¥ï¼æ¯ä¸ªçç¥ç±schema idåæ¡å¸¦åå ç大å°ï¼cellsizeï¼ææï¼
å¨hadoop confç®å½ä¸æä¸ä¸ªåç§°å« user_ec_policies.xml.templateçæ ·æ¬ECçç¥çXMLæ件ã
å ç¹å° ISA-L 代表å ç¹å°æºè½åå¨å éåºï¼ ISA-L æ¯ä¸ºåå¨åºç¨ç¨åºä¼åçåºå±å½æ°å¼æºçéåï¼å®å æ¬å¨ AVX å AVX2 æ令éä¸å¿«éçå Reed-Solomon ç±»åççº å ç ä¼åï¼HDFSçº å ç å¯ä»¥å©ç¨ISA-Lå»å éç¼è§£ç 计ç®ï¼ISA-Læ¯æ大å¤æ°å¼æºçæä½ç³»ç»ï¼å æ¬linuxåwindowsï¼ISA-Lé»è®¤æ¯ä¸å¯å¨çï¼æå ³å¦ä½å¯å¨ISA-Lï¼è¯·çä¸é¢ç说æã
çº å ç å¨é群çCPUåç½ç»æ¹é¢æåºäºé¢å¤çè¦æ±ã
ç¼ç å解ç å·¥ä½ä¼æ¶èHDFS客æ·ç«¯åDataNodesä¸é¢å¤çCPUã
çº å ç æ件ä¹åå¸å¨æºæ¶ä¹é´ï¼ç¨äºæºæ¶å®¹éï¼è¿æå³çå½è¯»åååå ¥æ¡å¸¦æ件ï¼å¤§å¤æ°æä½æ¯å¨æºæ¶å¤çï¼å æ¤ï¼ç½ç»å¯¹å带宽é常éè¦çã
对äºæºæ¶å®¹éæ¥è¯´ï¼è³å°æ¥æä¸é ç½®çECæ¡å¸¦å®½åº¦ç¸åçæºæ¶æ°éä¹æ¯å¾éè¦çï¼å¯¹äºECçç¥RS (6,3)ï¼è¿æå³çè³å°è¦æ9个æºæ¶ï¼çæ³çæ åµä¸è¦ææè 个æºæ¶ç¨äºå¤ç计åå å计åå¤çåæºã对äºæºæ¶æ°éå°äºæ¡å¸¦å®½åº¦çé群ï¼HDFSä¸è½ç»´æ¤æºæ¶å®¹éï¼ä½æ¯ä»ç¶ä¼åæ£æ¡å¸¦æ件å°å¤ä¸ªèç¹ä¸ºäºèç¹çº§å«ç容éã
é»è®¤æ åµä¸ï¼ææå ç½®ççº å ç çç¥æ¯è¢«ç¦ç¨çï¼ä½æ¯å®ä¹å¨åæ°dfs.namenode.ec.system.default.policyä¸çé¤å¤ï¼è¯¥çç¥å¨é»è®¤æ åµä¸æ¯å¯ç¨çãé群管çåå¯ä»¥æ ¹æ®é群ç大å°åå¸æç容éå±æ§ä½¿ç¨å½ä»¤hdfs ec [-enablePolicy -policy <policyName>]å¯ç¨ä¸ç»çç¥ï¼ä¾å¦ï¼å¯¹äºä¸ä¸ªæ¥æ9个æºæ¶çé群ï¼ç±»ä¼¼RS--4-k è¿æ ·ççç¥ä¸è½è¾¾å°æºæ¶çº§å«ç容éï¼èçç¥RS-6-3-k æè RS-3-2-kæ´éåãå¦æ管çååªå ³å¿èç¹çº§å«ç容éï¼å¨è³å°æ个DataNodesçé群ä¸çç¥RS--4-kä¹æ¯éåçã
ç³»ç»é»è®¤çECçç¥å¯ä»¥éè¿åæ°âdfs.namenode.ec.system.default.policyâ æ¥é ç½®ï¼å¨è¿ç§é ç½®ä¸ï¼å½å½ä»¤ â-setPolicyâ没ææå®çç¥å称çåæ°æ¶ï¼é»è®¤ççç¥å°ä¼è¢«ä½¿ç¨ã
é»è®¤æ åµä¸ï¼åæ° âdfs.namenode.ec.system.default.policyâ çå¼ä¸ºâRS-6-3-kâï¼ä½¿ç¨Reed-SolomonåXORå®ç°çç¼è§£ç å¨å¯ä»¥ä½¿ç¨å®¢æ·ç«¯åDataNodeèç¹æå®å¦ä¸çå ³é®åé ç½®ï¼io.erasurecode.codec.rs.rawcodersç¨æ¥æå®é»è®¤çRSç¼è§£ç å¨ï¼io.erasurecode.codec.rs-legacy.rawcodersç¨äºæå®legacy RSç¼è§£ç å¨ï¼io.erasurecode.codec.xor.rawcodersç¨äºæå®XORç¼è§£ç å¨ï¼ç¨æ·ä¹å¯ä»¥ä½¿ç¨ç±»ä¼¼å ³é®åio.erasurecode.codec.self-defined-codec.rawcodersæ¥é ç½®èªå®ä¹çç¼è§£ç å¨ãè¿äºå ³é®åçå¼æ¯å¸¦æåéæºå¶çç¼ç å¨å称çå表ãè¿äºç¼è§£ç å¨å·¥å以æå®çé ç½®çå¼æåºç被å è½½ï¼ç´å°ä¸ä¸ªç¼è§£ç å¨è¢«æåçå è½½ï¼é»è®¤çRSåXORç¼è§£ç å¨é ç½®æ´å欢æ¬å°å®ç°ï¼èä¸æ¯çº¯javaå®ç°ï¼RS-LEGACY没ææ¬å°ç¼è§£ç å¨å®ç°ï¼å æ¤é»è®¤çåªè½æ¯çº¯javaçå®ç°ï¼ææè¿äºç¼è§£ç å¨é½æ纯javaçå®ç°ï¼å¯¹äºé»è®¤çRSç¼è§£ç å¨ï¼å®ä¹æä¸ä¸ªæ¬å°å®ç°ï¼å©ç¨è±ç¹å° ISA-Låºæé«ç¼è§£ç å¨æ§è½ï¼å¯¹äºXORç¼è§£ç å¨ï¼ä¹æ¯æå©ç¨è±ç¹å° ISA-Låºæåç¼è§£ç çæ§è½çæ¬å°å®ç°ï¼è¯·åé âEnable Intel ISA-Lâè·åæ´è¯¦ç»çä¿¡æ¯ãé»è®¤çRSLegacyçå®ç°æ¯çº¯javaçï¼é»è®¤çRSåXORæ¯ä½¿ç¨äºå ç¹å°ISA-Låºæ¬å°å®ç°çï¼å¨DataNodesä¸ççº å ç åå°æ¢å¤å·¥ä½ä¹å¯ä»¥ä½¿ç¨ä¸é¢çåæ°è¢«è°ä¼ï¼
1ï¼ dfs.datanode.ec.reconstruction.stripedread.timeout.millis --æ¡å¸¦è¯»åè¶ æ¶æ¶é´ï¼é»è®¤å¼ ms
2ï¼ dfs.datanode.ec.reconstruction.stripedread.buffer.size --读åæå¡çç¼å大å°ï¼é»è®¤å¼ K
3ï¼ dfs.datanode.ec.reconstruction.threads -- DataNodeç¨äºåå°éæå·¥ä½ç线ç¨æ°éï¼é»è®¤å¼ 8 个线ç¨
4ï¼ dfs.datanode.ec.reconstruction.xmits.weight -- ä¸å¯æ¬åæ¢å¤ ç¸æ¯ï¼ECåå°æ¢å¤ä»»å¡ä½¿ç¨çxmits çç¸å¯¹æéï¼é»è®¤å¼0.5ï¼è®¾ç½®å®çå¼ä¸º0å»ç¦ç¨è®¡ç®ECæ¢å¤ä»»å¡çæéï¼ä¹å°±æ¯è¯´ï¼ECä»»å¡æ»æ¯1 xmitsãéè¿è®¡ç®åºè¯»æ°æ®æµçæ°éååæ°æ®æµçæ°éçæ大å¼æ¥è®¡ç®åºçº å ç æ¢å¤ä»»å¡çxmitsãä¾å¦ï¼å¦æä¸ä¸ªECæ¢å¤ä»»å¡éè¦ä»6个èç¹è¯»åæ°æ®ï¼å¾2个èç¹åå ¥æ°æ®ï¼å®æ¥æç xmits æ¯max(6, 2) * 0.5 = 3ï¼å¤å¶æ件çæ¢å¤ä»»å¡æ»æ¯è®¡ç®ä¸º1xmitï¼NameNodeå©ç¨dfs.namenode.replication.max-streamsåå»DataNodeä¸æ»çxmitsInProgressï¼å并æ¥èªå¯æ¬æ件åECæ件çxmitsï¼ ï¼ä»¥ä¾¿è°åº¦æ¢å¤ä»»å¡å°è¿ä¸ªDataNodeã
HDFSå©ç¨å ç¹å°ISA-Låºå»æé«é»è®¤çRSæ¬å°å®ç°çç¼è§£ç å¨çç¼è§£ç 计ç®é度ï¼å¼å¯å¹¶ä½¿ç¨è±ç¹å°ISA-Låºï¼éè¦3æ¥ï¼
1ï¼æ建ISA-Låºï¼è¯·åé å®æ¹çç½ç« â /post/
å¦ä½è¯ä»· React Native
React nativeå åå©ç¨äºFacebookçç°æè½®åï¼æ¯ä¸ä¸ªå¾ä¼ç§çéæä½åï¼å¹¶ä¸æç¸ä¿¡è¿ä¸ªå¢é对å端çäºè§£å¾æ·±å»ï¼å¦åä¸å¯è½è®©Native codeãéå± äºçº¿ãã
对åºå°å端å¼åï¼æ´ä¸ªç³»ç»ç»ææ¯è¿æ ·ï¼
JSX vs HTML
CSS-layout vs css
ECMAScript 6 vs ECMAScript 5
React native View vs DOM
æ éç¼è¯ï¼æå¨ç¬¬ä¸æ¬¡ç¼è¯äºipaè£ å¥½ä»¥åï¼å°±åä¹æ²¡æ´æ°è¿appï¼åªè¦æ´æ°äºç«¯çjs代ç ï¼reloadä¸ä¸ï¼æ´ä¸ªçé¢å°±å ¨åäºã
å¤æ°å¸å±ä»£ç é½æ¯JSXï¼ææNativeç»ä»¶é½æ¯æ ç¾åçï¼è¿å¯¹äºå端ç¨åºåæ¥è¯´ï¼éä½äºä¸å°å¦ä¹ ææ¬ï¼ä¹å¤§å¤§åå°äºä»£ç éãä¸ä¿¡ä½ å¯ä»¥ççJSXç¼è¯åç代ç ã
å¤ç¨Reactç³»ç»ï¼ä¹åå°äºä¸å®å¦ä¹ åå¼åææ¬ï¼æ´éè¦çæ¯å©ç¨äºReactéé¢çåå±ådiffæºå¶ãjså±ä¼ ç»Nativeå±çæ¯ä¸ä¸ªdiffåçjsonï¼ç¶åç±Nativeå°è¿ä¸ªæ°æ®æ å°æçæ£çå¸å±è§å¾ã
css-layoutä¹æ¯ç¹çä¹ç¬ï¼å端å¯ä»¥ç»§ç»ç¨çæçç±»cssæ¹å¼æ¥ç¼åå¸å±ï¼éè¿è¿ä¸ªå·¥å ·è½¬æ¢æconstrainå¸å±ã
ç³»
ç»åªæjs-objcçååè°ç¨ï¼å°±æ¯æåçUIç»ä»¶çæ¹æ³éè¿javascritcoreæè webviewï¼ä½çæ¬iOSï¼æ å°å°jsä¸æ¥ï¼æ´ä¸ªè°ç¨
è¿ç¨æ¯å¼æ¥çï¼è¿æ ·ç设计令React nativeå¯ä»¥è®©jsè¿è¡å¨æ¡é¢chromeä¸ï¼éè¿websocketè¿æ¥Native
codeåæ¡é¢chromeï¼æ大å°æ¹ä¾¿äºè°è¯ãå¯¹å ¶ä¸çæºå¶Bangçä¸ç¯æç« åå¾å¾è¯¦ç»ï¼æå°±ä¸æ¾äººçæ §äºï¼React Nativeéä¿¡æºå¶è¯¦è§£ « bangâs blog ãä½è¿æ ·è®¾è®¡ä¹ä¼å¸¦æ¥ä¸äºé®é¢ï¼åé¢è¯´ã
ç¹ææä½ä¹è¢«æ½è±¡æäºä¸ç»ç»ä»¶ï¼TouchableXXXï¼ï¼è¿ç§æ½è±¡æ¹å¼æ¯æå¨ä¹åå类似工ä½ä¸æ²¡ææ³å°çãfacebookè¿ååºNative为ä»ä¹åwebãææãä¸åçåå ï¼å®æ¶çç¹æåé¦ååæ¶è½åãReact Native è¿å¥ç¸åºæºå¶è®¾è®¡å¾å¾å®åï¼è½åNative codeé£æ ·æ§å¶æ´ä¸ªç¹ææä½çææè¿ç¨ã
Debug
ç¸å½æ¹ä¾¿ï¼ä¿®æ¹äºjs以åï¼éè¿å 建çnodejs
watcherç¼è¯æbundleï¼å¨æ¨¡æå¨éé¢æcmd+rå°±å¯ä»¥çå°ææãèä¸æcmd+dï¼å¯ä»¥æå¼ä¸ä¸ªchromeçªå£ï¼ææçjsé½ç§»å°äº
chromeéé¢è¿è¡ï¼æ以ä»ä¹æç¹åæ¥æè°ç¨æ ï¼é½ä¸å¨è¯ä¸ã
ä¸é¢çæ¢æ¯ç¹ç¹ä¹æ¯ä¼ç¹ï¼ä¸é¢è¯´è¯´ç¼ºç¹ï¼æè åºè¯¥è¯´ï¼ãä»ç¶éççé®é¢ãï¼å¨æçæ¥ï¼è¿ä¸ªæ¹æ¡å·²ç»è¶ è¶äºHybirdæ¹æ¡ã
ç³»
ç»ä»ç¶ï¼ä¸å¾ä¸ï¼ä¾èµåçç»ä»¶æ´é²åºæ¥çç»ä»¶åæ¹æ³ã举两个ä¾åï¼ScrollViewè¿ä¸ªç»ä»¶ï¼å¨Nativeå±æ¯æ大éäºä»¶
çï¼scrollViewWillBeginDraggingï¼
scrollViewWillEndDraggingï¼scrollViewDidEndDraggingççï¼è¿äºäºä»¶å¨ç°æççæ¬é½æ²¡ææ´é²ï¼åºæ¬ä¸
åä¸äºç»ä»¶èå¨ææãå¦å¤ï¼è¿ä¸ªçæ¬ä¸æ大éç»ä»¶æ¯iOS
onlyçï¼ActivityIndicatorIOSãDatePickerIOSãNavigatorIOSãPickerIOSã
SliderIOSãSwitchIOSãTabBarIOSãAlertIOSãAppStateIOSãLinkingIOSã
PushNotificationIOSãStatusBarIOSãVibrationIOSï¼åè¿æ¥çï¼å©ä½çé½æ¯ä¸äºæ½è±¡ç¨åº¦æ强çåºæ¬ç»ä»¶ãè¿
æ ·ï¼ç¨æ·å¿ é¡»å¨ä¸åçå¹³å°ä¸å两å¥ä»£ç ï¼èä¸ææè½åä»ç¶å¼ºçä¾èµ React native å¼å人åæ´é²çæ¥å£ã
ç±äºæå¤å±æ¯
Reactï¼å次å¦ä¹ ææ¬é«ï¼ä¸åå¾å¸¸çHybirdæ¹æ¡ï¼åªè¦å¤å¦å 个JS
APIå°±å¯ä»¥å¼å§å¹²æ´»äºãå½ç¶ï¼Reactç确让åç»å¼ååå¾ç®åäºä¸äºï¼è¿ä¹ä¸å¥å¤æ¥çï¼åºäºiOSï¼ãæ®ç¼ºä¸å ¨çï¼css-layoutï¼å¨
Reactçå è£ ä¸ï¼çç¡®æ¾å¾ä¸é£ä¹é¢ç®å¯æäºã
å¦å¤ï¼React Nativeä»ç¶å¾ä¸å®åãææ¡£è¿ä¸å ¨ï¼æåºæ¬ä¸æ¯ççä»ç示ä¾ä»£ç å®æçdemoï¼éæå°å·²æappçææ¡£ä¹æ¯ä»å¤©æåºæ¥ãæç §å®æ¹ç说æ³ï¼Androidçæ¬è¦å°åå¹´åæåå¸ï¼Blog | React ï¼å±æ¶æ´ä¸ªç³»ç»è®¾è®¡å¯è½è¿ä¼æå¾å¤§çååã
PSï¼å¨ä½¿ç¨Tabbarçæ¶åï¼ææåçåç°ä»ä»¬å± ç¶ç¨äºiconfontæ¹æ¡ï¼æç°å¨æ头ç项ç®ä¸ä¹æåæ ·çå®ç°ï¼ä¸è¿APIæä¹è®¾è®¡ä¸ç´å¾å¤´ç¼ãç»æï¼æåç°ä»æ¯è¿ä¹åçï¼
<TabBarItemIOS
name="blueTab"
icon={ _ix_DEPRECATED('favorites')}
....>
å¨ _ix_DEPRECATED çå®ä¹å¤ï¼æä¸å¥æ³¨éï¼ // TODO(nicklockwood): How can this fit our require system?
以ä¸ã
ä¸é¢æ¯ä¸å¨åï¼å¨React nativeè¿æ²¡å¼æºçæ¶åï¼éè¿å解ipaçä¸äºåæè¿ç¨ï¼æå ´è¶£çå¯ä»¥ççã
------------------------ç®åç²æ´çåå²çº¿--------------------
èæ¯åè°ç æ段
React
Nativeè¿æ²¡å¼æºï¼æè¿åç»éå å¼ãåç¼è¯ãäºFacebook Groupï¼è¿ä¸ªåºç¨æ¯ç¨React
Nativeå®ç°çï¼çipa代ç ï¼åºæ¥å ç¾ä¸ªJSæ件ï¼æ ¼å¼åä¸ä¸ï¼è±äºå 天æ¶é´è¯»äºä¸ä¸æºç ï¼å¯¹React
Nativeçå é¨æ ¸å¿æºå¶ç®æ¯æäºä¸ä¸ªåºæ¬äºè§£ã
React Nativeçæ ¸å¿å®ç°ï¼
å ç®å说å ç¹ï¼è¯¦ç»ççå头æ´æ°ã
1. React Nativeéé¢æ²¡æwebviewï¼è¿è´§ä¸æ¯Hybrid appï¼éé¢æ§è¡JSæ¯ç¨ç
JavascriptCoreã
2. å说React Nativeçæ ¸å¿ï¼iOS Native codeæä¾äºåæ¥ä¸ªæåºæ¬æ ¸å¿çç±»ï¼RCTDeviceEventEmitterã
RCTRenderingPerfçï¼ãæç»ä»¶ï¼RCTViewãRCTTextFieldãRCTTextViewã
RCTModalFullscreenViewçï¼ï¼ç¶åç±React NativeçJSé¨åï¼ç»æäºåæ¥ä¸ªåºæ¬ç»ä»¶ï¼PopoverãListviewçï¼ï¼äº¤ç±ä¸å±çä¸å¡æ¹æ¥ä½¿ç¨ï¼THGroupViewï¼ã
3. å°±å¦ä»ä»¬å¨å®£ä¼ æ¶æ说ï¼ä»ä»¬å®ç°äºä¸å¥ç±»ä¼¼cssçåéï¼ç¨æ¥è§£å³æ ·å¼é®é¢ï¼ç¸å½å¤æå强大ï¼é è¿ä¸ªæè½å°Nativeçæ ¸å¿ç»ä»¶ç»æJSå±çåºæ¬ç»ä»¶åç»æä¸å¡ç«¯çä¸å¡ç»ä»¶ï¼åºè¯¥æ¯éç¨facebook/css-layout · GitHubçCè¯è¨çæ¬å®ç°çï¼å¨pptä¸æ们çå°äºç±»ä¼¼flex-direction: columnä¸ç±»ç代ç ï¼è¿ä¸ªæ£æ¯css-layoutæ¯æçè¯æ³ï¼ã
4. å¨React Nativeä¸ï¼åJSçå·¥ç¨å¸è§£å³çæ¯ãå°åºæ¬ç»ä»¶æ¼è£ æå¯ç¨çReactç»ä»¶ãçé®é¢ï¼åNative Codeçå·¥ç¨å¸è§£å³çæ¯ãæä¾æ ¸å¿ç»ä»¶ï¼æä¾è¶³å¤çæ©å±æ§ãçµæ´»æ§åæ§è½ãçé®é¢ã
React Nativeç设计èèï¼
ReactJS对React Nativeæçç´æ¥çå½±åï¼æ没å¨ç产ç¯å¢ä¸ç¨è¿Reactï¼åªçè¿ä»£ç &ç¨è¿Angularï¼å¦ææ误请æåºï¼
ReactJSéé¢æè¿æ ·ç设计ï¼
1. ReactJS ç大工åå ¥å£createElementè¿åçä¸æ¯æ个å®ä½DOM对象ï¼èåªæ¯ä¸ä¸ªæ°ç»
2. éè¿æºç ä¸ ui/browser/ ç®å½ä¸ç代ç ï¼å°è¿ä¸ªæ°ç»è½¬æ¢æDOM
3. åºå±ç渲ææ ¸å¿æ¯å¯ä»¥æ´æ¢ç
å¦å¤ï¼Facebookèªå·±æJSXï¼css-layoutçå¼æºé¡¹ç®ï¼åºäºè¿äºï¼å¦æè¦åä¸ä¸ªç¨ JSæ¥å¼åNative appçä¸è¥¿ï¼å¾èªç¶å°±æ³å°äºä¸å¥æææççææ³ï¼
1. å° ui/browser éé¢ç代ç æ¿æ¢æä¸å¥ Native çæ¡¥æ¥JSï¼å®é ä¸ï¼iOSçæ¯éè¿
injectGenericComponentClassæ¹æ³ï¼å°æ ¸å¿ç»ä»¶çæ¹æ³æ³¨å ¥å°JSéé¢ ï¼ï¼å°±ç´æ¥å¤ç¨ReactçMVVMï¼èªå¨å°æ°æ®æ å°å°Nativeäº
2.
Native
codeéé¢å®ç°ä¸ç»æ ¸å¿APIï¼ä¸ç»æä¾æ ¸å¿ç»ä»¶çAPIï¼createãupdateãdeleteï¼ï¼ä¸ç»äºä»¶æ¹æ³ï¼ReactJSéé¢ç
EventEmitter ï¼ï¼ä¸ç»å¯¹cssè¿è¡è§£æï¼css-layoutï¼ä»¥åè¿åStyleçComputedStyleï¼React
Nativeéé¢å«meatureStyleï¼ã
è¿æ ·ï¼ç¨ä¸äºReactJSæ¬èº«çæææ ¸å¿åè½å设计æè·¯ï¼Nativeçå¼åä¹è¶³å¤ç®åã
é£ï¼React Nativeæ¯ä»ä¹ï¼
å ¶å®è¿ä¸è¥¿ä»Nativeå¼åæ¥è¯´ï¼ç¸å½äºéæ°åæäºä¸ä¸ªæµè§å¨æ¸²æå¼æ并ä¸å¥ä¸ä¸ªReactç壳ï¼ä»Webå¼åè§åº¦æ¥è¯´ï¼å°±æ¯æåæ¥Reactçå端æ¢æäºNative codeæ¥å®ç°ï¼å°±è·Flipboardæè¿æçReact Canvas ä¸æ ·ï¼ Flipboard · GitHubreact-canvas
React Nativeçä¼å¿åå£å¿ï¼ï¼
ä¼å¿ç¸å¯¹Hybird appæè Webappï¼
1. ä¸ç¨Webviewï¼å½»åºæè±äºWebview让人ä¸ç½ç交äºåæ§è½é®é¢
2. æè¾å¼ºçæ©å±æ§ï¼è¿æ¯å 为Native端æä¾çæ¯åºæ¬æ§ä»¶ï¼JSå¯ä»¥èªç±ç»å使ç¨
3. å¯ä»¥ç´æ¥ä½¿ç¨Nativeåççãçé¼ãå¨ç»ï¼å¨FB Groupè¿ä¸ªappéé¢ï¼é¢æ¿æ»åºå¸¦ä¸ç¹æå»å¼¹å¨ï¼é¢æ¿åºäºæ个ç¹å±å¼è¿ç§å¨ç»éå¤å¯è§ï¼è¿ç§å¨ç»ç¨Native codeæ¥åå°èä¸ç¢ï¼ä½æ¯ç¨Webæ¥åå°±é¾ä¸å é¾ï¼ã
ä¼å¿ç¸å¯¹äºNative appï¼
1. å¯ä»¥éè¿æ´æ°è¿ç«¯JSï¼ç´æ¥æ´æ°appï¼ä¸è¿è¿å¿«æ为å家大åNative appçæ é äºâ¦
å£å¿ï¼
1. æ©å±æ§ä»ç¶è¿è¿ä¸å¦webï¼ä¹è¿è¿ä¸å¦ç´æ¥åNative codeï¼è¿ä¸ªä¸ç¨åºè¯è§£éäºå§ï¼
2.
ä»Nativeå°Webï¼è¦åå¾å¤æ¦å¿µè½¬æ¢ï¼å¿å¿ é æåæ¹é½è¦å¦¥åãæ¯å¦webè¦ç¨ä¸å¥CSSçéå²çï¼Nativeéè¿css-layoutæ¿å°æç»æ ·
å¼å转æ¢ænativeåçç表达æ¹å¼ï¼æ¯å¦iOSçConstraint\origin\Centerçå±æ§ï¼ï¼åæ¯å¦å¨ç»ãå¦å¤ï¼è¥Androidå
iOSé½è¦åç¸åçå°è£ ï¼æ¦å¿µè½¬æ¢å°±æ´å¤æäºã
æ´æ°1ï¼æ·»å äºReact对React Nativeçå½±åã
æ´æ°2ï¼åºæ¬ç¡®å®å ¶ä½¿ç¨äº css-layoutï¼æ·»å äºå¯¹React Nativeçæ»ç»
æ´æ°3: React nativeå·²ç»å¼æºäºï¼ React Nativeï¼åªæiOSçãæåäºå 个demoï¼ç®åçäºçobjc代ç 并åå¼æºåçæ们çä¸äºç»è®ºï¼è§åæï¼äº¤åéªè¯ãç®åå°ä»å端工ç¨å¸åç³»ç»æ´ä½è§åº¦è¯´ä¸ä¸React nativeçç¹ç¹åä¼å£å§ã
æ´æ°4: è¡¥å äºå æ¡ä¼å¿åä¸å端å¼åçå¯¹ç §