当前位置:首页 » 文件管理 » jsx压缩

jsx压缩

发布时间: 2022-05-29 13:54:52

1. vs code 开发react用什么插件

使用VSCode开发React-Native是个不错的选择,因为这个编辑器十分简洁、流畅,并且微软官方提供了React Native Tools插件,支持代码高亮、debug以及代码提示等十分强大的功能,并且VSCode本身的代码跳转十分优秀。但是我下载了此插件,发现其他功能正常,唯独代码没法正确提示,右下角也没有显示salsa。经过我的不懈Google以及查看官方文档:JavaScript in VS Code,最终找到了替代解决方案。

2. 重庆建设旋叶式压缩机JSX一09多少钱一台

重庆建设玄烨儿杂志压缩机c档零九应该是3000块钱一袋。

3. fis3文件压缩文件指 都没用,是怎么回事

其实要支持这种技术选型非常简单,加上如下配置到fis-conf.js即可。(请注意看注释)第一步:配置支持es6和jsx语法。//让moles目录下面的js和jsx通过typescriptfis.match('{/moles/**.js,*.jsx}',{//要支持es6和jsx,typescript也能胜任,最主要是编译速度要快很多。parser:fis.plugin('typescript'),//typescript就是编译速度会很快,但是对一些es7的语法不支持,如果你觉得不爽,可以用babel来解决。用以下内容换掉typescript的parser配置就好了。//parser:fis.plugin('babel-5.x',{//sourceMaps:true,//optional:["es7.decorators","es7.classProperties"]//}),rExt:'.js'});第二步:配置支持npm模块查找fis.unhook('components');//fis3中预设的是fis-components,这里不需要,所以先关了。fis.hook('node_moles');//使用fis3-hook-node_moles插件。第三步:页面中引入mod.js,标记目标模块化文件,启用loader插件,然后就可以随意import模块了。RexTodoMVCexample//设置成是模块化js,编译后会被define包裹。fis.match('/{node_moles,moles}/**.{js,jsx}',{isMod:true});fis.match('::package',{//本项目为纯前段项目,所以用loader编译期加载,//如果用后端运行时框架,请不要使用。postpackager:fis.plugin('loader',{useInlineMap:true})});到此,已经可以快速的开发项目了

4. jQuery $(window).scroll事件出现问题

web前端开发 20 年变迁史,让我们来看看这20年里,web前端究竟经历了哪些变革,web前端在这20年里又有哪些突破和成就,怎么样看待这20年的web前端开发!

1990年,第一个Web浏览器诞生,而WWW的诞生直接拉开前端史的序幕。

从静态页面到Java,从依赖后端到自主开发,前端开发者从不被重视的“页面仔”逆袭为如今很多前端工程师的薪资比后端还高,从前端技术由国外开发者主导到如今国内自主产生的小程序技术,我们走了20年。

了解web前端:http://www.cnite.cn/qianan/

作者 | 司徒正美

责编 | 伍杏玲

1990 年,第一个Web浏览器的诞生;1991 年,WWW诞生,这标志着前端技术的开始。

在这将近20年的前端发展史中,我们经历了从最早的纯静态页面,到Java跨时代的诞生;从PC端到移动端;从依赖后端到前端可自由打包开发;从早期的网景Navigator浏览器到现在各家浏览器百花齐放……

我们经历了前端的洪荒时代、Prototype时代、jQuery时代 、后jQuery时期、三大框架割据时代,这其中均是由国外开发者主导,直到如今的小程序时代,才是中国开发者独创的。

这是漫长的技术储备下的成果,最终促成了良好的技术成长收获。期间的前端发展之路,崎岖艰难:

洪荒时代(1990~1994年)

在1990~1994年期间,前端界发生的大事有:WWW(World Wide Web)的诞生、浏览器的诞生、Java的诞生,没有专业的前端,页面全是由后端开发的。

1990年,万维网之父蒂姆·伯纳斯-李(Tim Berners-Lee)在NeXT电脑上发明了第一个Web浏览器。

1991年8月6日,Tim在alt.hypertext新闻组贴出了一份关于World Wide Web的简单摘要,这标志了Web页面在Internet上的首次登场。

最早的Web主要被一帮科学家们用来共享和传递信息,全世界的Web服务器也就几十台。由于仅是用来传递信息,从可视化方式或从传递数量上看,仅比电报强一点点。

当时还没有Java,用的是纯静态的页面。

1993年,CGI(Common Gateway Interface)出现了,人们可以在后端动态生成页面。

Perl由于跨操作系统和易于修改的特性成为CGI的主要编写语言。当然,CGI也支持其他支持标准输入输出和环境变量的语言编写,比如Shell脚本、C/C++语言,只要符合接口标准即可。

但显然,页面的内容更新完全由后端生成,这带来一个明显的缺憾:每次更新都要整页刷新,加上早期的网速情况,这个操作是非常慢的。因此针对这情况,人们从多方面着手改进:编写语言的升级、浏览器的升级、HTML的升级。

1994年,网景公司成立,发布了第一款商业浏览器Navigator。自从这款浏览器面世后,微软推出IE浏览器。虽说有竞争才有发展,但这也埋下了Java分裂的种子。

(1994 年,网景浏览器的截图)

同年,PHP诞生。PHP能将动态的内容嵌入到HTML中,提升了编写页面的效率与可读性,其性能也比一般的CGI高。PHP的界定符、循环语句等的发明,深刻影响了后来的ASP、JSP,乃致后来的Java前端模板引擎。

1994年10月,W3C小组也成立了,他们负责HTML的发展路径,其宗旨是通过促进通用协议的发展。

待这一切就绪后, Java于1995年诞生了。

