当前位置: 首页 > 后端技术 > Node.js

cressa和linecitats

时间:2023-04-03 18:11:01 Node.js

造轮子的时候,写一篇文章,免得忘记。Ctressactressa前段时间迷上了测试。于是看了一些断言库和断言框架的代码。本质上,mocha、ava等断言框架,最初的实现很可能是一个任务执行器。每个断言都是一个任务,执行测试就是执行这个任务队列。mochaavadiffmocha全局引入了一个方法。它本身不支持并发。它以串行模式运行测试,并且易于在节点和浏览器中使用。Ava使用imports,尽可能不影响全局变量,支持并发异步,将文件作为单独的进程进行测试。有效隔离测试文件。今天也有许多断言框架。具体选择还是看个人需求。断言库也有不同的选择,比如expect/chai/should/assert等,大多是不同的测试语句风格。Expect不侵入原型链,对浏览器的兼容性更好。应该=!阅读上面的断言库。以前的实现。expect(test).toBeA('number')这样的断言,可以分为要测试的左值和要期望的右值。中间的谓词表示两者之间的关系。should.js会将should绑定到Object.prototype上,这样在使用vartest={name:'zwkang'}test.should.eql(test)中间的谓词比较是断言库的核心。这样JS就支持中文变量了。是不是说我们可以用中文做一个断言库。汉语博大精深。中间连接词的使用方式相对较多。一个句子有多个表达是很常见的。所以选择一个折中的表达方式,合理的表达断言。cressa可以这样表示。希望({}).is.object;hope(true).是一个真值;注意:mocha会捕获showDiff,然后判断是否彻底比较期望值和待测值。41行ctressa模拟node.0.x在原来的英文结构中实现Error,给字段赋中文别名值。linecitats是一个类似于now.sh的服务器工具。它允许我们在命令行上为资源文件夹创建目录。过程并不复杂。初始化配置,如文件夹位置等。启动服务器压缩文件、中间件文件的缓存。实际上一个服务器就是给客户端提供资源,中间可能有很多资源服务器,比如CDN,缓存服务器等。1.初始配置初始配置很简单,最简单的肯定是直接传入文件夹。初始化2.启动服务器我们这里其实可以直接使用http模块。但是koa对我们的响应body和header进行操作会更舒服。所以这里可以启动基于koa的server。当然快递之类的没问题。3.压缩文件中间件文件压缩压缩文件deflate/gzip是两种常见的压缩方案。常见的压缩协商方案:浏览器通过请求头的Accept-Encoding告知浏览器其支持的压缩方案服务器收到浏览器的请求,选择一种或多种压缩方案。压缩后的资源返回给浏览器,Content-Encoding头表示压缩方案。使用vary字段允许中间缓存服务器缓存不同的Accept-Encoding资源。否则每次请求都是一致的缓存,浏览器可能无法支持解压。4、资源的缓存我们常见的缓存解决方案无非就是这些。强缓存和协商缓存的区别在于是否会向服务器请求资源。强缓存分为Expires和Cache-Control,Cache-Control的优先级大于Expires。一个版本是HTTP1,另一个是HTTP1.1。http1和http1.1最大的区别在于连接是否可以重用。缓存会先检查Expires和Cache-Control,如果存在则判断是否实现了强缓存。如果失败,则向服务器请求资源。这时候协商缓存的作用就是判断资源的生存能力。一种是根据lastModified文件的最后修改时间,一种是根据文件的一些具体内容,比如文件内容的sha1值。lastModified===ctx.get("If-Modified-Since")fileSum===ctx.get("is-none-match")如果Etag和lastModified同时存在,两者必须同时传给返回304状态码。通知浏览器资源没有被修改。这样我们就可以简单的使用强缓存和协商缓存来达到缓存的效果。同时,由于这块是直接用koa中间件写的,建议提供一个方法,方便我们以后作为类库复用。中间件总结:造轮子可以获得知识,输出代码可以变成记录。希望做出一些好的类库。