React作为时下最热的前端框架,各位有什么经验分享下吗
1. 不要陷入纠结工具的怪圈
我们团队一开始用 React 的时候,工具栈应该是 grunt +
grunt-react;写了一段时间感觉有局限,然后老大带头把工具换成了 gulp + browserify + watchify +
reactify,然后又愉快的写了大概半年吧,发现流行的库都上 webpack 了;于是我们的工具栈又变成了 gulp + webpack +
babel-loader。最后大家一致认为 gulp 是多余的,所以我们的工具栈又围绕 webpack
重新搭建了一遍。到最近我负责的一个内部项目,什么 hot-module-replacement、extract-text-plugin(让你在
js 里 require(’style.scss’); 这么写的玩意儿)一股脑的造。当然再后来因为业务需要我们又基于 webpack
搭建了自己的构建工具,这是后话……
这将近一年半的折腾历史告诉大家,1) 前端就是个大坑,1个月不学新知识你就会被社区遗忘 2) 现在上 React 真幸福,工具栈基本都稳定了(什么?你还不懂?用 webpack!),不用花太多时间纠结。
PS. HMR 也就那样,虽然 dan 吹得神乎其神,但实际在项目里我发现大家还是习惯手动 Cmd + R
,因为项目大了以后 rebuild 也需要 1、2 秒。
2. DOM 操作是不可避免的
但
凡是上点儿规模的前端项目,没有 DOM 操作基本是不可能的。且不说最常见的后端「埋点」,你总得用 DOM API
去取值吧;就说一个最简单的,比如右手边这个「回到顶部」的按钮,你纯用 React 写一个试试。当然你会说什么
requestAnimationFrame,什么 ReactCSSTransitionGroup blah blah
blah,真正到项目里你会发现还是 DOM API 简单。
3. 拥抱 ES 6,拥抱 React v0.14
这俩为什么放在一起说呢?因为 React v0.14 里提出了一个全新的组件概念叫做:无状态的函数式组件(Stateless functional components)。它大概长这样:
var Aquarium = ({species}) =》 (
《Tank》
{getFish(species)}
《/Tank》
);
有没有发现被传统的 createClass 方法精简了很多?当然这样写组件也有很多局限,比如不能声明各种生命周期方法等等,但是在常见的前端业务场景中,纯 render 的组件不在少数。在这样的语法推出后,我们就能把这些组件更方便的抽出来复用了。
此外,拥抱 ES 6 还有很多的好处,比如在加载依赖的时候不用先 var xxx = require(’xxx’); 再 var yyy = xxx.yyy; 而是可以直接 import {yyy} from ’xxx’; 简洁明了。
4. 生态环境仍然在成长中,坑不少
其
中首先要口诛笔伐一下的就是 react-router,我们从 v0.10 开始用,到现在
v1.0。你知道为了升级这玩意儿我们改了多少次业务代码么?每次升级 API 都要变,无力吐槽。当年好不容易搞懂了
v0.11,在博客里写了篇技术文章分享,结果后面的日子就是各种被催更……一个月前抽空就 0.13 版又重写了一遍教程,这不 1.0
版又出了,API 基本全都不一样了!!不一样了!!一样了!!样了!
当然除了坑也有不少高质量的生态环境产品,比如蚂蚁的 ant design。
5. Server 端渲染很美,至今没看见哪个规模级的产品用到
可能是我孤陋寡闻吧,欢迎评论中跟进。自己摸索着写过一个最简单的 server 端渲染,但是这套逻辑如果套到我们现在的业务逻辑中,几乎可以直接枪毙。为了实现 server 端渲染需要做出的 trade off 太多。
6. React 很简单,也很难
简单是因为 React 的 API 真的很少,官网的各种文档花一个下午也能看个七七八八(此时此刻再看看 Angular……)。但是当你以为你真的搞懂 React 的时候,看看React 源码剖析系列 - 解密 setState - pure render - 知乎专栏这篇文章开头提的问题,有多少人能不假思索的答对呢?(顺便安利一下,我们团队的知乎专栏,目前处于死磕 React 的状态)
当你真正在业务项目中使用 React 的时候,你会发现它的生命周期比你想象的复杂;它的 API 背后的逻辑比你以为的麻烦。当然,首先你要踩进这个坑。
7. 对于楼上某位仁兄表示《React:引领未来的用户界面开发框架》这本书太难的回答,作为译者之一表示对不起你。作为补偿,所有购买本书的同学均可凭拍照私信我咨询 React 相关的问题。
activexobject都有哪些啊
ActiveX组件及其注册一.概述
在接下来的部分,首先将就ActiveX组件的概念以及它的分类进行简要的介绍,从而让读者对ActiveX组件有一个概念上的把握。随后,将就如何注册ActiveX组件的问题进行比较深入详细的解释。分别给出ActiveX 控件、ActiveX DLL、ActiveX EXE的具体注册方法。并在此基础上,对如何在制作安装程序并安装后,实现对 ActiveX组件的注册给出了若干解决方案。
二.ActiveX组件的概念
在我们平常的阅读和编程学习中,我们经常可以看到诸如“ActiveX控件”,“ActiveX组件”等名词。那么什么是“ActiveX控件”,什么是“ActiveX组件”呢,它们有什么区别呢?
首先,我们应该知道,组件是建立在 ActiveX技术上的代码的独立单元,用于通过特定的接口提供特定的一组服务。它提供客户端在运行时所请求的对象。在 Remote Data Service 中,当组件包括支持业务进程的关键字逻辑时也被称为“业务对象”。
其次,ActiveX是使软件组件能够在网络环境中交互作用而与创建组件的语言无关的一套封装技术。实现ActiveX 的基础是“组件对象模型”(Component Object Model ,缩写为COM)。它也是提供封装 COM组件并将其置入应用程序(如(但不限于)Web 浏览器)的一种方法。
最后,上面一段话中提到的COM(Components Object Model)是软件组件互相通讯的一种方式。它是一种二进制和网络标准,允许任意两个组件互相通讯,而不管它们是在什么计算机上运行(只要计算机是相连的),不管各计算机运行的是什么操作系统(只要该操作系统支持 COM),也不管该组件是用什么语言编写的。COM 还提供了位置透明性:在编写组件时,其他组件是进程内 DLL、本地 EXE 还是位于其他计算机上的组件,都不会产生太大影响。
这样以来,我们可以给ActiveX组件(ActiveX component)一个定义,就是:一个应用程序或开发工具,可以使用另一个应用程序支持的对象,或者提供自己的对象供另一个应用程序使用。以前这些程序和对象称为“OLE 自动服务程序”和“OLE 自动服务器”。
至于ActiveX控件,则只是ActiveX组件的一个分类,是一个标准的用户接口元素,是具有 .OCX 文件扩展名或者可插入对象的文件,能够快速地把窗体和对话框组装起来;当使用自定义控件对话框将其增加到工程中去时,工具箱将被扩展。在以前ActiveX控件被称作 OLE 控件。ActiveX 控件还使 Internet 更加生动,为 World Wide Web 页增加了有趣的新功能。
三.ActiveX组件的分类
ActiveX组件可以分为三类:
● ActiveX控件
● ActiveX文档
● 代码成分(OLE自动服务器)
(1)ActiveX控件
可以从无到有被用户完全建立,它能被建立在另一个控件之上,或者它可容纳多个已经有的控件。比如 VB中的ActiveX控件就是建立在VB的用户控件对象上的。当创建一个ActiveX控件时,就创建了一个带有扩展名为 .ctl 的控件类文件。我们通常使用这种文件来创建实际的控件,其扩展名为 .ocx 。
(2)ActiveX文档
通常,在具体的编程环境如VB 、VC++中,可以用传统文档的语义学来创建完全的应用程序。换句话说,它不仅有应用程序的功能,而且还有文档性能的灵活性 — 当用户打开一个 ActiveX文档时,将不仅拥有应用程序的全部功能,而且能保持和发布应用程序原有数据的“备份”,因而,“文档”实际上是主动的。比如, VB的ActiveX文档是建立在VB用户文档的基础上的。创建一个ActiveX文档时,用带有扩展名 .dob 的文件保存。VB使用这种DOB文件来创建EXE或DLL文件,这种EXE或DLL文件可以为ActiveX文挡提供实际的代码。另外VB生成一个带扩展名 .vbd 的说明文件,它对ActiveX文档进行描述,用主应用程序可以打开这个文件。对于ActiveX文档,可以让用户保存数据,这些数据被存在VBD文件里。
(3)代码成分
以前被称作OLE自动服务器。这些对象可以让用户在其他程序里使用其代码。比如,有一个陈列在代码成分里的时钟例程,这样以来此例程可以被其他程序使用。代码成分(ActiveX EXE, ActiveX DLL)能够支持属性与方法。
四.建立ActiveX组件的选择
ActiveX组件的各个内容,它们的应用是不同的。那么如何进行选择,以来确定究竟该创建那种组件呢?
首先,在这里我们务必弄清楚ActiveX组件的运行方式,并知道相应的特点。一般来说,ActiveX组件有两种运行方式:它们是进程外服务器运行和进程内服务器运行。
如果把一个ActiveX组件作为一个可执行文件(EXE文件)的一部分,那么它就是一个进程外服务器并在自己的进程内运行。若把它作为一个动态链接库(DLL文件)的一部分,则它是一个进程内服务器并作为客户应用程序在统一进程里运行。若用户的ActiveX组件是一个进程外服务器,他就是一个可以单独运行的EXE文件。使用进程内服务器的应用程序通常比使用进程外服务器的应用程序运行速度快,因为应用程序没有通过进程边界去使用对象属性,方法与事件。
如果将建立的ActiveX文档作为一个进程内组件(DLL文件),进程内组件的性能超过同样编译成EXE的组件。另外,如果多个程序访问同一个EXE文件,将会覆盖全局数据;如果他们都有自己的进程内服务器,这种事情不会发生。
客户应用程序和内进程组件共享相同的内存空间,所以在调试内进程代码部件的方法时,可以用客户应用程序的堆栈输参数。而对于外进程组件来说,在调试代码部件的过程中,方法的参数必须被移动来通过两个进程间的内存界线,这被称为marshaling。
这样,我们可以得出如下关于如何选择所创建组件类型的结论:
(1)若想建立一个在可调用的代码中提供例程的不可视组件,可以建立一个代码组件(ActiveX EXE 或AtiveX DLL).
(2)若想建立一个能在同一个进程中与应用程序运行的组件, 可以建立一个AtiveX DLL.
(3)若想建立一个能服务多个应用程序又能在一台远程计算机上运行的组件,可以建立一个AtiveX EXE。
(4)若想建立一个可视组件,并在设计时能被拖动到一个应用程序中,可建立一个AtiveX 控件。
(5)若想建立一个可视组件,并在运行时能接受一个应用程序窗口,可建立一个ActiveX 文档。
至于创建组件之后,如何编程,如何被使用,可以参照有关编程方面的书籍。在这里,我们假设ActiveX组件的设计已经完成,然后对ActiveX组件的注册进行较为详细的讨论。
五.ActiveX组件注册的几种方法
不同的ActiveX组件,它们注册有着不同的方法,现在就针对ActiveX控件、ActiveX DLL 、ActiveX EXE三种不同的组件分别给出解决方案。
1.ActiveX控件的注册
ActiveX 控件与开发平台无关,在一种编程语言中开发出来的ActiveX 控件,几乎不作任何修改,便可以在另一种编程语言中使用。但是ActiveX 控件被开发出来以后,要想在Windows中被正确使用,首先必须将控件文件复制到硬盘中,然后在Windows中进行注册。未在Windows中注册过的ActiveX 控件是不能被使用的。一般注册VB6.0 ActiveX 控件的方法有如下几种:
(1)使用Regsvr32.exe 程序对VB ActiveX 控件进行注册。 该文件位于Windows目录的system子目录下。使用方法如下:点击“开始”,在弹出的菜单中再点击“运行”,在出现的对话框中输入以下命令:
《控件路径和ActiveX 控件文件名》 注册一个ActiveX 控件。此处 regsvr32的路径名可以省略。而且一般可将被注册的ActiveX 控件拷贝到\windows\system下,这样我们也不用在注册时输入控件的路径了。
如果想要解除对某一个ActiveX 控件的注册,只需要在regsvr32后面加一个参数“/u”,即 《被注册过的ActiveX 控件文件名》 。
(2)利用某些编程环境中的浏览功能。比如在VB6.0中可以点击界面上的“工程”,在弹出的下拉菜单中,点击“部件”一项,随后出现了一个新的界面。在此界面上利用“浏览”按钮,找到并选中需要注册的控件,确定后便注册到“部件”界面的“控件”栏里。
利用上面两种方法进行控件注册后,便可以让部件开发人员在实际的编程中,使用该控件了。
(3)使用安装程序制作软件——InstallShield 。使用 Regsvr32.exe 程序来注册ActiveX 控件,以及利用“浏览”来注册,虽然简单,但是都需要手工注册,在不用时,还需要手工解除,所以对于一个使用了该控件的应用程序来说并不实用。一般大型的应用软件都需要一个安装程序,在安装程序中解决ActiveX 控件注册就非常实用了。使用InstallShield可以制作出专业级的安装程序,还可以注册其中的ActiveX 控件;而且卸载软件时,可以自动注销以前注册的ActiveX 控件。其做法就是按照InstallShield 的向导,进行安装程序的制作,在进行到最后一步,点击“Finish”后,“InstallShield”将进行下一步的“详细定制”。选择“File Groups”选项,将其中包含需要自注册ActiveX控件文件项的“Self-Registered”属性改为“yes”.
(4)安装过程中的自注册。 ActiveX控件在安装的时候必须被注册,方可以在应用程序中被调用。往往利用编程工具自带的安装制作工具可以达到这个目的。仍以VB6.0为例。利用VB6.0本身自带的创建安装程序的工具软件:Package & Deployment Wizard。只要将ActiveX控件包含在发布的文件中间,Package & Deployment Wizard将根据需要自动将该控件打成自注册文件的属性。万一,我们没有成功的话,可以修改安装程序的安装文件列表 setup.lst。将相应宏中的参数设置为DLLSelfRegister。如果不需要自注册,可以将该项删除(注意逗号要保留)。
例如下面是作者自己编的一个ActiveX控件,利用上述方法创建安装程序后,其后面的参数变为:
[Setup1 Files]
File1=@clock1.ocx,$(WinSysPath),$(DLLSelfRegister),$(Shared),2/19/01 9:27:30 AM,36864,1.0.0.0
其中,加粗的一项 $(DLLSelfRegister) 就是标明自注册的宏参数设置。可以手工加或删。
(5)补充一点。有些公司开发的ActiveX控件注册需要利用附带的专门的工具软件。运行该工具,就可以将相应的ActiveX控件注册。这仍然属于手工注册,这些ActiveX控件被发布时,一般享有版权,同时会有专门的说明。
2.ActiveX DLL的注册
ActiveX DLL的注册与ActiveX控件的注册基本上相似,上述用于ActiveX控件注册的方法基本都适用于ActiveX DLL的注册。在此可以参照上述有关ActiveX控件注册的方法进行注册。
3.ActiveX EXE的注册
作为一种进程外运行的组件,ActiveX EXE的注册方法异于ActiveX控件和ActiveX DLL的注册,并且在运用中有一定的难度。在此,将它们的注册方法总结如下:
(1)“浏览”的方法。以VB6.0为例。在VB6.0编程界面上,进入“工程”,在弹出的下拉菜单中间选择“引用”,然后在出现的新界面上点击“浏览”,找到并选中需要注册的组件,确定后,便可以在列表中间看到对应项了。
(2)直接运行的方法。注册进程外组件ActiveX EXE时,只要在VB6.0的环境中运行一下该组件代码,便可以实现注册了。这时ActiveX EXE的信息被加入到Windows注册表中。但是,必须注意,此信息只是在VB开发环境中运行此程序时被临时加入。当程序停止时,有关如何访问这些对象的信息便从系统中清除掉。
(3)利用安装制作工具。比如在VB6.0中,可以利用VB6.0本身自带的创建安装程序的工具软件:Package & Deployment Wizard。在创建安装程序的过程中,自动将其变为自注册。若不然,同样可以修改安装程序的安装文件列表 setup.lst。将相应宏中的参数设置为EXESelfRegister。如果不需要自注册,可以将该项删除(注意逗号要保留)。
例如下面是作者自己编的一个进程外组件 ,利用上述方法创建安装程序后,其后面的参数变为:
[Setup1 Files]
File1=@CommThread.exe,$(WinSysPath),$(EXESelfRegister),$(Shared),12/25/00 8:47:44 PM,57344,1.0.0.0
其中,加粗的一项 $(EXESelfRegister) 就是标明自注册的宏参数设置。可以手工加或删。
(4)如果打算把进程外服务器安装到另外一台机器上自注册,而且脱离编程环境时,可以先将文件拷贝到另外机器上,执行时在命令行上加上参数 “ /regserver”,如果取消注册,可以在命令行上加上“ /unregserver”。使用 /regserver命令选项注册进程外COM服务器时,可以不去理会手工启动时程序工作的正常方式。Sub Main或Class_Initialize程序都不会被调用,只有由当该编程环境包括在EXE文件中的注册逻辑才会运行。
六.总结
上面,就日常的学习中所理解的有关ActiveX 组件方面的概念性的东西,作了一些简单的总结。在,注册方面,给出了一些较为实用的方法。当然,我们也可以自己动手,亲自编制一些小程序,实现ActiveX 控件的注册。如在VC++中,使用Windows API函数LoadLibrary载入ActiveX控件;再使用GetProcAddress函数获取ActiveX 控件中注册函数DLLRegisterServer(注销函数为DLLUnRegisterServer)指针;最后再调用注册函数DLLRegisterServer(或注销函数为DLLUnRegisterServer)。感兴趣的,可以参照相关的资料,自己动手进行编程。
当然,在实际编程应用中,往往需要自注册。对于ActiveX 控件和ActiveX DLL可以在制作安装程序后,安装时自动注册。而对于ActiveX EXE 可能要麻烦一些,我们不可能
在每次运行软件时,先在编程环境中,通过代码的编译或浏览来注册。通过实践,总结出如下的方法来实现自注册:
(1)利用编程工具自带的制作安装程序的工具,来制作安装程序,安装时,可以自动实现ActiveX EXE的自注册。
(2)利用加上参数 /regserver,实现自注册。在VB6.0编程中,当需要用到ActiveX EXE时,通过VB6.0的系统函数shell(),同时进行调用和自注册。命令格式为:
shell “[path\] filename /regserser”
卸载时,只需将 /regserser 替换为 /unregserser就行了。假如组件文件与应用程序在同一个目录中或在 \windows\system\下,组件文件路径名可以省略。
(3)假如想用Installshield为应用程序制作专业级的安装程序,同时又需要ActiveX EXE的自注册,可以将应用程序用Installshield打包,而ActiveX EXE用VB6.0打包,制作出两个安装程序。在使用时,两个安装程序都运行一次,这样,也可以实现要求,只是比较麻烦
安卓应用开发顶级框架大盘点,有适合你的那一款吗
有,我个人比较喜欢Java的框架。这也是安卓应用开发的祖传框架之一了。其实现在安卓的应用市场是很大的,因为更多人的手机系统应用的是安卓。因为安卓的市场份额和手机应用的火热,与之相关的一些程序员在这些方面也是有很大的前途的。虽然程序员的工作比较累,但每年还是有无数人前仆后继加入其中。-act
01、安卓应用的原生框架,Java和c++
说实话我其实对程序不太懂,但是因为有朋友在学Java,所以我也读这个比较有好感。手机上的一些应用最基础的设计和功能基本上都是通过Java和c++实现的。通过这两种程序语言,不仅可以设计出安卓应用,还包括网页和其他方面的很多东西。这两种语言都比较灵活,可以让用户体验更流畅、更便捷。-框架
02、Unity开发,比较不错的安卓游戏开发框架
Unity是一种什么样的语言呢?相较于Java来说,Unity其实更适合游戏开发。因为很多游戏都是二维、三维的,使用这种语言开发游戏会比开发应用更方便一些。举一个我们平常经常玩的游戏,比方说王者荣耀,就是通过这种技术实现的。Unity的种类特别多,所以相较于Java来说,内容更集中一些。-act
03、作为开源框架的React Native,走在前端
React Native这个东西是一个开源框架,可以对开源软件进行定义。这个框架算是一个比较新鲜的框架了。而且React Native的利用率是非常高的。现在很多网页浏览器已经选择React Native作为自己的选择了。像ins和沃尔玛,都对这一框架十分青睐。所以它的未来是比较被看好的。-框架