传闻,网景工程师布兰登·艾克(Brendan Eich)只花了10天时间设计出 Java 语言,近乎上帝七日创造世界那么高效。但也因为工期太短的缘故,导致许多瑕疵,因此一直被正统传序员所嫌弃,直到Ajax的出世,才让人们找到理由忍受它的畸形。早期的浏览器都配有一个选项,用来禁止Java语言运行。

Java主要语言特征[1]:

借鉴C语言的基本语法;

借鉴Java语言的数据类型和内存管理;

借鉴Scheme语言,将函数提升到"第一等公民"(first-class citizen)的地位;

借鉴Self语言,使用基于原型(Prototype)的继承机制。

时下,静态语言大行其道,类与接口被证明是构建大工程的最佳实践,人们想不出没有类的语言如何编写业务。因此当时的微软也打造了另一门运行于浏览器的语言——VB。

如果继续细探Java的能力,你会发现它早期真的非常空洞,一门没有灵魂的语言,没有包管理机制,也没有像Java与C++那样的打辅助用的SDK,内置的方法也屈指可数。比如说数组方法,早期只有push、pop、shift、unshift、splice、slice、sort、reverse、concat、join等操作。动态调用方面,Function的apply、call操作还没有出现!

早年的偷懒,导致后来不得不补课:到了2019年,数组上的原型方法,是原来3倍。

除了方法缺乏,还有性能问题,大家讨论用eval还是Function,用哪种循环方式,用parseInit还是~~,就是为了那一点点的性能提升。例如jsperf.com,就是一个专门研究Java性能的网站。

因此Java诞生后,其两大任务就是完善语言特性与提高性能。这两座大山分别由着名的prototype.js与jQuery来搬掉。

在搬掉之前,前端界还有一个曲折实践——第一次浏览器战争,并由其发展而来UA嗅深技术。

浏览器战争(1994~2005年)

浏览器战争一共打了三场,IE浏览器vs网景浏览器、IE浏览vs火狐浏览器、IE浏览器vs谷歌浏览器。

第一场浏览器之战打得尤其激烈。

微软的IE浏览器发布于1994年,但此时的网景已经占领绝对优势。微软在落后的情况,反编译Netscape的源码,推出IE与J。但是由于Bug非常多,大家不愿意为IE开发网站,因此发掘出UA,专门过滤掉IE浏览器。

UA即Navigator.userAgent ,是用一个字符串来记录用户当前运行在什么操作系统与浏览器中。当前IE3的UA是这样的:

Mozilla/2.0 (compatible; MSIE 3.02; Windows 95)

程序判断UA信息,假如发现当前运行的环境是IE浏览器的话,就提示用户用网景浏览器打开。因此微软不得不让自己的UA尽量伪装成网景的UA,欺骗用于检测UA的脚本,达到IE浏览器可以跑这些网站的目的。

最终,第一次浏览器之战以微软胜利,Netscape被美国在线收购,而落下帷幕。

第一次浏览器战争年代非常久远了,但其结局告诉我们,其实技术强弱并不重要。那时技术保护并没有这么重视,否则微软的行为可能会被告(谷歌的openSDK仅抄袭几十行代码,被Oracle公司诉讼赔88亿)。

第一次浏览器战争带来了一个问题:尽管当时有ECMA-262(Java规范文档)与W3C(HTML与CSS的规范文档),微软却没有照规范来实现Java、HTML与CSS,导致前端兼容问题的诞生。所以CSS Hack、浏览器判定、特性侦测,这些技术就应运而生。

这个时代最着名的人物是Dean Edwrad,他是最早的近乎完美解决事件绑定的兼容性大神,其addEvent()内置于jQuery最早的版本中。jQuery的作者John Resig看到其超强的技艺,最后放弃推出大而全的框架,专攻选择器引擎。

Dean Edwrad的IE7.js、IE8.js是早期处理浏览器兼容的良药,可以说是一切Polyfill[2]的起源。他写了大量的Hack, 比如在IE如何测量元素的宽高,许多操作DOM的兼容。

这时期太早,中国基本没有参与这次浏览器战争。

Prototype时期(2005~2009年)

Prototype是Sam Stephenson写的一个非常优雅的Java基础类库。他是Ruby的大牛,因此Prototype的许多方法名都是来自Ruby界。

Sam Stephenson最大的贡献是发掘了Prototype与创造了Function.prototype.bind,在数组上也写了一大堆方法,其中许多被标准化了。

同期的MooTools也是Prototype的方法,当时,大家还在前端论坛为这个争吵。还有前端工程师喜欢在当时很出名的前端聚集地——蓝色理想(现沦为设计师网站)上,讨论如何扒脚本、分享弹层、日历等小组件的技术,这在当时已经是非常了不起的事。

Prototype当时还解决两大问题:动画特效与Ajax请求。动画特效是由aculous提供,我们现在所熟知的各种缓动函数,各种特效的命名与大致的运行形态,都是由aculous确定下来的。

在早期,谷歌就开始使用iframe实现页面刷新。

2005 年2月,杰西·詹姆士·贾瑞特(JesseJamesGarrett)发表了一篇名为《Ajax:一种Web应用程序开发的新方法》的文章后,Ajax被挖掘出,大家才开始重视起这技术的应用。

例如IE下的ActiveXObject("Microsoft.XMLHTTP"),这是IE创建Ajax引擎的。假如当时有工程师开发出一个核心库,如果不包含Ajax的封装,便不好意思发布出来。

一些Ajax书藉

当时前端开发模式是选择一个核心库,找一些组件,或者扒别人的脚本进行开发

Prototype的源码挺好理解的,代码量也少,只有5000多行,里面的每个方法也很易扒出来,因此一些大公司总有高手能创造自己的Prototype。

