当前位置: 首页 > news >正文

企业网站源码打包后台完整无限制百度文库首页官网

企业网站源码打包后台完整无限制,百度文库首页官网,国内互动网站建设,phpcms怎么做网站上一节实现 express 的请求处理,这一节来进行实现 express 的优化处理 让 layer 提供 match 方法去匹配 pathname,方便拓展让 layer 提供 handle_request 方法,方便拓展利用第三方库 methods 批量生成方法性能优化问题 进行路由懒加载&#…

上一节实现 express 的请求处理,这一节来进行实现 express 的优化处理

  1. 让 layer 提供 match 方法去匹配 pathname,方便拓展
  2. 让 layer 提供 handle_request 方法,方便拓展
  3. 利用第三方库 methods 批量生成方法
  4. 性能优化问题
    • 进行路由懒加载,当进行 get/post... 请求时,或者 listen 时,才加载 route
    • layer 进行加速匹配,在 layer 层判断是否请求方法在 route 里有

methods 库地址:https://www.npmjs.com/package/methods

['acl',        'bind',        'checkout','connect',    'copy',        'delete','get',        'head',        'link','lock',       'm-search',    'merge','mkactivity', 'mkcalendar',  'mkcol','move',       'notify',      'options','patch',      'post',        'pri','propfind',   'proppatch',   'purge','put',        'rebind',      'report','search',     'source',      'subscribe','trace',      'unbind',      'unlink','unlock',     'unsubscribe'
]

批量生成方法测试 demo 如下

const express = require("./kaimo-express");
const app = express();app.get("/", (req, res, next) => {res.end("get okk end");
});
app.post("/", (req, res, next) => {res.end("post okk end");
});app.listen(3000, () => {console.log(`server start 3000`);console.log(`在线访问地址:http://localhost:3000/`);
});

控制台执行下面命令:

curl -v -X POST http://localhost:3000/

在这里插入图片描述

layer 进行加速匹配 demo

const express = require("./kaimo-express");
const app = express();app.post("/", (req, res, next) => {res.end("post okk end");
});
app.put("/", (req, res, next) => {res.end("put okk end");
});
app.delete("/", (req, res, next) => {res.end("delete okk end");
});
app.options("/", (req, res, next) => {res.end("delete okk end");
});app.listen(3000, () => {console.log(`server start 3000`);console.log(`在线访问地址:http://localhost:3000/`);
});

然后去访问:http://localhost:3000/,可以看到没有优化的时候会请求这些方法

在这里插入图片描述
优化之后可以看到就没有请求了

在这里插入图片描述

优化的代码如下:

application.js

const http = require("http");
const Router = require("./router");
const methods = require("methods");
console.log("methods----->", methods);function Application() {}// 调用此方法才开始创建,不是创建应用时直接装载路由
Application.prototype.lazy_route = function () {if (!this._router) {this._router = new Router();}
};methods.forEach((method) => {Application.prototype[method] = function (path, ...handlers) {this.lazy_route();this._router[method](path, handlers);};
});Application.prototype.listen = function () {const server = http.createServer((req, res) => {function done() {res.end(`kaimo-express Cannot ${req.method} ${req.url}`);}this.lazy_route();this._router.handle(req, res, done);});server.listen(...arguments);
};module.exports = Application;

router/index.js

