Webpack实战-构建离线应用
认识离线应用你的网页性能优化的再好,如果网络不好那也会导致网页的体验差。离线应用是指通过离线缓存技术,让资源在第一次被加载后缓存在本地,下次访问它时就直接返回本地的文件,就算没有网络连接。离线应用有以下优点:在没有网络的情况下也能打开网页。由于部分被缓存的资源直接从本地加载,对用户来说可以加速网页加载速度,对网站运营者来说可以减少服务器压力以及传输流量费用。离线应用的核心是离线缓存技术,历史上曾先后出现2种离线离线缓存技术,它们分别是:AppCache又叫ApplicationCache,目前已经从Web标准中删除,请尽量不要使用它。ServiceWorkers是目前最新的离线缓存技术,是WebWorker的一部分。它通过拦截网络请求实现离线缓存,比AppCache更加灵活。它也是构建PWA应用的关键技术之一。ServiceWorkers相比于AppCache来说更加灵活,因为它可以通过JavaScript代码去控制缓存的逻辑。由于第1种技术已经废弃,本节只专注于讲解如何用Webpack
A Simple RESTful API Service With Node.js And Koa2
背景:2017年可以说是区块链爆发的一年,都说币圈一日股市一年,小道消息的即时性很重要,自己有时候想要即时查询币价,同时也需要实时获知一些利好或利空消息,奈何总找不到合适自己的小玩意;女朋友怕冷,又总嫌弃带雨伞麻烦,如果来个天气预报提醒她几时需要带雨伞,那简直perfect;老爸老妈使用微信的频率很高,但却不会用电脑版微信,总是微信叫我把文件转发到他QQ好让他方便下载到电脑上,如果用微信接受文件并存储到七牛云同时返回一个链接供一键下载那就方便了;有时候在微信群聊天,想即刻查询某支股票价格,想要知道谁谁今天生日及时提醒我等等等...
ActiveMQ基本详解与总结
ActiveMQ基本详解与总结MQ简介:MQ全称为MessageQueue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBMWEBSPHEREMQ。MQ特点:MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUNJAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。使用场景:在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。JMS简介:JMS即Java消息服务(JavaMessage
阿里巴巴C++程序员面试的10个问题,你会几个?
此前,w3cschoolapp开发者头条上分享了诸多名企程序员面经。比如阿里巴巴java程序员面经,阿里巴巴前端开发程序员面经。这些面经吸引了大多数的程序员们的围观。今天要给程序员们分享的是w3cschoolapp开发者头条频道上的面经——阿里巴巴C++程序员面试的10个问题。阿里巴巴C++程序员面试的10个问题,你会几个?有些程序员网友感慨道:居然一个都不会。在分享阿里巴巴C++程序员面试之前,我们先来讨论一下学习C++的套路:0、将C++和C区别对待把C++当成一门新的语言学习,它和C没啥关系。就拿C和C++中有一些语法和关键字来说,有人说它们的意义和作用完全一样,其实差别甚大。阿里巴巴C++程序员面试的10个问题,你会几个?1、最好的C++入门书籍c++是一门备受争议的语言。关于C++的书籍也是相当多,相当的杂乱。如果你要入门C++,可以选择《AcceleratedC++》这本书,这本书可以说是世界上最好的C++入门书籍了。阿里巴巴C++程序员面试的10个问题,你会几个?如果你要加深对C
Docker自动化双主MySQL-01:安装docker并使用docker 获取镜像
摘要:nstallwithyum1.shell>sudoyumupdate2.添加dockeryum$sudotee/etc/yum.repos.d/docker.repo<<-'EOF'[dockerrepo]name=DockerRepositorybaseurl=https://yum.nstallwithyum1.shell>sudoyumupdate2.添加dockeryum$sudotee/etc/yum.repos.d/docker.repo<<-'EOF'[dockerrepo]name=DockerRepositorybaseurl=https://yum.dockerproject.org/repo/main/centos/7/enabled=1gpgcheck=1gpgkey=https://yum.dockerproject.org/gpgEOF3.安装docker的包shell>sudoyuminstalldocker-engine4.将docker加到服务里面$sud
vue-cli之webpack3构建全面提速优化
前言伴随着vue的全球化,已经各种vue的组件框架越来越完善,从早期的element-ui到vux,iview等越来越多高质量的项目,使用vue进行前端构建已然是一件工程化,模块化,敏捷化的事情在这其中,相信很多人都会选择官方的vue-cli初始化工程模板,然后通过引入第三方组件框架和工具的方式进行开发构建,我个人也十分推崇这种做法。但是vue-cli初始化的项目模板毕竟是面向所有开发者的,在兼容性方面会有一定妥协。相信很多人都已经搜索过各类的webpack构建优化文章,但是很多不是版本太老就是不严谨本文希望能在耗时优化与构建性能提升之间做一个平衡,即花最少的时间,对官方模板做最少的修改下,赚取最大的构建性能提升思路早期版本的vue-cli和webpack2时代,网上流传以下优化配置,但其实新版本的vue-cli和webpack3已经不需要使用ParallelUglifyPlugin替换UglifyPlugin(新版本的UglifyPlugin已经支持且默认开启了多线程并行构建,所以此步骤没有必要)启用webpack3的ScopeH
html、css、scss、js入门
说明有很多关于html、css等前端技术等文档、手册,都不能让一个完全不懂的人对html、css、scss等形成一个整体的认识。HTMLHTML是一门标记语言(HypertextMarkupLanguage)。这门语言与其它的编程语言,例如C/JAVA/GO等非常的不同。HTML是完全标签化的,它由一整套的标签组成,标签与标签之间没有很强逻辑、依赖关系,基本都是平铺的,因此给人的感觉非常的零碎。快速感知一个html文件的格式如下:
Samplepage
Thisisa
vue+webpack在window10环境下搭建及遇到的问题
首先我搭建vue+webpack+vue-strap+vue-route+sass时,我用的是直接在项目中的package.json中的“devDependencies”直接将直接需要的一些插件写上。然后用“npminstall”的方式。1、首先你要安装好nodejs。2、新建项目,在新建的项目vue中打开输入:“npminit--yes”生成package.json。3、在package.json中的“devDependencies”加上直接所需的插件。然后输入:“npminstall”。在package.json可以配置:{/*以下的所有注释在package.json都应该去掉,否则会报错*/"name":"ex1",//名字但绝对不能是webpack"version":"1.0.0","description":"vue-ex",//描述,随便"dependencies":{},"devDependencies":{"babel-cli":"^6.10.1","
ElementUi rules表单验证
ElementUi表单验证可以在pattern中书写正则,并且配合elementUI进行表单验证。pattern属性规定用于验证输入字段的模式。模式指的是正则表达式。rules:{name:[{required:true,message:'请输入用户名',trigger:'blur'},{min:2,max:5,message:'长度在2到5个字符'},{pattern:/^[\u4E00-\u9FA5]+$/,message:'用户名只能为中文'}//{pattern:/^[a-zA-Z]w{1,4}$/,message:'以字母开头,长度在2-5之间,只能包含字符、数字和下划线'}],password:[{required:true,
【Win 10 应用开发】MIDI 音乐合成——音符消息篇
在上一篇中,老周介绍了一些乐理知识,有了那些常识后,进行MIDI编程就简单得多了。尽管微软已经把API封装好,用起来也很简单,但是,如果你没有相应的音乐知识基础,你是无法进行MIDI编程的。这一篇老周将给你讲述一下如何让你的声卡播放一个音符,这会包含两条消息,而且这两条消息是很常用的。1、NoteOn:让MIDI设备(如果没有专业设备,那就是你的声卡)发出某个音符的声音,比如,发出中音3的声音。注意啊,Noteon一旦发送,设备会一直播放这个声音,要想停止播放一个音符,你就要用到下面这条消息,它们是天生的一对。2、NoteOff:关闭某个音符,即停止播放某个音符。咱们先来了解三个很重要的类,跟MIDI设备通信相关的API都在Windows.Devices.Midi命名空间下,封装好的。1、MidiInPort:用来从MIDI输入设备接收消息,所以它公开了一个MessageReceived事件,只要MIDI输入设备发送了消息,就会引发这个事件,这时候你可以处理这个事件,把
vue+element-ui+slot-scope实现可编辑表格
你们公司的产品是不是还在做一个可编辑表格功能?1.咱开发拿到需求大多数是去网上找成型的组件,找不到再看原生的方法能否实现,大牛除外哈,大牛一般喜欢封装组件框架。2.可编辑表格在后台管理系统还是比较常用的,因为比较流行框架element,iview都没有这个应用,所以考虑了两种方法,下面我简单说哈我的两种方法:3.方法一:直接通过element的table组件中的cell-click和cell-dbclick监听表格事件,回调函数有四个参数row,column,cell,event,可以拿这些参数做相应的筛选,然后使用操作dom的方法添加input达到更改值的作用,贴上原生代码:tableDbEdit(row,column,cell,event){console.log(row,column,cell,event);if(column.label!="顺序"){event.target.innerHTML="";letcellInput=do
vue非父子组件间传参问题
最近在使用vue进行开发,遇到了组件之间传参的问题,此处主要是针对非父子组件之间的传参问题进行总结,方法如下:一、如果两个组件用友共同的父组件,即FatherComponent.vue代码<template><child-component1/><child-component2/></template>此时需要组件1给组件2传递某些参数,实现如下:1、父组件给组件1绑定一个方法,让组件1进行回调,组件2接收某个属性,通过改变父组件的数据从而实现组件2的属性值的更新,即父组件<child-component1:callback="child1Callback"/><child-component2:props="child2Props"/>data(){return{child2Props:'';}}child1Callback([args...]){//此处更新了父
来腾讯云开发者实验室 学习.NET Core 2.0
腾讯云开发者实验室为开发者提供了一个零门槛的在线实验平台,开发者实验室提供的能力:零门槛扫码即可免费领取实验机器,支持使用自有机器参与,实验完成后支持保留实验成果;在线WEBIDE支持shell命令操作,支持机器文件操作,支持文件实时编辑,结合交互式教学体验提供了良好的在线实验体验;基于云的真实标准的实验环境,确保实验的普适性;具体内容可以看视频:.NETCore的最重要的一个特性就是跨平台,Windows很多同学都会,学习Linux已经成为一个.NET程序员的必备技能,因此我和腾讯云同事合作在腾讯云上提供了1个CentOS7.2环境下的.netcore2.0实验教程,结合腾讯云上其他Linux的教程,这就是一个非常好的实现在线学习环境。腾讯云在线实验室目前有30个教程,具体参看实验列表。其中有3个实验是.NETCore和Mono相关的,具体访问https://cloud.tencent.com/developer/labs/gallery?tagId=11。从li
优秀的程序员是不用过圣诞节的
向此系列致敬:@简浅优秀的女孩是没有性生活的@逆行君优秀的程序员是不用机械键盘的@NikitaNikitin优秀的程序员都是不用IDE的@司马懿优秀的经济学家是不用电脑的@lxghost优秀的男孩是没有性生活的前几天我面试一个女程序媛,连续几个专业问题她都没答上来。尴尬之余,我问她:「你没有什么理想吗?你现在最渴望的事情是什么?」女孩转悠着大眼睛,不假思索道:「约个小伙伴过圣诞!」真没想到在面试中居然还有这种操作。我问为什么这能成为现阶段最渴望的事情,她反问「你就没有体验过孤独难耐的平安夜吗?寂寞长夜,总想找个人聊聊天,一起思考下人生啊。」好有道理我竟无法反驳。这么能说会道的女孩子,一定是个不可多得的人才!于是,我决定:不录取她。这几年,在科韵路和望京闯来闯去,原本内向型人格的我,做事风格也逐渐变得风风火火,在高强度快节奏下像个工作机器,不带一丝情感绝对执行工作计划。无论是游戏圈,还是互联网圈,这两圈子的程序员各个都能独挡一面,久而久之,我认识了太多优秀的程序员,然后,我发现一个残
给程序员的10条建议,吐血推荐
1.想清楚,再动手写代码刚入行的新手,为了展示自己的能力,拿到需求迫不及待地就开始上手写代码,大忌!2.不交流,就会头破血流不爱说话和沟通,需求都理解错误了,最后做出来才发现,只能加班返工。3.文档没人看,但还是要写文档的作用大部分时候不是用来沟通的,是用来做记录的,大部分需求还是通过口头沟通,但是不写文档做记录,后续就容易扯皮。4.一定要写注释时间久了,你会连自己的代码都看不懂。5.别指望需求会稳定产品需求是根据商业需求不断调整的,改需求是再正常不过的事,别抱怨。6.业务高于技术如果技术不为公司商业做服务,那将毫无价值,公司赚钱才是硬道理。7.不要心存侥幸你隐约感觉会出bug的地方,就一定会出bug。8.自己先测几遍不要写完就扔给测试人员去测,经自己手的东西,要保证质量。9.尽可能自己解决问题遇到不懂的问题,要先尽力解决,别动不动就截个图扔在别人求帮忙,上司和同
读《Microservices》有感
0、写在前面的话在过去的几天,我一直在咀嚼着关于微服务的相关概念,唯恐给自己落下一丝的不明白,也算是给自己采取的扫盲行动。毕竟也是在微服务圈子里混的人了,不把概念吃透,还怎么出去跟人家撕x呢?讲真,身边结识的大牛也没几个,也没有什么高逼格的朋友圈,都是自己一路摸爬滚打过来的,想想几年前的自己,真替自己感到心酸。近来常有文章提到“微服务”还没有一个相对官方的定义。在我看来,就好像是「未婚先孕」。在还没有准备好的时候,突然就横空出世了,而且还相当轰轰烈烈。因此,我就寻思:我是不是该看看一些相对官方一点的文献材料呢?到底有没有定义?微服务到底是以一种什么形态存在着?不用怀疑,《Microservices》当属最原汁原味的官方文献材料了。《Microservices》应该算是我读过最短的论文了,整个过程(不含扩展阅读内容),大约花了我1.5个小时,算是理解了其中心思想了。如果中间不开小差的话,1个小时读完差不多了。1、确实没有明确定义这是我解开的第一个困惑:关于微服务,确实没有官方正式的定义。不仅如此,关于微服务
京东MySQL数据库Docker化最佳实践
京东MySQL数据库Docker化的推进之路,从开始如履薄冰的使用,到目前占比超过70%以上的大规模部署,下面给大家一一讲解这期间的发展历程。一、京东Docker技术发展历程Docker技术的发展为MySQL数据库部署环境能够容器化奠定了基础。京东Docker技术的发展可以归纳为3个阶段:1、初出茅庐京东从2013年开始规划虚拟化平台项目。可以说,一切从零开始,组建团队,架构采用当时主流的OpenStack+KVM架构,在发展初期,只有一些非核心的应用服务开始跑在kvm上。虚拟化研发团队在技术上很快掌握了OpenStack核心代码,当时来说,OpenStack对VM支持可以说是天生的好,在各方面认为成熟的时期,虚拟化团队满怀信心地接入了一个核心业务,不幸的是,正是这个核心业务给虚拟化团队带来了不小的打击,在性能上tp99无法缩短到40ms以内,无法满足应用服务的性能要求,在2013年夏天-2014年夏天研发尝试了各种方法,进行改造优化,最终仍无法达到物理机的性能水平。这一年对于虚拟研发团队来说是压抑、苦闷,也是积攒经验的一年。
Apache+PHP+MySQL+phpMyAdmin环境搭建
最近在学习web服务端开发,一开始是使用wamp的,后来决定自己完整配置一下环境,并把整个过程记录下来。其中,Apache是服务器,php是用来编写服务端的语言,MySQL作为数据库,phpMyAdmin是一个使数据库可视化的工具。下面,把环境搭建的每一步记录下来。1.安装Apache(1)下载一个Apache的安装包并解压:(2)进入conf目录,用记事本或者其他文本编辑器打开httpd.conf,进行以下更改:a.更改目录注意要改为你服务器所处的目录;b.如果要改服务器监听端口的话(不是必要的):c.为了要与php关联起来,在文件最后加上:还有283行(下图中),加上index.php和index.htm(index也是打开服务器的默认页面,换句话来说,要想默认打开一个页面,将它命名为index):(3)在命令行进入Apache24/bin的目录,输入下面的命令进行安装:如果想更改服务器名字,后面添加-n和参数即可。(4)服务器应该已经安装好了,打开服务器有很多种方法,可以
关于 vue 全家桶的四个 “最佳实践”
看到这副黑框眼镜,你是不是想到了什么?对,就是它:Vue.js组件编码规范。读过的同学忽略,没读过的同学有时间的话请花20分钟认真看看,文章的内容都是在认可这篇规范的基础上展开的。另外,本文中的“最佳实践”(注意引号),全都是一家之言,不一定对,欢迎各路大佬讨论拍砖。实践一:如何分类组件组件(component)是vue最核心的概念之一,但是正因为这一概念太过宽泛,我们会在实际开发中看到各种各样的组件,对开发和维护的同学带来了很大的困惑和混乱。这里我把组件分成四类:view顾名思义,view指的是页面,你也可以把它叫做page。它的定义是:和具体的某一条路由对应,在vue-router配置中指定。view是页面的容器,是其他组件的入口。它可以和vuexstore通信,再把数据分发给普通组件。globalcomponent全局组件,作为小工具而存在。例如toast、alert等。他的特点是具备全局性,直接嵌套在root下,而不从属于哪个view。globalcomponent也和vue
ROS中利用V-rep进行地图构建仿真
V-rep中显示激光扫描点在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图。然后在Modelbrowser→components→sensors中找到SICKTiM310Fast激光雷达,拖入场景中:打开脚本参数修改器,可以修改雷达扫描范围(默认为270°),是否显示雷达扫描线(true),以及最大探测距离(默认为4m)这三个参数。地图大小为5m×5m,我们将雷达最大探测距离改为2m将激光雷达放到地图中任意位置,点击仿真按钮可以看到扫描光线(如果电脑比较卡可以将showLaserSegments这个参数设为false,就不会显示扫描线)如下图所示:SICK_TiM310激光雷达在V-rep中是由两个视角为135°的视觉传感器模拟的,这两个视觉传感器可以探测深度信息:双击视觉传感器图标,修改Filter中CoordinateExtraction的参数与传感器X/Y方向分辨率一致。X方向默认值为135,即会返回135个数据点,这里