但前端开发还是离不开后端,因为前端没有模块机制,当时我们需要用PHP进行打包。打包是雅虎34条军规之一,可以减少请求数。打包的同时也可以进行混淆,防止代码小偷来窥探。

N年前,前端面试必问的题目:

模块化的雏型, 在注释中标注它的依赖

这个时期,还没有前后端分离,可国内一些带着深厚后端背景的高手已经入场。

jQuery 时期(2009~2012年)

2006年,jQuery发布,它当时的竞争对手很多:Dojo、Prototype、ExtJS、MooTools。

所以那时jQuery的宣传口号仅能说是它的性能上升了100%、200%、300%。直到2009年,Sizzle选择器引擎研发成功,jQuery才取得压倒性的优势。

当时前端界首要面对的是浏览器兼容性问题,jQuery在处理DOM兼容上真是知微见着, 发掘出大量的DOM/BOM兼容方案(例如Dean Edwrad的addEvent(), IE的px转换方案,domReady的doScroll方案,globalEval的兼容方案等)

jQuery也打破了前端开发者的编程思维,之前是按照后端的开发思路来的:做一个业务就先封装一个类,有了这个类后,再想办法传入一个DOM,然后再通过类方法操作DOM。而jQuery是DOM为中心,开发者可以选一个或多个DOM,变成jQuery对象,然后进行链式操作。当时为了改变用户的思维,国内的高手写了不少文章来引导大家。

其次,开发者们已开始注重前后端分离,并要求不能污染Object原型对象,不能污染window全局变量。这样,jQuery只占用两个全局变量。

再次,jQuery非常轻量级,采用Dean Edwards编写的Packer压缩后, 大小不到30KB。并且里面实现得非常精妙,以令人瞠目的手段解决各种兼容痼疾。

为了学习这些技巧,高手们翻了一遍遍jQuery的源码,所以网上有大量关于其源码详解的书藉。甚至前端工程师在面试时也会被考到jQuery的源码实现,这样,jQuery在国内更加流行。

jQuery的流行间接带来以下的发展:

促使人们对CSS1~CSS3选择器的学习

促进了浏览器原生选择器引擎document.querySelectorAll、Element.matches的诞生

提高人们对domReady(DOMContentLoaded事件)的认识

促进了Promise与requestAnimateFrame 的诞生

最重要的是降低前端门槛,让更多人进入这行业,前端工程师的队伍越来越壮大。

这样的话,不断涌现出优秀的工程师,他们创造了大量jQuery插件与UI库。为后jQuery时代,人们研发前端模块加载、统一异步机制、 打造大型MVC框架, 甚至伸向后端,接管打包脚本而发明Node.js,来腾出大量时间。

这个时期涌现了大量jQuery-like的库,其中最着名的是Zepto.js。Zepto的出现也标志着我们进入移动互联网时代。那时配套出的着名库还有iScroll、fastclick、Lazy Load、Modernizr、fullPage。

jQuery的链式操作风麾一时,也带来许多问题,当Ajax出现依赖时,就不可避免就出现回调地狱。因此针对这方面的讨论,诞生Deffered与Promise。有关回调地狱的讨论,在后来讲Node.js异步处理时,将会再一次热烈地讨论。因此太阳下没有新事,我们总是遇到相似的问题。

jQuery如此多的选择器也法维护,随着越来越多人涌现这行业,页面的交互也越来越复杂,从Web Page向Web App进化,新的趋势带来新的开发方式。

后jQuery时期(2012~2016年)

这时期以RequireJS的诞生为起点,以RN的出现结束。同时解决了前端的模块定义问题,模块打包问题(通过Node.js),Java不依靠其他语言创造了一套自己的工具链。

jQuery的出现让前端工程师开发更加轻松,假如工程师想实现一个功能,现搜索出一个jQuery插件来实现。那时候大家在前端网站就整天介绍jQuery插件,很少讨论一些底层的实现。

前端工程师通常编写一个页面,会引入十多个乃至几十个jQuery插件,页面上塞满了标签。众所周知,浏览器是单线程,的加载,会影响到页面的解析与呈现,导致着名的白屏问题(当时前端用力过勐,body中的所有东西都是动态生成的)。

jQuery另一个问题是全局污染,由于插件的质量问题,或者开发的素质问题,这已经是IIEF模块或命名空间等传统手段无法解决了。

于是一些优秀的前端工程师们决定从取经后端,引入模块机制。早期,这种模块机制在Dojo、EXT这些框架中都是内置的,但是显然说服不了另一个框架的用户用对方的模块机制,于是有人立志要统一这种模块定义方式,成立了CommonJS。

但不料,CommonJS内部也有派系,谁也说不服对方。终于有一个人忍不住自己独立开发出RequireJS,其模块规范即为AMD。 AMD最大的优势是它支持各种插件,且简单明了,并且提供shim机制加载以非AMD规范编写的Java代码。

但在CommonJS诞生很久一段时间后,在后端的Node.js出现时才有用武之地。而国内,则流行另一种规范风格,背靠阿里的大旗,有人推出了SeaJS,号称其规范为CMD。其实无论国内还是国外,都产生许多模块加载器,但最后还是被淘汰了,规范一个就够了,不宜过多。

但是前端工程师的创造力就是这么惊人,从无到有,再到泛滥成灾,一年足矣。这可能与前端代码是开源的原因。最后有人统一了前两种规范(AMD、Node.js模块),同时还支持老式的“全局”变量规范。

自此,Java开发模式焕然一身了,大家只要在代码外面包一层就可以全世界通用,不用提心全局污染的问题。