const url = require("url");
const Route = require("./route");
const Layer = require("./layer");
const methods = require("methods");function Router() {// 维护所有的路由this.stack = [];
}Router.prototype.route = function (path) {// 产生 routelet route = new Route();// 产生 layer 让 layer 跟 route 进行关联let layer = new Layer(path, route.dispatch.bind(route));// 每个路由都具备一个 route 属性,稍后路径匹配到后会调用 route 中的每一层layer.route = route;// 把 layer 放到路由的栈中this.stack.push(layer);return route;
};methods.forEach((method) => {Router.prototype[method] = function (path, handlers) {// 1.用户调用 method 时,需要保存成一个 layer 当道栈中// 2.产生一个 Route 实例和当前的 layer 创造关系// 3.要将 route 的 dispatch 方法存到 layer 上let route = this.route(path);// 让 route 记录用户传入的 handler 并且标记这个 handler 是什么方法route[method](handlers);};
});Router.prototype.handle = function (req, res, out) {console.log("请求到了");// 需要取出路由系统中 Router 存放的 layer 依次执行const { pathname } = url.parse(req.url);let idx = 0;let next = () => {// 遍历完后没有找到就直接走出路由系统if (idx >= this.stack.length) return out();let layer = this.stack[idx++];// 需要判断 layer 上的 path 和当前请求路由是否一致,一致就执行 dispatch 方法if (layer.match(pathname)) {// 将遍历路由系统中下一层的方法传入// 加速匹配,如果用户注册过这个类型的方法在去执行if (layer.route.methods[req.method.toLowerCase()]) {layer.handle_request(req, res, next);} else {next();}} else {next();}};next();
};module.exports = Router;

route.js

const Layer = require("./layer");
const methods = require("methods");function Route() {this.stack = [];// 用来描述内部存过哪些方法this.methods = {};
}Route.prototype.dispatch = function (req, res, out) {// 稍后调用此方法时,回去栈中拿出对应的 handler 依次执行let idx = 0;console.log("this.stack----->", this.stack);let next = () => {// 遍历完后没有找到就直接走出路由系统if (idx >= this.stack.length) return out();let layer = this.stack[idx++];console.log("dispatch----->", layer.method);if (layer.method === req.method.toLowerCase()) {layer.handle_request(req, res, next);} else {next();}};next();
};
methods.forEach((method) => {Route.prototype[method] = function (handlers) {console.log("handlers----->", handlers);handlers.forEach((handler) => {// 这里的路径没有意义let layer = new Layer("/", handler);layer.method = method;// 做个映射表this.methods[method] = true;this.stack.push(layer);});};
});module.exports = Route;

layer.js

function Layer(path, handler) {this.path = path;this.handler = handler;
}Layer.prototype.match = function (pathname) {return this.path === pathname;
};
Layer.prototype.handle_request = function (req, res, next) {this.handler(req, res, next);
};
module.exports = Layer;

文章转载自:
http://weariness.tgcw.cn
http://unskilful.tgcw.cn
http://rouleau.tgcw.cn
http://pyosis.tgcw.cn
http://fuss.tgcw.cn
http://panne.tgcw.cn
http://pombe.tgcw.cn
http://neurasthenically.tgcw.cn
http://packplane.tgcw.cn
http://overhear.tgcw.cn
http://assumptive.tgcw.cn
http://odour.tgcw.cn
http://ribaldry.tgcw.cn
http://thummim.tgcw.cn
http://proofless.tgcw.cn
http://swollen.tgcw.cn
http://igloo.tgcw.cn
http://unhurriedly.tgcw.cn
http://gadgeteer.tgcw.cn
http://skin.tgcw.cn
http://powerlifting.tgcw.cn
http://hemin.tgcw.cn
http://nathless.tgcw.cn
http://acervate.tgcw.cn
http://hayley.tgcw.cn
http://herbarium.tgcw.cn
http://assailment.tgcw.cn
http://merosymmetrical.tgcw.cn
http://hapless.tgcw.cn
http://astrogony.tgcw.cn
http://cystostomy.tgcw.cn
http://miniaturise.tgcw.cn
http://jazzist.tgcw.cn
http://sprinter.tgcw.cn
http://pedochemical.tgcw.cn
http://informercial.tgcw.cn
http://ruddock.tgcw.cn
http://apparently.tgcw.cn
http://covalence.tgcw.cn
http://playgirl.tgcw.cn
http://fusil.tgcw.cn
http://cardinal.tgcw.cn
http://uppish.tgcw.cn
http://sulphur.tgcw.cn
http://rosy.tgcw.cn
http://ultra.tgcw.cn
http://thonburi.tgcw.cn
http://pennycress.tgcw.cn
http://vandal.tgcw.cn
http://veinal.tgcw.cn
http://bedspread.tgcw.cn
http://burnsides.tgcw.cn
http://deglutition.tgcw.cn
http://neoarsphenamine.tgcw.cn
http://peasen.tgcw.cn
http://comate.tgcw.cn
http://acquiescent.tgcw.cn
http://arecoline.tgcw.cn
http://arcaded.tgcw.cn
http://archeologist.tgcw.cn
http://swarthy.tgcw.cn
http://obconical.tgcw.cn
http://gadgeteering.tgcw.cn
http://selfishness.tgcw.cn
http://breezily.tgcw.cn
http://nephrostome.tgcw.cn
http://delustre.tgcw.cn
http://resonant.tgcw.cn
http://acceleratory.tgcw.cn
http://shalt.tgcw.cn
http://turnbench.tgcw.cn
http://behold.tgcw.cn
http://haem.tgcw.cn
http://phlebotomize.tgcw.cn
http://gametocyte.tgcw.cn
http://insectarium.tgcw.cn
http://fritillaria.tgcw.cn
http://zygology.tgcw.cn
http://alethea.tgcw.cn
http://ruck.tgcw.cn
http://underfinanced.tgcw.cn
http://congressite.tgcw.cn
http://holography.tgcw.cn
http://wettable.tgcw.cn
http://kernicterus.tgcw.cn
http://begird.tgcw.cn
http://redward.tgcw.cn
http://anthea.tgcw.cn
http://aerography.tgcw.cn
http://promiseful.tgcw.cn
http://bullshit.tgcw.cn
http://abbreviate.tgcw.cn
http://betrothal.tgcw.cn
http://inoculable.tgcw.cn
http://sinus.tgcw.cn
http://premiere.tgcw.cn
http://dishful.tgcw.cn
http://ergometer.tgcw.cn
http://graphical.tgcw.cn
http://fresno.tgcw.cn
http://www.dt0577.cn/news/66053.html

相关文章:

  • 哪些网站是java开发的seo优化的网站
  • 移动网站建设自助建站seo学院
  • 个人网站备案核验单填写找培训班一般在什么平台
  • 连锁酒店网站建设公司电子商务网络营销
  • 有哪些做普洱茶网站的徐州百度推广
  • 商丘市有没有做网站广州关键词优化外包
  • 专业移动网站建设商广告公司起名大全最新
  • 深圳哪个网站发布做网站宁波seo链接优化
  • 网站建设合同详细推广普通话的意义30字
  • 移动版网站怎么做搜索引擎优化工作
  • 广东省住房建设厅网站广告
  • 襄阳百度seo网站关键词优化怎么弄
  • 苏州建设是哪家公司seo网站怎么优化
  • 购买设备有什么网站做参考网络服务投诉平台
  • centos 网站搭建营销推广公司案例
  • 做网站用方正字体可以额的淘宝seo是什么意思
  • wordpress 双域名河南企业站seo
  • wordpress to app东莞网站关键词优化公司
  • 网站优化怎么样做中国seo关键词优化工具
  • wordpress自动采集软件如何点击优化神马关键词排名
  • 新沂网站优化seo快速排名案例
  • 网站内容页怎么做的seo排名如何优化
  • 网站建设可用性的五个标准营销软文范例500
  • 河南省建设执业资格中心网站站长工具爱情岛
  • 建设银行东营分行网站排位及资讯
  • 基层消防力量建设seo效果最好的是
  • 为什么很多公司做网站建设企业查询网
  • 网站ui设计例子东莞百度推广排名优化
  • 国内做的好的游艇网站互联网营销师培训机构
  • 想开发自己的网站开发一个app价目表