koa 基于Node.js的web框架,koa1只兼容ES5,koa2兼容ES6及以后. const Koa = requier("koa"); const koa = new Koa(); //koa.use注册中间件(一个用来处理请求/修饰向服务器发起的请求的异步函数,参数为ctx和next) //每一个请求都会从上往下执行,当一个中间件调用 next() 则该函数暂停并将控制传递给定义的下一个中间件.当在下游没有更多的中间件执行后,堆栈将展开并且每个中间件恢复执行其上游行为. k…
前端知识点回顾篇--是我当初刚转行为了面试而将自己学过的前端知识整理成的一份笔记,个人目的性很强,仅供参考. doctype 有什么用 doctype是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义(DTD)来解析文档. 浏览器本身分为两种模式,一种是标准模式,一种是怪异模式(混杂模式),浏览器通过doctype来区分这两种模式,doctype在html中的作用就是触发浏览器的标准模式,如果html中省略了doctype,浏览器就会进入到Quirk…
早期数据渲染的几种方式 在模板引擎没有诞生之前,为了用JS把数据渲染到页面上,诞生了一系列数据渲染的方式. 最最基础的,莫过于直接使用DOM接口创建所有节点. <div id="root"></div> <script> var root = document.getElementById('root'); var title = document.createElement('h1'); var titleText = document.creat…
前面的话 在大多数的项目组中,开发一个Web程序都会出现这样的流程:计划文档提交之后,前端工程师制作了网站的外观模型,然后把它交给后端工程师,它们使用后端代码实现程序逻辑,同时使用外观模型做成基本架构,然后工程被返回到前端工程师继续完善.就这样工程可能在后端工程师和前端工程师之间来来回回好几次.由于后端工程师不干预任何相关HTML标签,同时也不需要前端代码和后端代码混合在一起.前端工程师只需要配置文件,动态区块和其他的界面部分,不必要去接触那些错综复杂的后端代码.因此,这时候有一个很好的模板支持…
前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进.文字环绕以及正则表达式都可以直接使用,如果觉得不够,SMARTY还有很强的扩展能力,可以通过插件的形式进行扩充.另外,Smarty也是一种自由软件,用户可以自由使用.修改,以及重新分发该软件.本文将详细介绍Smarty模板引擎 概述 Smarty是一个php模板引擎.更准确的说,它分离了逻辑程序和外…
art-template 模板引擎介绍 art-template 是一个简约.超快的模板引擎. 它采用作用域预声明的技术来优化模板渲染速度,从而获得接近 JavaScript 极限的运行 性能,并且同时支持 NodeJS 和浏览器. art-template 支持 ejs 的语法,也可以用自己的类似 angular 数据绑定的语法 官网地址,中文文档 在 Koa 中使用 art-template 模板引擎 首先安装art-template中间件 npm install --save art-te…
Promise Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果. Promise对象代表一个异步操作,有三种状态: pending(进行中).fulfilled(已成功)和rejected(已失败). 只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态. 回顾ES5中若要实现以下异步编程逻辑,将会形成回调地狱(回调不断嵌…
JavaScript异步机制 来源:https://www.cnblogs.com/zhaodongyu/p/3922961.html JavaScript是单线程异步执行的,单线程意味着代码在任务队列中会按照顺序一个接一个的执行.异步代表JavaScript代码在任务队列中的顺序并不完全等同于代码的书写顺序,比如事件绑定.Ajax.setTimeout()等任务的发生时间是"不可被预期"的. 页面加载时,JavaScript引擎会顺序执行页面上所有JavaScript代码,优先执行同…
flex布局 来源: http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器".它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目". 容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis).主轴的开始位置(…
React.js 编写react需要安装的三个开发环境下的模块 babel 解析JSX react 实现ui用户界面 react-dom 处理dom JSX:在JavaScript里面写html代码(最好用圆括号包起来,单标签要闭合),在html代码中用插值符号{}可以写js代码 ReactDOM.render(element, container, cb) 往容器中渲染一个组件element 循环返回dom的时候要加上key属性,但这个属性不能在props中取到 添加css用style属性=一…
mongodb和mongoose模块 数据库 数据库有关系型数据库(MySQL)和非关系型数据库(mongodb),两者的语法和数据存储形式不一样. mySQL 关系型数据库 类似于表格的形式,每一条数据都是以id为标识 table thead name sex age id tbody May female 18 1 Simple male 25 2 mongodb 非关系型数据库 集合,相当于表的概念,Bson,一条数据代表一个文档(数据的基本单位) { id : name : May ag…
Node.js 事件循环机制 setImmediate()是将事件插入到事件队列尾部,主线程和事件队列的函数执行完成之后立即执行setImmediate指定的回调函数,和setTimeout(fn,0)的效果差不多 process.nextTick()方法可以在当前"执行栈"的尾部-->下一次Event Loop(主线程读取"任务队列")之前-->触发process指定的回调函数.也就是说,它指定的任务总是发生在所有异步任务之前,当前主线程的末尾. 事件…
jQuery jQuery的实现原理 参考:https://blog.csdn.net/zhouziyu2011/article/details/70256659 外层沙箱和命名空间$ 为了避免声明了一些全局变量而污染,把代码放在一个"沙箱执行".jQuery具体的实现,都被包含在了一个立即执行的匿名函数构造的闭包里面,然后只暴露 $ 和 jQuery 这2个变量给外界: (function(window, undefined) { // 用一个函数域包起来,就是所谓的沙箱 // 在这…
fetch 在原生ajax+es6promise的基础上封装的一个语法糖,返回promise对象. fetch(url, initObj) .then(res=>res.json()) .then(data=>{ //这里得到返回的json对象,可进行操作 }) .cateh(err){ console.log(err); }; //initObj { body: JSON.stringify(data), // must match 'Content-Type' header cache:…
CORS(cross origin resource sharing)跨域资源共享 来源:http://www.ruanyifeng.com/blog/2016/04/cors.html 它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制. 简介 CORS需要浏览器和服务器同时支持.目前,所有浏览器都支持该功能,IE浏览器不能低于IE10. 整个CORS通信过程,都是浏览器自动完成,不需要用户参与.对于开发者来说,CORS通信与同源的AJAX通信…
Ajax(Asynchronous JavaScript and XML) 这种技术就是无须刷新页面即可从服务器中取得数据,但不一定是XML数据.在原生方法上,Ajax技术的核心是XMLHttpRequest对象(简称XHR). XHR用法 open(method, url, isAsync) 开启一个method类型的请求,url是相对于当前页面(也可以是绝对路径),open方法并不会真正发送请求,而只是启动一个请求已备发送. send(data) 接收作为请求主体发送的数据,如果不需要必须传…
async函数 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是 Generator 函数的语法糖 什么是语法糖? 意指那些没有给计算机语言添加新功能,而只是对人类来说更"甜蜜"的语法.语法糖往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读.不过其并没有给语言添加什么新东西 async函数使用时就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已 async函数对 Generato…
DOM 常用的DOM获取方法: node.children 返回子元素节点,没有兼容性问题,动态获取 node.parentNode 获取父节点,没有兼容性问题 node.offsetParent 获取最近的定位父节点 node.tagName 获取元素节点的标签名 常用的DOM操作: document.createElement("TagName") 创建一个元素节点 parentNode.appendChild(node) 在父节点内容的最后添加子节点 parentNode.ins…
Iterator 迭代器是一种接口.是一种机制. 为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署 Iterator 接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). Iterator 的作用有三个: 为各种数据结构,提供一个统一的.简便的访问接口: 使得数据结构的成员能够按某种次序排列: 主要供for...of消费. Iterator本质上,就是一个指针对象. 过程是这样的: (1)创建一个指针对象,指向当前数据结构的起始位置. (2)第一次调用指针对象的next方法,…
Symbol 为什么需要symbol ES5里面对象的属性名都是字符串,如果你需要使用一个别人提供的对象,你对这个对象有哪些属性也不是很清楚,但又想为这个对象新增一些属性,那么你新增的属性名就很可能和原来的属性名发送冲突,显然我们是不希望这种情况发生的.所以,我们需要确保每个属性名都是独一无二的,这样就可以防止属性名的冲突了.因此,ES6里就引入了Symbol,用它来产生一个独一无二的值. symbol是什么 Symbol是ES6引入的一种原始数据类型,接受一个字符串参数,来对产生的Symbol…
数组的冒泡.选择和插入排序法 冒泡排序法(从小到大) function bubble(arr){ for(let i = 0 ;i<arr.length-1;i++){ for(let j = i+1;j<arr.length;j++){ if(arr[j]<arr[i]){ let temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } return arr; } 选择排序法(从小到大) function select(arr){ fo…
BFC布局(Block Formatting Contexts) 来源:https://www.cnblogs.com/lzbk/p/6057097.html 块级格式化上下文是页面中的一块渲染区域,它决定了其子元素将如何定位,一起和其他元素的关系和相互作用. BFC的特性 内部的box会在垂直方向,从顶部开始一个接着一个地放置 box 垂直方向的距离由margin(外边距)决定.属于同一个BFC的两个相邻box的margin会发生叠加(垂直方向上的外边距合并问题) BFC的区域不会与float…
JavaScript的解析顺序 第一阶段:编译期 寻找关键字声明的变量.函数声明的变量,同时会对变量进行作用域的绑定 var声明的变量,在编译期会赋一个默认值undefined,变量提升的特性. ES6及以后所有的变量申明方式都不具备变量提升,在声明之前调用会报错,这个现象在语法上称为暂时性死区TDZ. 如果一个变量同时被var声明又被function声明,则变量提升的值以函数为准(函数为一等公民).但最后是以赋值的数值作为变量的最终值. console.log(a); //函数a consol…
DOM特殊元素获取 document.documentElement //HTML标签 document.head //head标签 document.title //title标签 document.body //body标签 typeof 的那些坑 typeof null 返回Object, 然而null是基本类型值而不是引用类型值,null == null 是成立的. typeof NaN 返回number,NaN是一个自身不等于自身的数值类型. typeof Symbol 返回funct…
来源:https://www.cnblogs.com/shuiyi/p/5597187.html 行框的概念 红色(line-height)为行框的顶部和底部,绿色(font-size)为字体的高度,蓝色为基线(字母x底部所在的水平线) 行内元素: 行内块元素: (左)在流内内容的情况下,内联块元素的基线是正常流中最后一个内容元素的基线(左边的例子).对于这最后一个元素,它的基线是根据它自己的规则找到的. (中)在流内内容但内联块元素有overflow:hidden属性的情况下,基线是内联块元素…
1.app.js /** * ejs 模板引擎的使用: * 1.npm install koa-views --save * 2.npm install ejs --save * 3.var views = require('koa-views'); * app.use(views(__dirname, { extension: 'ejs' })) * 4.await ctx.render('index') * * 注意:我们需要在每一个路由的render里面都要渲染一个公共的数据 * 公共的数…
最近做了JS模板引擎测试,拿各个JS模板引擎在不同浏览器上去运行同一程序,下面是模板引擎测试数据:通过测试artTemplate.juicer与doT引擎模板整体性能要有绝对优势: js模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注,从而出现在各大型网站 Twitter.淘宝网.新浪浪微博.腾讯QQ空间.腾讯微博等.那么他们各自性能怎么样?请看下面.   通常模板引擎 baiduTemplate(百度)\artTemplate(腾讯)\juicer…
我之前在写一个输入联想控件的时候,改过好几个版本,每个版本不是因为性能不好就是因为代码凌乱而被推翻,最后用了understore模板引擎,效果有明显改善.整好这两天在研究互联网技术架构,发现很多的开发框架前端都是使用js模板引擎,感悟真的是大道至简,殊途同归啊,哈哈. 关于为什么使用js模板引擎,在博客园发现园友的一片文章<js模版引擎handlebars.js实用教程——为什么选择Handlebars.js>,该文已经做了详细解答.下面内容转自该文: 据小菜了解,对于java开发,涉及到页面…
随着web的发展,仅一门语言或者一种技术已经不能满足需求,分层架构显得越来越重要.在大型架构中,从来不会简单地应用php从头到尾实现一个完整的mvc架构.可能底层是c/java的支撑,负责密集运算和yu与数据库的交互.表现层用javascript+PHP完成,js负责前端大部分业务逻辑he和数据发送,数据经由PHP送达后端.比如淘宝,使用PHP作为前端,java是主要的后端语言,实现密集运算和数据中心.再如百度,主要逻辑和数学运算由C完成,PHP只是前端语言,并且在代码中大量使用C完成PHP扩展…
前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码. 个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离. 为了理解模板引擎原理(zhaungbi),所以我折腾了一个简化版的模板引擎.可以实现数据绑定,三元表达式, for 循环和 if 判断. 如何实现三元表达式, for 循环和 if 判断,将在下一篇介绍. HTML 模板 下面是我定义好的html 模板字符串. var template = ` <div> &l…