其次,jQuery开发者需要解决大段HTML的生成问题,之前jQuery有$.html, $.append, $before等方法,可以将一大段符合HTML结构的字符串转换成DOM再插入到页面上。

但现在我们想分离出来,让HTML独立到不同的文件中,然后插数据,这就是前端模板。前端模板的情况与模板规范一样,从没有到多如芝麻的境地。这时筛选一个好用且性能高的模板是一件让前端工程师头疼的问题,那时网上有许多评测文章来介绍它们。

前端模板技术可以用一个公式来描述:

HTML = template(vars)

有了前端模板后,又诞生了前端路由,基于它们,人们发明一个新词汇SPA。作为这个时代的尾声,来自Ruby界的高手Ryan Dahl发明了Node.js。 前端工程师们欢唿:可以不用传统的后端就能自己写一个网站了!

Node.js的发展就不详述上,很快它就冒出海量模块、路由、状态管理、数据库、MVC框架都有了。这时,前端就缺自己的MVC框架了。Node.js转眼就十岁生日了。

着名的MEAN架构,是Java全栈开发的先锋。当时涌现了大量的MVC与MVVM框架。最先火起来的是Backbone.js,使用纯正的MVC模型, Backbone.js是jQuery最后的支持者,它强依赖于jQuery。

Backbone.js的作者还搞了另一套编译语言Coffee, 里面的箭头函数、类机制、 解构赋值等语法糖都深深影响了后来的ES6。

接着下来是谷歌的Angular,微软的Knockout.js,苹果的Ember.js这三个MVVM框架,MVVM就是比MVC多一个数据绑定功能,但这数据绑定功能是非常难实现。Knockout是使用函数代替属性的技巧实现,它的设计影响到后来的Mobx;Ember.js是基于Object.defineProperty;Angular是将函数体转译成setter()、getter()函数。

大公司的介入,对个人开发者影响是很大,毕竟大家都爱迷信大公司,因此局面一下子就稳定下来。大公司还带来了全新的开发模式,早期都是找一个核心库,再搜刮一大堆插件,然后自己写业务代码,最后后端打包。

大公司将后端开发经验挪用过来,用Node.js开发了一套CLI,里面包含了脚手架生成, 打包脚本、语法风格检测、环境变量插入,代码复杂度检测,代码提交时自动跑单元测试, 图片与JS压缩等功能。ESLint、JSLint、JSHint、CSS Lint、 htmllint等就是那时期出现的。

但CLI的出现导致了前端的分裂,以前大家都使用jQuery,但自CLI帮你建好项目的那一刻起,就将你划归某一子阵营,你是Angular?Ember.js?还是jQuery?对了,jQuery没有大公司支撑的阵营被快速边缘化。

对于个人开发者,他们是没有能力开发这么功能完备的CLI,于是出现了Code Climate、Travis CI、CircleCI这样的平台。它们的出现标志着jQuery小作坊时代的终结了。

CircleCI官网

前端开发者也出现分化:有些人转向后端,出现了CNode的门户网站。另外一些人开始搞工程化。一时间出现上百种构建工具,出名的有Grunt、Gulp、FIS3、webpack、 Rollup、npm-。

你方唱罢我登场,这些构建工具均会经历时代的考验,如大浪淘沙般,最后存活得仅为寥寥。

因此在这场工程化得盛宴中,注定把许多低层次的jQueryer淘汰掉。jQueryer在空闲之余培育出的前端模板、前端路由、MVC框架、模块加载器、Node.js构建工具,却不料最终成为它自己的挖墓人。

jQuery的时代一去不返了,再没有人关心拖堂拖了N年的Bootstrap 4终于发布了,没有人知道jQuery3.5的瘦身计划,也没有人问jQuery的源码,渐渐地,大家不关注jQuery的工具链了。

三大框架割据时代(2016~至今)

React是突然爆发的,虽然它是与Angular是同时期发布,但因为JSX怪异的语法让人们远离它。此时已经进入移动互联网的中期,大公司都有自己的App,或者基于原生,或者基于Hybird。

Hybird是用WebView加载一个网站或一个SPA。

由于原生成本太贵,需要招两套班子,一套安卓的,一套iOS的;而Hybird则一直存在性能问题。于是在2017年,Facebook推出了React Native(RN)。

RN的性能不比原生差多少,比Hybird能好些, 其次使用JSX开发界面比原生的快; RN 只需要低成本的前端开发人员就能上手了。中国国内经过瀑布流(图片导购)、团购、P2P、区块链等全新商业模式的开发浪潮后,前端人员数量大增。现在,他们只要稍微培训就可以转型为App开发。

在开发RN的过程中,人们开始了解React一系列的优胜之处。比如JSX背后的虚拟DOM技术,虽然事实证明虚拟DOM不会带来性能的巨大优势,但保证了你怎么写其性能不会太差。

React为了引入JSX,必须需要引入编译,这又间接促成Babel与webpack的壮大。尤其是Babel, 让我们在很旧的浏览器中使用非常新的语法,甚至一些还没有定案的语法。React从14升级到React 15,强制使用class语法,让这个推了好久的语法糖终于大规模落地。

之前如果Java想使用类,只能自己模拟类,由于没有官方的实现,只能任由各优秀工程师发挥。而普通人想用好类,需要了解很复杂的Prototype机制。

现在只用几个新关键字就可以得到这一切。

如果对比Python 2与Python 3间的升级,Java实在太辛运了!针对CSS逻辑功能过弱的问题,我们也有了新的解决方案:Less、Sass、PostCSS与CSS Moles!

