前端项目工程
背景刚入门前端,没有搭建过大型前端项目工程,觉得模块间引用很不方便,于是研究了下
工程项目结构12345678910111213141516react-ts-ui/├─ packages/├ ├─ react-components-a/├ ├ ├─ src/├ ├ ├ └─ index.tsx├ ├ ├─ package.json├ ├ └─ tsconfig.json├ └─ react-components-b/├ ├─ src/├ ├ └─ index.tsx├ ├─ package.json├ └─ tsconfig.json├─ src/├ └─ index.tsx├─ package.json└─ tsconfig.json
配置react-components-a
./packages/react-components-a/tsconfig.json
123456{ "compilerOptions": { //... "composite": tr ...
Typescript+React+Webpack整合
介绍TypescriptTypeScript是一种由微软开发的开源、跨平台的编程语言。 他是JavaScript的超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程,遵循最新的ES5、ES6规范。
React是一个用于构建用户界面的JavaScript库,起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。React拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。
Webpack是当前前端最热门的前端资源模块化管理和打包工具
项目初始化
初始化项目结构
123mkdir react-ts-uicd react-ts-ui
Typescript文件会放在src文件夹里,通过TypeScript编译器编译,然后经webpack处理,最后生成一个bundle.js文件放在dist目录下。 我们自定义的组件将会放在 src/components文件夹下。
1234mkdir srccd srcmkdir componentscd ..
项目结构
1234react-ts-ui/├─ ...
初试Storybook
介绍StoryBook,独立开发构建前端UI插件、页面的开源工具。可用于Vue、React、Angular的UI组件
安装本例是采用React作为开发框架
自动安装初始化React-App12345# npx create-react-app react-appcd react-app
初始化SotryBook
全局安装storybook
1yarn add -g sb
局部安装storybook
1yarn add sb
12345# 添加storybooknpx sb init# 在开发模式中启动storybookyarn storybook
初始化数据
新增两个文件夹
.storybook
存放storybook的配置文件,main.js、preview.js
src/stories
存放展示组件和数据,storybook初始化Button、Header、Page展示用
手动安装创建项目文件夹react-app并npm初始化
123mkdir react-appcd react-app
添加react相关包
1yarn add -D react re ...
Task的底层实现
async关键字我们将async修饰的方法叫做“异步方法”,但是并不意味着方法是异步执行,也不意味着该方法是异步方法。
源码
12345static async Task MethodAsync(){ await Task.Run(()=>Console.WriteLine("asynchronous run")); Console.WriteLine("synchronous run");}
反编译代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374private sealed class <MethodAsync>d__1 : IAsyncStateMachine{ public int <>1__state; publi ...
基于任务异步编程模式(TAP)
前言TAP是基于Task的异步编程设计模式,
异步编程
async : async关键字修饰的方法都会被视为异步方法,编译器会为方法生成一个对应的状态机
await : await关键字后面代表可等待方法,编译器会转化成TaskAwait去处理异步
async修饰符代表了这个方法是异步方法,编译器会生成状态机。
12345678910//public async Task MethodAsync(){ //do some thing //可等待方法,clr会挂起,等异步方法执行完才会执行剩下的逻辑 await Method1Async(); //do some thing}
异步取消
采用CancellationToken来管理整个取消逻辑
1234567891011121314CancellationTokenSource source = new CancellationTokenSource();CancellationToken token = source.Token;var result await MethodAsyn ...
基于事件异步编程模式(EAP)
前言EAP,全称Event-based Asynchronous Pattern,基于事件的异步模式,它提供了一系列的事件声明与方法,用于实现异步模式的各个阶段。
典型的内置组件为BackgroundWorker组件,本文中我们将使用它来探寻此种模式的执行过程。
异步模型相较于APM的复杂性,基于事件异步编程(EAP)简化了编程,并可以方便得在异步方法过程中通过增加事件来回调,与主线程交互。
基于事件的异步模式的功能
支持取消
支持IsBusy属性
支持完成通知
支持进度报告
支持返回增量结果
官方提供了AsyncCompletedEventArgs、ProgressChangedEventArgs等基础事件参数,可以直接使用或者继承使用,以及AsyncOperation、AsyncOperationManager操作线程上下文的帮助类
官方给出一个简单的组件System.ComponentModel.BackgroundWorker
如何实现异步
[MethodName]Async
[MethodName]Completed
[MethodName]CancelAsync
Eve ...
ASP.NET Core MVC 源码解读-应用程序模型
概念ASP.NET Core MVC 会定义一个 应用程序模型,用于表示 MVC 应用的各个组件。 读取并处理此模型,以修改 MVC 元素的行为方式。 默认情况下,MVC 遵循特定的约定来确定哪些类被视为控制器、这些类上的哪些方法是操作以及参数和路由的行为方式。 自定义此行为以满足应用程序的需求,方法是创建自定义约定,并将其作为全局或特性应用。
模型(Model)和程序提供器(Provider)
对象模型(Model)
ASP.NET Core MVC 应用程序模型包括用于描述 MVC 应用程序的抽象接口和具体实现类。 此模型是 MVC 根据默认约定发现应用的控制器、操作、操作参数、路由和筛选器的结果。 通过使用应用程序模型,修改应用以遵循默认 MVC 行为中的不同约定。 参数、名称、路由和筛选器都用作操作和控制器的配置数据。ASP.NET Core MVC 应用程序模型具有以下结构:
ApplicationModel
控制器 (ControllerModel)
属性 (PropertyModel)
操作 (ActionModel)
参数 (ParameterModel)
...
Ubuntu 16.04安装Nginx
NginxNginx发音的“engine x”是一个免费的开源高性能HTTP和反向代理服务器,负责处理互联网上一些最大的网站的负载。 本教程将概述在Ubuntu 16.04机器上安装和管理Nginx的步骤。
安装NginxNginx的软件包在Ubuntu默认软件仓库中可用。 安装非常简单,只需键入以下命令:sudo apt updatesudo apt install nginx
安装完成后,请检查Nginx服务状态和版本:
服务状态
123456789101112root@vultr:~# sudo systemctl status nginx● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-11-08 18:11:00 CST; ...
Ubuntu 16.04上使用 Let's Encrypt 来保护Nginx
介绍Let’s Encrypt 是由 Internet Security Research Group(ISRG)开发的免费开放证书颁发机构。 今天几乎所有浏览器都信任 Let’s Encrypt 颁发的证书。
在本教程中,我们将提供有关如何使用 Ubuntu 16.04 上的 certbot 工具使用 Let’s Encrypt 来保护您的 Nginx 的分步说明。
准备条件在继续本教程之前,请确保您已满足以下先决条件:
您有一个指向公共服务器 IP 的域名。 在本教程中,我们将使用 example.com。
您按照这些说明安装了 Nginx 。
您有一个适用于您的域的服务器块。 您可以按照本文获取有关如何创建一个的详细信息。
安装 CertbotCertbot 是一个功能齐全且易于使用的工具,可以自动完成获取和更新 Let’s Encrypt SSL证书以及配置Web服务器以使用它们的任务。 certbot 包包含在默认的 Ubuntu 存储库中。
更新软件包列表并安装 certbot 软件包:
sudo apt updatesudo apt install certbot
C ...
V2ray流量伪装
本文转载自V2Ray高级技巧:流量伪装,因为原地址需要翻墙。
前提条件本文假设读者已经具备以下条件:
一台境外的vps,购买可参考:一些VPS商家整理;
一个域名,无备案要求(备案可使用国内CDN加速,但意味着万一有事,被喝茶更容易)。域名购买可参考:Namesilo域名注册和使用教程 或从 适合国人的域名注册商推荐 选购;
为域名申请一个证书,请参考:从Let’s Encrypt获取免费证书 或 从阿里云获取免费SSL证书(伪装域名用来做站推荐使用);
有基本linux技巧,能使用vim/nano等编辑器。
理论上来说,证书不是必须的。但没有tls加持或不做加密,防火墙直接能看出来流量真实意图从而进行干扰,这也是为什么不建议伪装http流量的原因。本文给出的方法采用合法机构签发的证书对流量进行加密,不是做特征混淆得到的TLS流量,从而更难被检测和干扰。
关于伪装技术的选择,V2ray web+websocket+tls 和 V2ray web+http2+tls 常用来做对比。理论上http2省去了upgrade的请求,性能更好。但实际使用中两者没有明显区别,加之某些w ...