精华内容
下载资源
问答
  • 无论您实际使用种框架(Angular,Vue,React),Web组件都将这里停留很长时间! 甚至您也可以使用当前框架来创建Web组件(请参阅 )。 :check_mark: 所有主要的浏览器供应商都支持它们。 否则,如果确实需要...
  • GLYPH使用者介面 跨框架组件库。 有关更多信息,请参阅 ... 我们已经实现了一个“多层”组件库,该组件库由Web组件的核心组成,并为每个最常见的框架提供了更高层次的组件。 我们还包括了一组VanillaJS函数和Amiga
  • AmazeUI(妹子UI)是非常优秀的国产前端UI,现在来介绍一下AmazeUI中CSS组件、JS插件与Web组件的区别。CSS组件顾名思义就是仅使用...它们到底区别在哪?我们重点来讲这个。我们通过学习如何调用Web组件(其中的手风琴...
    AmazeUI(妹子UI)是非常优秀的国产前端UI,现在来介绍一下AmazeUI中CSS组件、JS插件与Web组件的区别。 
    CSS组件顾名思义就是仅使用CSS渲染而成的组件,而JS插件也很容易理解,就是由CSS渲染和JS来控制行为的组件。
    比较不好理解就是Web组件,好像跟JS插件意思差不多,都是CSS和JS组成的。它们到底区别在哪?我们重点来讲这个。
    我们通过学习如何调用Web组件(其中的手风琴组件)来一步一步了解其与JS插件的区别。
     
    示例01.Web组件-直接使用 (请下载附件查看示例)
    示例中关键代码:
    1 <section data-am-widget="accordion" class="am-accordion am-accordion-default">
    2     <!-- 这里面还有代码,本例的大概意思就是不写JS代码,直接调用Web组件。 -->
    3 </section>

     

    示例02.Web组件-通过模板来调用-示例1 (请下载附件查看示例)

    示例中关键代码1(引用 handlebars.js 和 妹子ui调用handlebars.js的辅助js):
    1 <!-- handlebars.js 是一个开源的js库,用于在网页上实现语义模板。 -->
    2 <script src="assets/js/handlebars.min.js"></script>
    3 <!-- 妹子UI调用 handlebars 的辅助类 -->
    4 <script src="assets/js/amazeui.widgets.helper.js"></script>

    示例中关键代码2(定义一个模板)(话说这个模板也没啥实际意义,但官方的demo就是这么写的,我只是移植了一下):

    1 <script type="text/x-handlebars-template" id="my-tpl">
    2     {{>accordion accordionData}}
    3 </script>

    示例中关键代码3(调用JS代码使其工作):

    1 var $tpl = $('#my-tpl'); //得到原始模板
    2 var template = Handlebars.compile($tpl.text()),  //得到编译后的模板
    3 //...这里定义了数据...代码较多...略...
    4 var html = template(data); //传入数据,运行模板,得到结果
    5 var $tpl.before(html); //显示结果

     

    示例03.Web组件-通过模板来调用-示例2 (请下载附件查看示例)
    示例中关键代码1(引用 handlebars.js 和 妹子ui调用handlebars.js的辅助js): 同上,所以省略...
    示例中关键代码2(调用JS代码使其工作):
    1 var template = Handlebars.compile('{{>accordion}}'), //得到编译后的模板 (字符串就算是原始模板了)
    2 var html = template(data.accordionData); //传入数据,运行模板,得到结果
    3 $("#div1").before(html); //显示结果

     

    示例04.Web组件-通过自定义模板来调用 (请下载附件查看示例)
    示例中关键代码1(引用 handlebars.js )
      
      不一样的地方在于,这次只引用了 handlebars.js ,而没有引用 妹子ui调用handlebars.js的辅助js ,因为不需要了。
     
    示例中关键代码2(自定义原始模板):
    1 <!-- 自定义原始模板 -->
    2 <script type="text/x-handlebars-template" id="demo-template">
    3 //这里还有很多代码,因为不关键就省略了...
    4 <!-- 关键代码:添加图标 icon 属性 -->
    5 {{#if icon}}<img src="{{icon}}" style="width:20px;" />{{/if}} 
    6 //这里还有很多代码,因为不关键就省略了...
    7 </script>

    示例中关键代码3(调用JS使其工作):

     1 var demoData = { //定义数据
     2     "content": [..省略.., {
     3         "title": "标题二",
     4         "content": "内容二",
     5         "icon": "assets/i/favicon.png" //关键:多出一个icon属性
     6     }, ..省略..]
     7 };
     8 var demoTemplate = Handlebars.compile($("#demo-template").html()); //得到编译后的模板
     9 var demoHtml = demoTemplate(demoData); //传入数据,运行模板,得到结果
    10 $("#div1").html(demoHtml); //显示结果

     

    示例05.Web组件-华瑞手风琴组件 (请下载附件查看示例)
    示例中关键代码1(huarui.accordion.helper.js):
    这是一个自定义Web组件的js支持文件,这个文件的编写很简单,复制 amazeui.widgets.helper.js 改一改就好了。
     1 //注册一个新组件,名叫:hr-accordion
     2 hbs.registerPartial('hr-accordion', '\
     3 {{#this}}\
     4 <section data-am-widget="accordion" class="am-accordion {{#if theme}}am-accordion-{{theme}}{{else}}am-accordion-default{{/if}}{{#if widgetId}} {{widgetId}}{{/if}}{{#if className}} {{className}}{{/if}}" {{#if id}} id="{{id}}" {{/if}} data-am-accordion=\'{ {{#if options.multiple}}"multiple": true{{/if}} }\'>\
     5     {{#each content}}\
     6     <dl class="am-accordion-item{{#if active}} am-active{{/if}}{{#if disabled}} am-disabled{{/if}}">\
     7         <dt class="am-accordion-title" style="color:#0094ff;">\
     8             <!-- 添加图标的关键代码 -->\
     9             {{#if icon}}<img src="{{icon}}" style="width:20px;" />{{/if}}\
    10             {{{title}}}\
    11                 </dt>\
    12                 <dd class="am-accordion-bd am-collapse {{#if active}}am-in{{/if}}">\
    13                     <div class="am-accordion-content">\
    14                         {{{content}}}\
    15                     </div>\
    16                 </dd>\
    17             </dl>\
    18     {{/each}}\
    19 </section>\
    20 {{/this}}');

    示例中关键代码2(引用相关js文件):

    1 <!-- handlebars.js 是一个开源的js库,用于在网页上实现语义模板。 -->
    2 <script src="assets/js/handlebars.min.js"></script>
    3 <!-- 华瑞手风琴组件,调用 handlebars.js 的辅助类 -->
    4 <script src="assets/js/huarui.accordion.helper.js"></script>

    示例中关键代码3(调用JS使其工作):

     1 var demoData = {  //定义数据
     2     "content": [..略.., {
     3         "title": "标题二",
     4         "content": "内容二",
     5         "icon": "assets/i/favicon.png" //关键:多出一个icon属性
     6     }, ..略..]
     7 };
     8 //得到编译后的模板,传入数据,运行模板,得到结果
     9 var demoHtml = Handlebars.compile('{{>hr-accordion}}')(demoData); 
    10 $("#div1").html(demoHtml); //显示结果

     

    看完以上的示例,得出结论:
    在AmazeUI(妹子UI)中,Web组件可以不编写模板而直接使用,若如此,则与JS插件没什么太大区别,官方原话也说可以这么调用的。
    Web组件与JS插件的不同之处在于,Web组件借助 handlebars.js 实现了强大的模板功能,我们能编写自定义模板从而使Web组件更具个性,甚至是编写出新的Web组件。

    下载附件:AmazeUI的Web组件.zip

     

    转载于:https://www.cnblogs.com/zhouyou96/p/7258995.html

    展开全文
  • 极光头像 是用于显示表示形式的图标图像。 UI开发浏览器支持 有关最新信息 安装 ...使用组件的每个组件中定义组件依赖性。 import "@alaskaairux/auro-avatar" ; HTML中的参考组件 < auro-avata
  • 基本上,他戴着顶帽子,住您的计算机中,然后等待您告诉他您希望创建种应用程序。 并非每台新计算机都预装了Yeoman。 他住软件包存储库中。 您只需要问他一次,然后他打包并移入您的硬盘驱动器。 确保您清理...
  • 在Web页内显示Binary(位图)的组件(二)

    千次阅读 2004-08-18 15:58:00
    一、 写前面:由于工作比较紧张!代码写多了头脑就会发热,所以程序员一定要注意休息,不要太多的熬夜,俗语说得好:“什么都可以有就是不可以有病!”;昨晚体验了一下vs2005,真是不一样的感觉,不能不佩服M$的...

     <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    一、            写在前面:

    由于工作比较紧张!代码写多了头脑就会发热,所以程序员一定要注意休息,不要太多的熬夜,俗语说得好:“什么都可以有就是不可以有病!”;

    昨晚体验了一下vs2005,真是不一样的感觉,不能不佩服M$的眼光和想象力。深远的影响到每一个程序员。无论是从界面体验、功能体贴、人性化、代码的简洁等哪方面考虑,他带给我们的是效率的提升,和把事情的简单化。简单就是最好的。

    我们不需要再加班的梦想也许不会太远了

    让我们一起来吧!

     

    二、            原理:

    好了!有时候我们总是喜欢说废话。但是有时候废话却很可以调节心情,那么就继续把:

    asp.net显示位图的唯一方法(因为目前我只知道这么一个方法^_^)就是将ImagUrl的连接设到一个页面上,然后在那个叶面将位图Respone到叶面上就行了!不过就是麻烦点而已。就是这样:

    src="region.binaryimage/fccc37ab-f4cb-4199-8332-7ff0168daad4.aspx"。

    那么要把这样一种过程集成到组建里面去,就可以不用再为建一个目标叶面而浪费时间了,以方便又省事(因为我比较懒,所以我比较喜欢写一些组件以便满足我的惰性)。

    经过周密的研究后(^_^)得出一个解决方案:

    组件自动产生一个相关目录,在该目录中再建个配置文件,以便把响应重定位到我们自定义类型处理。

     

    三、            组件技术:

    那么为了实现这个伟大的组件(^_^),我们需要一些组件方面的技术。

    1、也是最重要的一点就是叶面重定位技术,在配置文件节点

    <?xml version="1.0" encoding="GB2312" ?>

    <configuration>

        <system.web>

            <httpHandlers>

                  <add verb="*" path="*" type="Region.Controls.BinaryImageHandler, region.binaryimage"/>

           </httpHandlers>

        </system.web>

    </configuration>

    重定位到我们自定义类型。

    2、如何实现自定义类型。在.net framework 中提供一个接口来达到这个效果,我们的自定义类型Region.Controls.BinaryImageHandler必须继承自System.Web.IhttpHandler实现他的两个接口。(由于篇幅的关系,更深入的原理就不在这里细说了,感兴趣的话可以查看MSDN)

    3、还有一点就是位图的如何从源页传到目标页的呢?由于我们没有目标页,所有处理都在我们的自定义类型当中处理,而HttpHandler已发的时候Session等对象都还没有实力化,唯一可行的方法就是位图保存在Application里面。用完之后删掉就可以了。

    4、那么还有几个地方要注意,就是将位图保存在Application中的ID,因为是全局的。所以可以取个GUID来稿定。

    基本上就可以这么高定了!

    源码发到下面,新建个类库项目将下面代码Copy然后编译就可以了!:(因为不前我还没有空间提供下载,如果哪位好心朋友提供我可上传上去供大家方便下载)

    #region[     BinaryImage Show Coponent]

    ///Author:Region

    ///MSN:hl_net@msn.com

    ///Blog:http://Blog.csdn.net/xinyulou

    #endregion

     

    using System;

    using System.IO;

    using System.Web;

    using System.Resources;

    using System.Reflection;

     

     

    namespace Region.Controls

    {

        /// <summary>

        /// 显示位图 

        /// </summary>

        /// <code>

        /// <%@ Register TagPrefix="Region" Namespace="Region.Controls" Assembly="Region.Controls" %>

        /// <Region:BinaryImage id="BinaryImage" runat="server"></Region:BinaryImage>

        /// </code>

        //[System.Web.UI.ToolboxData("<{0}:BinaryImage runat=server></{0}:BinaryImage>")]

        public class BinaryImage:System.Web.UI.WebControls.Image

        {  

           string path1 ;

           protected override void OnLoad(EventArgs e)

           {

               base.OnLoad (e);

               path1 = Path.Combine(Page.Request.PhysicalApplicationPath,Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location));      

               string path2 = Path.Combine(path1,"Web.config");       

               if (!Directory.Exists(path1))

               {

                  Directory.CreateDirectory(path1);

               }

               if(!File.Exists(path2))

               {

    //            ResourceManager rm = new ResourceManager(Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location)+".String", Assembly.GetExecutingAssembly());

    //            string a = rm.GetString("Config");    

                  string a = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>"+@"

    <configuration>"+@"

        <system.web>"+@"

            <httpHandlers>"+@"

                  "+"<add verb=/"*/" path=/"*/" type=/""+this.GetType().Namespace+".BinaryImageHandler, "+Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location)+"/"/>"+@"

           </httpHandlers>"+@"

        </system.web>"+@"

    </configuration>"+@"

    ";

                  byte[] bs = System.Text.Encoding.Default.GetBytes(a);

                  FileStream fileStream = new FileStream(path2,FileMode.Create, FileAccess.Write);

                  try

                  {

                      fileStream.Write(bs, 0,bs.Length);

                  }

                  finally

                  {

                      if (fileStream != null)

                      {

                         ((IDisposable)fileStream).Dispose();

                      }

                  }

               }

              

           }

     

           //唯一ID

           public string GUID

           {

               get

               {

                  if( ViewState[UniqueID]== null)

                      ViewState[UniqueID] = Guid.NewGuid().ToString();

                  return (string)ViewState[UniqueID];

               }

           }

     

           //[System.ComponentModel.Browsable(false)]

           public byte[]  Binary

           {  

               set{ Page.Session[GUID] = value;}

               get{return Page.Session[GUID]==null?null:(byte[])Page.Session[GUID];}

           }

     

           protected override void Render(System.Web.UI.HtmlTextWriter writer)

           {

               if(ImageUrl == "")

               {

                  ImageUrl = Path.Combine(Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().Location), GUID+".aspx");

                  if(Page.Application[GUID] == null)

                      Page.Application[GUID] = Binary;  

               }

               base.Render(writer);

           }

       

        }

     

        public class BinaryImageHandler:System.Web.IHttpHandler

        {

           public virtual bool IsReusable

           {

               get{return true;}

           }

           public virtual void ProcessRequest(HttpContext context)

           {

               string id = Path.GetFileNameWithoutExtension(context.Request.FilePath);

               if(context.Application[id] != null)

               {

                  byte[] bs = (byte[])context.Application[id];           

                  HttpContext.Current.Response.BinaryWrite(bs);

                  context.Application[id] = null;

               }

           }

        }

     

     

    四、            写在最后:

     

    边听着悠扬美妙的音乐、边体验Codes的诗一般的美。

    如此而已

     

    Share u opinion

    如果你有什么想法,欢迎写下来!

    展开全文
  • Web组件启动 Web组件很棒。 但是您可能会想到«天,这对我来说似乎太复杂了! 让我们休息一下吧! »。 而且您可能是正确的。 但是我们Lisp那里,我们可以根据需要扩展语言。 因此,让我们尝试轻松添加Web组件!...
  • 2016年,React在Web端和移动端都实现了迅速的成长,稳稳地领先于其主要竞争对手Augular,巩固了其作为前端框架之王的地位。 但是Vue这一年里的表现也可谓同样的耀眼。Vue.js 2.0 的发布整个JavaScript社区都...

    2016年,React在Web端和移动端都实现了迅速的成长,稳稳地领先于其主要竞争对手Augular,巩固了其作为前端框架之王的地位。

    但是Vue在这一年里的表现也可谓同样的耀眼。Vue.js 2.0 的发布在整个JavaScript社区都引起了巨大反响,这一点仅从它在Github中涨了25,000颗star,就足以得到证明。

    不得不说React和Vue的使用范围是相似的:都是基于组件化的轻量级框架,都专注于构建用户界面的视图层;都既可以用于简单的项目,也适用于使用前沿技术的大规模复杂项目。

    因此,很多Web开发者都难免纠结到底要从中选择哪一个框架。这两者中能否分出个高下好坏?或者它们各自有哪些优缺点是需要我们注意的?还是说它们实际上差不多,用谁都一样?

    两种框架,两个拥护者

    在这篇文章中我想用尽可能公平,全面的对比来回答这些疑问。但是问题来了:我是个不折不扣的Vue迷弟,肯定会偏向它。今年我在项目中大量地使用了Vue,在Medium上安利它的好处,甚至还在Udemy开设了一门关于Vue的入门课程

    为了平衡一下,我邀请了我的朋友Alexis Mangin一起参与讨论。他是一名优秀的Javascript开发者,且是React的铁粉。与我相似的是,他也频繁地在各种项目中(包括Web端和移动端项目)使用着React。

    有一天他问我说:“为什么你这么喜欢用Vue,而不是React?”,当时由于我不太了解React,所以很难给出一个很好的回答。于是我向他提议,我们找一天带上各自的笔记本电脑,一起探讨我们各自喜爱的框架的好处。

    Anthony(左)和 Alexis(右)在泰国清迈的Bull and Bear咖啡馆里比较React和Vue

    经过大量地讨论和互相学习,我们得出了以下六个关键点:

    如果你喜欢用(或希望能够用)模板搭建应用,请使用Vue

    Vue应用的默认选项是把markup放入HTML文件中。数据绑定表达式使用的是与Angular相似的双大括号(moustache)语法,而指令(特殊的HTML属性)则用于向模板中添加功能。

    下面是一个简单的Vue应用示例。它会展示一条消息(message),和一个用来动态反转这条消息的按钮:

    // HTML
    
    <div id="app">
      <p>{{ message }}</p>
      <button v-on:click="reverseMessage">Reverse Message</button>
    </div>
    
    // JS
    
    new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue.js!
      },
      methods: {
        reverseMessage: function () {
          this.message = this.message.split('').reverse().join('');
        }
      }
    });
    

    React应用则与之相反,不使用模板,而是要求开发者借助JSX在JavaScript中创建DOM。下面是用React实现的相同的应用:

    // HTML
    
    <div id="app"></div>
    
    // JS (pre-transpilation)
    
    class App extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          message: 'Hello React.js!'
        };
      }
      reverseMessage() {
        this.setState({ 
          message: this.state.message.split('').reverse().join('') 
        });
      }
      render() {
        return (
          <div>
            <p>{this.state.message}</p>
            <button onClick={() => this.reverseMessage()}>
              Reverse Message
            </button>
          </div>
        )
      }
    }
    
    ReactDOM.render(App, document.getElementById('app'));
    

    对于来自标准Web开发的新开发者来说,模板更容易理解。然而甚至连一些资深的开发者也喜欢使用模板,因为模板能更好地把功能和布局分割开来,还为使用Pug之类的模板引擎提供了可能。

    不过使用模板的代价在于你需要学习所有的HTML扩展语法,而渲染函数(render function)只要求会使用标准的HTML和JavaScript。而且比起模板,渲染函数更易于调试和测试。但是,你并不应该因此就错过Vue,因为在Vue2.0中已经提供了使用模板或者渲染函数的选项。

    如果你喜欢简单和“能用就行”的东西,请使用Vue

    一个简单的Vue项目能不需要转译直接使用在浏览器中,这使得在项目中使用Vue可以像使用jQuery一样容易。当然这对于React来说在技术上也是可行的,但典型的React代码是更多地依赖于JSX和诸如class等ES6特性的。而Vue的简单则是更深层地源于其设计的。让我们来比较一下这两个框架是如何处理应用数据的(即“state”):

    React里的状态(state)是不可变(immutable)的,因此你不能直接地改变它,而是要用setState API方法:

    this.setState({ 
        message: this.state.message.split('').reverse().join('') 
    });
    

    React是通过比较当前状态和前一个状态的区别来决定何时及如何重新渲染DOM的内容,因此需要使用不可变的状态。

    而与此相反的是,Vue中的数据是可变的(mutated),所以同样的数据变量可以用简洁得多的方式修改:

    // Note that data properties are available as properties of 
    // the Vue instance
    
    this.message = this.message.split('').reverse().join('');
    

    让我们来看看Vue中是如何对状态进行管理的:当你向状态中添加一个新对象时,Vue将遍历其中的所有属性并且将它们转换为getter,setter方法。于是Vue的响应系统开始保持对该状态的跟踪,当该状态的内容发生变化的时候就会自动重新渲染DOM。令人佩服的是,Vue中改变状态的操作不仅更加简洁,而且它的重新渲染系统实际上比React的更快更高效。

    不过Vue的响应系统还是有些坑的,比如它无法检测属性的添加和删除,以及某些数组更改。这时候就要用Vue API中的类似于React的set方法的措施来解决。

    如果你的应用需要尽可能的小和快,请使用Vue

    当应用程序的状态改变时,React和Vue都会构建一个虚拟DOM并同步到真实DOM中。两者都有它们各自的优化这个过程的方式。

    Vue的核心开发者提供了一个benchmark测试,来表明Vue的渲染系统比React的更快,具体基准的设定以及同其他框架的比较详见vuejs.org。测试方法是将含有10000个项目的列表渲染100次,结果如下图。

    从实用的角度来看,这种benchmark只跟边缘情况有关,而大部分应用程序中不会经常进行这种操作,所以这不应该被视作一个重要的比较点。但是,页面大小则是与所有项目有关的,这方面Vue又一次优于React,它目前的版本压缩后只有25.6KB。要用React实现同样的功能,你需要React DOM(37.4KB)和React with Addon库(11.4KB),共计44.8KB,几乎是Vue的两倍大。虽然从React你的确会得到更丰富的API,但双倍的体积并不能带来双倍的功能。

    如果你计划构建一个大型应用程序,请使用React

    像文章开头那样,用Vue和React实现的简单应用程序来比较两者,可能会让一个开发者从一开始就更倾向于Vue。这是因为基于模板的应用程序乍看上去更易理解,而且能很快地写好并跑起来。但是这些最初的便利会引入技术债并阻碍应用扩展到更大的规模。模板容易出现难以注意到的运行时错误,同时也不易于测试,重构和分解。

    相比之下,Javascript模板可以组织成经过良好分解,且使用DRY(don't repeat yourself - 避免重复代码)原则的代码的组件,因而具有更强的可重用性和可测试性。Vue也有组件系统和渲染函数,但React的渲染系统可配置性更强,并包含如shallow rendering这样的特性,可结合React的测试工具一起使用,从而大为提高代码的可测试性及可维护性。

    虽然React的不可变(immutable)应用状态写起来可能不够Vue简洁,但它在大型应用中仍会大放异彩,因为透明度和可测试性此时变得至关重要。

    如果你想要一个同时适用于Web端和原生App的框架,请选择React

    React Native是一个用于通过Javascript构建移动端原生应用程序的库。 它与React.js相同,只是不使用Web组件,而是使用原生组件。 如果你学过React.js,很快就能上手React Native,反之亦然。

    // JS
    
    import React, { Component } from 'react'; 
    import { AppRegistry, Text, View } from 'react-native';
    
    class HelloWorld extends Component {   
      render() {     
        return (       
          <View>         
            <Text>Hello, React Native!</Text>
          </View>
        );   
      }
    }
    
    AppRegistry.registerComponent('HelloWorld', () => HelloWorld);
    

    其意义在于,开发者只需要一套知识和工具就能开发Web应用和移动端原生应用。如果你想同时做Web端开发和移动端开发,学习React对你来说是相当划算的。

    阿里的Weex也是一个跨平台UI项目,目前它以Vue为灵感,使用了许多相同的语法,并计划未来实现完全集成Vue,不过集成的时间和具体细节还未确定。由于Vue的设计中将HTML模板作为其核心部分之一,并且现有特性不支持自定义渲染,因此以Vue.js目前的形态来说,很难看到Weex与之的关系将能像React和React Native一样紧密。

    如果你想要最大的生态圈,请使用React

    毫无疑问,React目前比Vue要受欢迎许多——它在NPM上每个月的下载量约为250万次,而Vue只有22.5万次。

    人气带来的好处不仅是表面上的名声,还意味着更多相关的技术文章,教程和更多Stack Overflow上的解答和帮助;以及有着更多的工具和插件可以在项目中使用,开发者不用从零开始,可以省很多力气。

    这两个框架都是开源的,但是React诞生于Facebook,自带给力的资助,它的开发者和Facebook都承诺会持续维护React。而Vue则是由独立开发者尤雨溪创造,目前也只有他一名全职维护者。虽然也有一些公司资助Vue,但是规模和Facebook和Google没得比。

    不过由于Vue的团队的努力,它的小规模和独立性并没有成为劣势。Vue有着固定的发布周期,甚至更令人称道的是,Github上Vue只有54个待解决问题(open issue),已关闭问题(closed issue)则有3456个;与之相比,React的已关闭问题数目相差不多(3447个),待解决问题却有多达530个。

    如果你已经对其中一个用得满意了,就没有必要换了

    总结一下,我们发现,Vue的优势包括:

    • 模板和渲染函数的弹性选择

    • 简单的语法及项目创建

    • 更快的渲染速度和更小的体积

    React的优势包括:

    • 更适用于大型应用和更好的可测试性

    • 同时适用于Web端和原生App

    • 更大的生态圈带来的更多支持和工具

    而实际上,React和Vue都是非常优秀的框架,它们之间的相似之处多过不同之处,并且它们大部分最棒的功能是相通的:

    • 利用虚拟DOM实现快速渲染

    • 轻量级

    • 响应式组件

    • 服务器端渲染

    • 易于集成路由工具,打包工具以及状态管理工具

    • 优秀的支持和社区

    如果你觉得我们有所遗漏,欢迎在评论中指出。祝开发愉快!


    展开全文
  • 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的。我项目中也开始接触一些缓存的需求。 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务器来说很好。 ...

    背景

    现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的。我在项目中也开始接触一些缓存的需求。

    • 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务器来说很好。
    • 为了系统的可用性,需要做灾备,那么就要多准备一套系统环境,这时就会有一些共享资源的问题,比如Tomcat的session共享出来
    • 几个系统会公用一套缓存数据,这样就变成一个共享池

    需求的增长也就带来了系统的变化,也正为这种变化我开始思考怎么让这些代码兼容,并为以后的系统模块提供比较统一的支持。正好在openfire这个开源项目上得到了启发,它的集群思路我觉得是种不错的解决方案。

    j2cache介绍

    随后就开始写一个简单的缓存系统,结构非常的简单,代码也非常的简单。说是开源其实也有点过了,只是觉得闭门造车没有意思,所以将代码放在github上,如果有高手看到指点一下那我不是赚大了。哈哈。

    github:https://github.com/mini188/j2cache

    代码非常简单,maven工程引入也很容易,我就不打算对代码做啥说明,有兴趣的朋友下载简单看看就能明白。 image

    项目主要特点:

    • Key-value的存储结构
    • 基于java.util.Map<K, V>接口,这样很容易与hashmap之类的兼容
    • 基于策略模式的扩展

    为此项目中实现了三种存储方案:

    • jvm虚拟机内存,适用于单应用,或者不需要同步的情况
    • redis,适用于需要redis的场景,比如缓存共享等
    • iginte,一种带网络计算的方案

    j2cache的入测试

    测试机器环境:

    我的测试方法比较简单,向缓存里连续写100万个对象,然后看看处理的性能。说明一下,这些测试都是在本机完成的

    OS:Windows7 64位

    CPU:I5-4210U @ 1.70GHZ 2.40GHZ

    RAM:8G

    Redis用的是Redis on Windows Redis-x64-3.2.100

    本地环境中写入1,000,000个对象的

    • 开始测试写入缓存jvmCache

    总共耗时:2380ms

    每毫秒写入:420条

    每秒写入:420000条

    • 开始测试写入缓存igniteCache

    总共耗时:9503ms

    每毫秒写入:105条。

    每秒写入:105000条。

    • 开始测试写入缓存redisCache

    总共耗时:40367ms

    每毫秒写入:24条。

    每秒写入:24000条。

    结果

    为了对各种方案进行一些数据上对比,做了一个简单的写入测试,使用本地内存做缓存这种方案最高效,写入量达到42万每秒。而redis则只达到了24000条/秒,我对redis不是特别熟悉,看到这个数据有点诧异。

    我比较懒,没有测试一段时间内的读写性能,只不过从这个简单的测试中发现,本地内存的效果还是很高的,如果加上一些其他的功能,比如网络传输,数据同步等后性能会下降。

    只不过redis和ignite差这么大我没有搞明白,不知道是不是我的方法不对呢?

     

    注:此文章为原创,欢迎转载,请在文章页面明显位置给出此文链接!
    若您觉得这篇文章还不错请点击下右下角的推荐,非常感谢!
    http://www.cnblogs.com/5207

    转载于:https://www.cnblogs.com/5207/p/5908567.html

    展开全文
  •  一个是普通版本的,需要另外下载一个叫Lomboz的插件,它将很多Java应用服务器、J2EE组件Web应用开发集成到Eclipse中,可以帮助Java开发者使用Eclipse建立、测试、部署J2EE应用;  一个是Eclipse for J2EE版本...
  • 前端组件化框架之路

    千次阅读 2018-06-27 14:24:29
    但是在Web前端这个领域,并没有很通用的组件模式,因为缺少一个大家都能认同的实现方式,所以很多框架/库都实现了自己的组件化方式。前端圈最热衷于造轮子了,没有个别的领域能出现这么混乱而欣欣向荣的景象。这一...
  • 从本质上讲,表引擎更像是用于构建表组件的框架,因此,作为开发人员,您必须更高的抽象级别上构建自己的东西。 该项目正在进行中,但是您可以查看我们的以查看当前状态的快照。 演示版 您可能想看一下开发...
  • 右击解决方案-->添加-->新项目-->搜索框中输入 ASP.NET Web 应用程序(.NET Framework),然后选择-->选择Web窗体。这就OK了,前提是组件你安装的有。
  • 2015前端组件化框架之路

    千次阅读 2016-06-18 22:38:42
    原文:http://sentsin.com/web/1124.html ...但是在Web前端这个领域,并没有很通用的组件模式,因为缺少一个大家都能认同的实现方式,所以很多框架/库都实现了自己的组件化方式。 前端圈最热衷于造轮子了,没有
  • swarm头矿来了,这个项目潜力是非常巨大,V神团队开发,可以说是以太坊的核心,俗称以太坊亲儿子,这个项目于2015年启动,从一开始,它就被认为是与以太坊和whisper一起,定义为Web3.0组件的三大支柱。 SWARM随...
  • 可以手机上扫码查看这个组件,但是我们想使用一个组件是什么样的,就需要手机上看这个组件是什么样的,其实这样挺麻烦的,不过我还是把二维码给放过来吧。2.就是在web微信开发者工具中查看,首先去github上...
  • 1.PageView画布布局 ...创建一个文本节点,放到PageView组件的上部空白部分,方便我们看到当前是一页。 2.创建脚本码字母 画布布置好之后,我们要建立一个脚本,将脚本挂载到画布上, 脚本.
  • 微信小程序UI组件库 iView Weapp快速上手

    万次阅读 热门讨论 2018-06-11 16:48:28
    可以手机上扫码查看这个组件,但是我们想使用一个组件是什么样的,就需要手机上看这个组件是什么样的,其实这样挺麻烦的,不过我还是把二维码给放过来吧。2.就是在web微信开发者工具中查看,首先去github上...
  • 在哪用到了呢?在这节中简单介绍下springmvc三个组件的作用 及工作流程。 处理器映射器: 处理器映射器的作用:根据请求的url查找Handler。 第一节中说的工程启动或执行第一次请求的时候就会加载解析我们定义的请求...
  • 基本上,他戴着顶帽子,住您的计算机中,然后等待您告诉他您希望创建种应用程序。 并非每台新计算机都预装了Yeoman。 他住软件包存储库中。 您只需要问他一次,然后他打包并移入您的硬盘驱动器。 确保您清理...
  • 但是在Web前端这个领域,并没有很通用的组件模式,因为缺少一个大家都能认同的实现方式,所以很多框架/库都实现了自己的组件化方式。 前端圈最热衷于造轮子了,没有个别的领域能出现这么混乱而欣欣向荣的景象。这...
  • 因为项目开发时组件在一起,使统一版本号成为可能。我们将所有依赖到的组件都安装在 Root 项目中,每个组件的 package.json 由脚本自动生成,这个脚本需要静态扫描每个组件的 Import 或 require ...
  • Struts 控制器 MVC 体系结构的控制器部分主要集中于接收客户端的请求(一般为运行 Web 浏览器的用户),决定执行一种业务逻辑功能来响应请求,然后负责生成下一个用户界面连接到合适的视图组件上去。 Structs 中...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 294
精华内容 117
关键字:

web组件在哪