谷歌在发布Angular的同时,也发布了一个叫Polymer的框架,那时它想推广一种叫Web Components的浏览器自定义组件技术。这其实是微软在IE5就玩剩的HTC技术的升级版。虽然它没有火起来,但它将、Style、Template三种内容混在一个文件的设计,启发一个留美华人,再结合当时的Backbone.js、Angular等设计,Vue.js横空出世。目前,这是国人最成功的前端框架了。

除此之外,国人也弄了好几套迷你React框架与迷你Vue框架。这有点像jQuery时代,大家疯狂做迷你jQuery框架一样。

总的来说,最有创造力的是React团队,做出状态管理器、CSS-in-JS、Flow静态类型检查、devTool、Fetch、前后端同构、Fiber、suspend、并发渲染等名词层出不穷。其中,状态管理器拥有上百套, CSS-in-JS也拥有上百套,Flow则让前端尝鲜到接口编程的好处,间接推动发Type发展。这三大框架无法比拼个一二出来:Vue.js有国人的拥趸,React与Angular有大公司光环。

三大框架的缠斗从PC领域扩展到移动端:React有RN, Vue.js有Weex,Angular有ionic。想当年我们为了兼容浏览器,攒了一大堆浏览器侦探的Hack,全部贬值为垃圾了。

在这时期,一种全新的后端渲染崛起,称之为前后同构,既拥有早期SEO的功效,又能复用大量的业务逻辑。随着国内移动互联网的发展,获客成本提高,各种有效的商业模式都进入红海,但只有头部用户能赚到钱,马太效应越来越严重,纯粹的技术解决方案已经无法满足商业诉求了。

小程序时代(2017~至今)

小程序时代与三大框架的时代几乎重合,但是出自不同一批人,决战的平台也不一样。

一直以来前端技术都是由国外开发者主导的,即便是Vue.js也是由美国的华人创造的。但是国内外的技术更新是存在代差,国内通常延期两三年,这个时间差可以让一些模仿者得以生存(如SeaJS、FIS、avalon)。但随着封闭的时间越来越长,国内肯会也会诞生自己的转有物种。小程序就是其中之一。

小程序的出现有着明显的商业诉求,因为马太效应,一些超大流量的App诞生了。这些大流量App集成了许多功能,但显然公司再多员工,也无法所有功能全是自己弄,于是产生小程序这种“外包”的手段。

小程序是国内前端技术的一次厚积薄发:底层运行的迷你React的虚拟DOM, 内置组件是使用Web Component,API来源于Hybird的桥方法,打包使用webpack,调试台是Chrome console的简化版, WXML、WXSS的语法高亮也应该是webpack或VS Code的插件, 模块机制是Node.js的CommonJS……其中最值得一提的是微信开发者工具,以后开发者工具成了各种小程序/快应用的标配。

但微信小程序一开始的复用能力非常弱,没有类继承,不能使用npm, 不支持Less、Sass, 因此基于它的转译框架就应运而生。第一代译转框架是wept、WePY、mpvue,它们无一例外是Vue风格的。因为WXML的模板指令与Vue非常相似,只是改一下就能兼容。当时也出现了一个MINA的框架,听说是微信团队开发的,可以单独架起Node.js后端,让小程序运于浏览器中,方便做单元测试。

第一代转译框架主要是基于Template标签实现组件机制,自定义组件机制是很后的事了。这就造成了利用第一代转译框架编写的小程序项目很难升级。那时候是个人开发者的天堂,这些框架都是某一大牛独力开发的。

第二代转译框架是大公司主导的,因为需要兼容的小程序越来越多,网络、支付宝、字节跳动、小米、华为等公司都推出自己的小程序和快应用。个人开发者很难凭个人力量去开发转译框架,这时候各大团队纷纷推出自己的轮子:如京东的Taro、滴滴的Chameleon网易的Megalo、去哪儿网的nanachi、网络的Okam等。

在这个时期,Angular显然落伍了,一是Angular升级太快,国内的高手还没有消化好,新一版的Angular又发布了。二是国内缺乏迷你Angular的轮子,导致庞大的Angular无法塞进小程序中。

国外谷歌发布了Flutter跨平台转译框架,但是它的编写语言是Dart,它也无法跨界到小程序中。

未来不仅国内一线巨头争夺小程序,二三线的巨头也可能会加入小程序的混战中,例如有人称360也在打造自己的小程序平台。小程序这种新的流量变现模式深刻地影响了国内的互联网布局。

结语

当初Java被误解为最糟糕的语言,时至今日它是最流行的语言:GitHub 60%的开源项目都是与Java有关。

以前,从事这行业的人被称为页面仔,现在他们的起薪有的比PHP、JAVA、C++等后端还高。甚至有人说,“任何可以使用Java来编写的应用,最终会由Java编写。”

我们前端开发者触及的领域不仅仅是浏览器,还可以做后端,做桌面端,做手机端,做小程序端,前端开发者的性价比越来越高,越来越重要。可谓是时代造英雄。

笔者有幸成为前端开发者大队伍中的一员,也坚信我们前端开发者以后的路会越来越宽,越来越好走。

资料:

[1]:计算机和编程语言的发展历史

[2]:Polyfill是一块代码(通常是 Web 上的 Java),用来为旧浏览器提供它没有原生支持的较新的功能。

作者简介:司徒正美,拥有十年纯前端经验,着有《Java框架设计》一书,去哪儿网公共技术部前端架构师。爱好开源,拥有mass、Avalon、nanachi等前端框架。目前在主导公司的小程序、快应用的研发项目。


  • 本文链接:http://www.cnite.cn/qianan/share/20198308.html

5. Webpack 怎么用

1. 为什么用 webpack?
他像 Browserify, 但是将你的应用打包为多个文件. 如果你的单页面应用有多个页面, 那么用户只从下载对应页面的代码. 当他么访问到另一个页面, 他们不需要重新下载通用的代码.
他在很多地方能替代 Grunt 跟 Gulp 因为他能够编译打包 CSS, 做 CSS 预处理, 编译 JS 方言, 打包图片, 还有其他一些.
它支持 AMD 跟 CommonJS, 以及其他一些模块系统, (Angular, ES6). 如果你不知道用什么, 就用 CommonJS.
2. Webpack 给 Browserify 的同学用
对应地:
browserify main.js > bundle.js

webpack main.js bundle.js

Webpack 比 Browserify 更强大, 你一般会用 webpack.config.js 来组织各个过程:
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
}
};

这仅仅是 JavaScript, 可以随意添加要运行的代码.
3. 怎样启动 webpack
切换到有 webpack.config.js 的目录然后运行:
webpack 来执行一次开发的编译
webpack -p for building once for proction (minification)
webpack -p 来针对发布环境编译(压缩代码)
webpack --watch 来进行开发过程持续的增量编译(飞快地!)
webpack -d 来生成 SourceMaps
4. JavaScript 方言
Webpack 对应 Browsserify transform 和 RequireJS 插件的工具称为 loader. 下边是 Webpack 加载 CoffeeScript 和 Facebook JSX-ES6 的配置(你需要 npm install jsx-loader coffee-loader):
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.coffee$/, loader: 'coffee-loader' },
{ test: /\.js$/, loader: 'jsx-loader?harmony' } // loaders 可以接受 querystring 格式的参数
]
}
};

要开启后缀名的自动补全, 你需要设置 resolve.extensions 参数指明那些文件 Webpack 是要搜索的:
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.coffee$/, loader: 'coffee-loader' },
{ test: /\.js$/, loader: 'jsx-loader?harmony' }
]
},
resolve: {
// 现在可以写 require('file') 代替 require('file.coffee')
extensions: ['', '.js', '.json', '.coffee']
}
};

5. 样式表和图片
首先更新你的代码用 require() 加载静态资源(就像在 Node 里使用 require()):
require('./bootstrap.css');
require('./myapp.less');

var img = document.createElement('img');
img.src = require('./glyph.png');

当你引用 CSS(或者 LESS 吧), Webpack 会将 CSS 内联到 JavaScript 包当中, require() 会在页面当中插入一个 `<style>标签. 当你引入图片, Webpack 在包当中插入对应图片的 URL, 这个 URL 是由require()` 返回的.
你需要配置 Webpack(添加 loader):
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
path: './build', // 图片和 JS 会到这里来
publicPath: 'http://mycdn.com/', // 这个用来成成比如图片的 URL
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.less$/, loader: 'style-loader!css-loader!less-loader' }, // 用 ! 来连接多个人 loader
{ test: /\.css$/, loader: 'style-loader!css-loader' },
{test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'} // 内联 base64 URLs, 限定 <=8k 的图片, 其他的用 URL
]
}
};

6. 功能开关
有些代码我们只想在开发环境使用(比如 log), 或者 dogfooging 的服务器里边(比如内部员工正在测试的功能). 在你的代码中, 引用全局变量吧:
if (__DEV__) {
console.warn('Extra logging');
}
// ...
if (__PRERELEASE__) {
showSecretFeature();
}

然后配置 Webpack 当中的对应全局变量:
// webpack.config.js

// definePlugin 接收字符串插入到代码当中, 所以你需要的话可以写上 JS 的字符串
var definePlugin = new webpack.DefinePlugin({
__DEV__: JSON.stringify(JSON.parse(process.env.BUILD_DEV || 'true')),
__PRERELEASE__: JSON.stringify(JSON.parse(process.env.BUILD_PRERELEASE || 'false'))
});

mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
plugins: [definePlugin]
};

然后你在控制台里用 BUILD_DEV=1 BUILD_PRERELEASE=1 webpack 编译. 注意一下因为 webpack -p 会执行 uglify dead-code elimination, 任何这种代码都会被剔除, 所以你不用担心秘密功能泄漏.
7. 多个进入点(entrypoints)
比如你用 profile 页面跟 feed 页面. 当用户访问 profile, 你不想让他们下载 feed 页面的代码. 因此你创建多个包: 每个页面一个 "main mole":
// webpack.config.js
mole.exports = {
entry: {
Profile: './profile.js',
Feed: './feed.js'
},
output: {
path: 'build',
filename: '[name].js' // 模版基于上边 entry 的 key
}
};

针对 profile, 在页面当中插入 <script src="build/Profile.js"></script>. feed 页面也是一样.
8. 优化共用代码
feed 页面跟 profile 页面共用不要代码(比如 React 还有通用的样式和 component). Webpack 可以分析出来他们有多少共用模块, 然后生成一个共享的包用于代码的缓存.
// webpack.config.js

var webpack = require('webpack');

var commonsPlugin =
new webpack.optimize.CommonsChunkPlugin('common.js');

mole.exports = {
entry: {
Profile: './profile.js',
Feed: './feed.js'
},
output: {
path: 'build',
filename: '[name].js'
},
plugins: [commonsPlugin]
};

在上一个步骤的 script 标签前面加上 <script src="build/common.js"></script> 你就能得到廉价的缓存了.
9. 异步加载
CommonJS 是同步的, 但是 Webpack 提供了异步指定依赖的方案. 这对于客户端的路由很有用, 你想要在每个页面都有路由, 但你又不像在真的用到功能之前就下载某个功能的代码.
声明你想要异步加载的那个"分界点". 比如:
if (window.location.pathname === '/feed') {
showLoadingState();
require.ensure([], function() { // 语法奇葩, 但是有用
hideLoadingState();
require('./feed').show(); // 函数调用后, 模块保证在同步请求下可用
});
} else if (window.location.pathname === '/profile') {
showLoadingState();
require.ensure([], function() {
hideLoadingState();
require('./profile').show();
});
}

Webpack 会完成其余的工作, 生成额外的 chunk 文件帮你加载好.
Webpack 在 HTML script 标签中加载他们时会假设这些文件是怎你的根路径下. 你可以用 output.publicPath 来配置.
// webpack.config.js
output: {
path: "/home/proj/public/assets", // path 指向 Webpack 编译能的资源位置
publicPath: "/assets/" // 引用你的文件时考虑使用的地址
}

6. jsx文件ps怎么安装

1、首先右键解压准备好的(PS插件)压缩包,解压成文件后,需要点击右键全部复制文件。

7. 用webpack压缩js出现这个提示是什么意思

他像 Browserify, 但是将你的应用打包为多个文件. 如果你的单页面应用有多个页面, 那么用户只从下载对应页面的代码. 当他么访问到另一个页面, 他们不需要重新下载通用的代码.
他在很多地方能替代 Grunt 跟 Gulp 因为他能够编译打包 CSS, 做 CSS 预处理, 编译 JS 方言, 打包图片, 还有其他一些.
它支持 AMD 跟 CommonJS, 以及其他一些模块系统, (Angular, ES6). 如果你不知道用什么, 就用 CommonJS.
2. Webpack 给 Browserify 的同学用
对应地:
browserify main.js > bundle.js

webpack main.js bundle.js

Webpack 比 Browserify 更强大, 你一般会用 webpack.config.js 来组织各个过程:
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
}
};

这仅仅是 JavaScript, 可以随意添加要运行的代码.
3. 怎样启动 webpack
切换到有 webpack.config.js 的目录然后运行:
webpack 来执行一次开发的编译
webpack -p for building once for proction (minification)
webpack -p 来针对发布环境编译(压缩代码)
webpack --watch 来进行开发过程持续的增量编译(飞快地!)
webpack -d 来生成 SourceMaps
4. JavaScript 方言
Webpack 对应 Browsserify transform 和 RequireJS 插件的工具称为 loader. 下边是 Webpack 加载 CoffeeScript 和 Facebook JSX-ES6 的配置(你需要 npm install jsx-loader coffee-loader):
// webpack.config.js
mole.exports = {
entry: './main.js',
output: {
filename: 'bundle.js'
},
mole: {
loaders: [
{ test: /\.coffee$/, loader: 'coffee-loader' },
{ test: /\.js$/, loader: 'jsx-loader?harmony' } // loaders 可以接受 querystring 格式的参数
]
}
};

8. Adobe bridge cc 2022 安装成功 但是有一个错误 bridge-12.jsx 脚

摘要

9. Photoshop CS6把图片压缩成很小的尺寸,为什么图片还有24MB

不用缩小,你另存为PNG格式就可以了,有的时候JPG格式就是这样,怎么改都没用,因为他是按颜色来定义大小的,所以你另存为PNG,就发现图变小了,打开PNG后再存为其他格式图像也小了,这是软件自身的问题,也或许是非正版软件的BUG吧,总之换一个格式别存就可以了。最好是PNG格式。

10. [转载]如何使用PS调片动作---atn文件,jsx文件-脚本编

1.首先调出动作面板:窗口--显示动作 2.装载"画框"动作集:点击动作面板右上角(关闭按钮下面)带箭头小圆按钮,出现菜单 3.选择菜单中"画框.atn"装载画框动作到动作面板 4.使用时注意去掉不想应用的动作指令前的小勾(比如固定的默认动作和画框集中不用的动作) 如果对动作不熟最好不播放动作(拉开该动作查看详细步骤能得更多启发)创意也更自由点 动作一般来说只是针对简单的批量处理JSX文件的用法在Photoshop中给图片加上EXIF信息的方法:先将本文件解压至Photoshop的安装目录,如: C:Program FilesAdobeAdobe Photoshop CS5PresetsScripts下,重启Photoshop。在“文件”-“脚本”下可以看到这个选项,打开照片,运行这个选项即可 Adobe Photoshop最强有力的工具之一根本不是图像编辑工具,而是“脚本”(Actions)功能。该功能的使用方法其实很简单,但遗憾的是,Photoshop的新用户很少有人知道这一功能的存在,甚至把它闲置不用。Photoshop的新用户都非常急于立即开始进行编辑,因此他们仅仅使用最基本的编辑工具,并且努力学习该软件的大量功能。借助于教学材料和提示信息,经过反复试验摸索,他们对程序越来越精通。这时,这些用户就开始使用插件滤镜了,以得到更丰富的效果。市场上有许多这样的滤镜,从互联网上也可以免费下载一些。这些滤镜有各种各样的控制参数,允许你调节滤镜的作用效果。一些滤镜专门用于文件的压缩,另一些滤镜可以为文本对象制作特殊效果,还有一些滤镜可以为整幅图制作特殊效果。问题是"要想制作某种效果,可能需要多个步骤。除非你做大量的笔记,或者记忆力极好,否则,再次重复某种效果几乎是不可能的。这时,就需要使用到“脚本”(Actions)功能了。它位于Photoshop主界面的顶端的下拉窗口中。“脚本”程序的工作方式与文字处理软件中的“宏”一样。“宏”是被录制在文件中的一系列功能的组合,可以通过热键来启动。 “脚本”可以将Photoshop的编辑工具和插件滤镜组合在一个文件中,并只需点击一次鼠标即可启动。在这些“脚本”中,有些能够实现50多项功能,使用了多个插件滤镜,并加入了几十个参数。即便你能够记住实现某种效果的方法,但要想每次都把各个功能中的参数选正确就不是一件容易的事情。在这方面,“脚本”为你节省了大量时间。 “脚本”主要用于重复性的任务或用于制作非常复杂的特殊效果。要建立一个新的“脚本”,只需单击“新脚本”(New Action)按钮。此时,有一个红色的方框表示当前处于录制脚本的状态。当你运行完所有的功能或插件后,停止录制就可以了。每一个“脚本”都有一个特定的名字,并被添加到脚本清单中。下一次当你想再使用上述组合效果时,只需启动这一“脚本”,所有的效果就会自动加载给图像。为了帮助你更好地理解“脚本”,我们以编辑照片为例把“脚本”的使用方法介绍一下。其中大部分方法都是反复试验摸索而得到的,最终把这些方法存储为“脚本”。我们将先执行一些重复性的任务,然后再制作更复杂的“脚本”。减轻颗粒 当你处理一幅用感光速度较高的胶片拍摄的照片时,就可以使用“减轻颗粒脚本”(Grain Rediuction)。这一脚本先使用了去斑点滤镜(Despeckle),然后又使用了锐化滤镜(Sharpen)。虽然前一个滤镜能够去除大量的颗粒,但却会同时将图像变模糊。因此,还需要再使用锐化滤镜。这样,图像清晰如初,但颗粒现象却减轻了。文件的转换 你需要使用的另一个脚本即所谓“MacTiff 脚本”。我们平时都使用PC机编辑图像,而我们与之打交道的大多数杂志社却都使用Mac 机。当我们把一篇文章中的所有图像都制作好后,需要使用“批处理脚本”对一组图像进行处理。此时,你只须坐在那里,看着这个脚本打开一幅幅图像,将其转换成Tiff文件,再将其设置成Mac格式,最后保存并关闭它们。谁说PC和Mac势不两立呢? 当我们需要将大量的图像出售给其他公司用于制作教学CD时,可以使用一个专门制作的脚本。这个脚本可以将大量图像的尺寸减少到其原来的25%,再将它们锐化,最后将它们转换成为Mac的Tiff文件。这一脚本能够轻松地将数据总量超过650MB的多个文件处理成一套新的CD图像。在脚本工作的时候,你就有时间去做其他事情了。在脚本菜单中,还有几个版本的JPEG、Wavelet、Fractal等压缩设置。当你归档保存图像时,可以打开批处理脚本并开始转换过程。这样就无需使用单独的文件转换软件来转换文件了,而是可以一直在Photoshop中工作(一些文件转换软件并不完全与Photoshop兼容,对于Tiff文件尤其如此)。颜色-Gamma值校正 有时,一批图像会带有相同和色偏倾向或不良的反差状况,这通常是由于扫描质量或胶片的显示加工质量不好而造成的。由于这一批图像有着共同的缺点,你就可以建立一个专门的脚本,一次完成对它们的修整。调出第一幅图像,并录制对它的修整过程。当完成所有修整操作后,停止录制,它就会被保存在脚本菜单中了。然后,选择批处理脚本,并将刚刚制作好的脚本应用于所有的图像。于是,所有的图像转瞬间就都象第一幅图像那样得到了修整。如果以后再遇到相似的情况,甚至可以跳过制作脚本的步骤,而直接对待处理的图像使用该脚本。缩略预览图标 其他程序所制作出的图像可能没有缩略预览图标。为了避免猜测图像的内容,可以使用“缩略图标脚本”。这一脚本可以把一组文件打开,并将它们存储在一个复制目录中。当所有的图像都已转存一遍,且缩略图标都已形成,就可以安全地删除第一个目录了。有时,直立的图像可能会被横向放置。此时,再使用第二个脚本,把这些文件打开,待旋转后再次存储就可以了。内存控制 Adobe Photoshop允许你撤消先前的操作。当你对一幅图像进行操作时,Photoshop会在内存中保存关于图层、剪切板和滤镜的先前状态,以防你想撤消一步操作。如果你同时编辑多幅图像,计算机的内存就会不够用,因而需要把数据暂时转移到硬盘中。这样,系统的运行速度就会降低。清空内存需要多个步骤。当你编辑图像时,可以利用特定的脚本自动清空内存。该脚本的工作速度非常快,可以使你的工作速度总是保持最快。特殊效果 插件滤镜的组合可以制作霓虹灯文本、透视效果的阴影、爆炸物体、变幻莫测的背景图案以及其他许多效果,从而扩展了你的创造潜力。学习制作这些效果的方法的最好途径是上网,并以“Photoshop脚本”为关键词进行搜索。大量的网站都提供Photoshop插件、滤镜和脚本。其中一些产品是短期测试版,一些是免费的。它们的最大优点是文件数据量非常小,你可以在不到一小时的时间里下载十多个这类产品。

热点内容
影视脚本创作 发布:2025-01-23 04:00:39 浏览:844
cmd脚本执行sql脚本 发布:2025-01-23 03:46:51 浏览:115
搭建100人的游戏服务器 发布:2025-01-23 03:37:43 浏览:517
b站台解析服务器ip 发布:2025-01-23 03:36:12 浏览:203
安卓手机在哪里看港剧 发布:2025-01-23 03:35:30 浏览:52
黑漫的服务器ip 发布:2025-01-23 03:16:40 浏览:651
tplink无internet访问 发布:2025-01-23 03:15:18 浏览:567
原神用安卓手机玩为什么画质那么低 发布:2025-01-23 03:09:31 浏览:848
空调压缩机是外机吗 发布:2025-01-23 03:09:31 浏览:951
大学数据库学 发布:2025-01-23 02:54:30 浏览:589