V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  wdhwg001  ›  全部回复第 19 页 / 共 62 页
回复总数  1227
1 ... 15  16  17  18  19  20  21  22  23  24 ... 62  
希望可以滑条调整夜间模式的对比度。

另外一些菜单文字和图标的对比度在夜间模式下不统一。

以及,WebView 有右滑白屏的 Bug,是这样的:当上一页面离开时的 WebView 高度和当前的 WebView 高度不一致的时候,右滑会出现白屏,这里需要单独对这个 WebView 的 Bug 做调整。

还有一些界面交互上可以明显看得出想学 ios,但是却在许多小的地方是反直觉的,比如阅读模式下滑不能关闭,比如一个有 Grip 的设置栏不能上下滑等等。

另外基于私心,我比较希望地址栏编辑时可以左右拖拽滚动,并且拥有语法高亮。
2020-10-16 00:47:13 +08:00
回复了 DeWhite 创建的主题 硬件 感觉大家是不是都不知道 anywhere3 其实已经上市了,双口 typeC。
滚轮不支持倾斜,需要配合侧键组合才能实现横向滚动。
2020-10-09 12:41:09 +08:00
回复了 laike9m 创建的主题 Python 宣传一下 Cyberbrain,真正解放程序员的 Python 调试工具
async 的支持怎么样?
2020-10-07 21:04:29 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 但是也同样无法解决闭包不可靠的问题啊,你只能规定禁止 scope 深拷贝,并且规定禁止 scope["session"] = {}这样的操作。
2020-10-06 19:25:13 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 但是你的中间件需要调用内层的 Application,而 send 则是一层一层传递下去,直到最后一层 Application 才调用这个 callable 的,所以你不应该在中间件里直接执行这个 send,而是要把它传递到更深层的 ASGI Application 里:

```python
async def __call__(self, scope, receive, send):
session = {}
scope["session"] = session

await self.app(scope, receive, send)
```

这样一来,你就只能存一个 scope 的闭包:

```python
async def __call__(self, scope, receive, send):
session = {}
scope["session"] = session

async def send_wrapper(message):
# do something to store session
scope["session"]["saved"] = True # 这里的闭包是不可靠的
await send(message) # 但是这里是可靠的

await self.app(scope, receive, send_wrapper)
```

但是就像 ASGI 标准里描述的那样,Scope 是会被下一层 Application 复制的,这就使得内层如果真的复制了 Scope 的话,外层对 Scope 的闭包引用读取到的只会是脏数据。我仔细思考过了,觉得这里如果 ASGI 不做调整,ASGI 的实现也不保存 Application 栈的话(因为像 Django 的 Daphne 一样保存栈是很消耗资源的),这里应该是没有解决方案的。

可如果 ASGI 提供一个单例的上下文的话:


```python
async def __call__(self, scope, receive, send):
session = {}
scope["session"] = session # 把它存到一个请求期间的上下文变量,不一定是 Scope

async def send_wrapper(message, scope): # 这里接收一个请求期间的上下文变量,不一定是 Scope
# do something to store session
scope["session"]["saved"] = True # 这里就不是闭包而是普通地用参数了,所以是可靠的
await send(message) # 这里本来就是可靠的

await self.app(scope, receive, send_wrapper)
```

或者,如果修改 ASGI 的规定,使得 Scope 由一个 immutable 变为一个 mutable single instance 的话,任何一个地方都可以取到一个可靠的 Scope 的引用,也就不会存在复制的问题了。
2020-10-05 23:58:17 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 我试了一下,结果倒是挺遗憾的,Python 里的正则的性能与捕获组的数量是呈线性关系的,与捕获组之间的包含关系无关。所以,将树展开成正则组的操作应该是仅在树的同级节点的时候可以通过合并获得性能提升,超过同级的情况下就是 Python 的语言性能和正则引擎的执行效率之间的撕逼取舍了。

我个人不倾向于使用换语言的方式实现这个,因为你似乎还没完全榨干 Python 呢。

将上下文传入 receive 和 send 是有意义的,比如不然的话,你怎样使用纯 ASGI 中间件实现一个干净的 Session 呢? Session 的读取发生在__call__期间,而存储和 cookie 的更新则发生在 send 期间,而这之间则需要一个上下文去保存 Session 中的信息吧。
2020-10-05 19:30:33 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
以及好像跑题了,说回来的话,我注意到你的实现实际上是个巨大的正则树。那么这样的话,这个正则树是否可以合并为一个巨大的单一正则以实现更大的性能提升和更少的内存占用呢?
2020-10-05 19:06:37 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 不仅如此,Starlette 早期是直接拿 Scope 当 Context 用的,Auth 、Session 、App 实例一类的都塞进 Scope 里,后来又有了 app.state 和 Request.state 两种 state,但是受限于 ASGI 标准,没有任何办法可以在中间件里访问到这个 Request.state…

所以如果真的玩 ASGI 标准的话,倒不如把这件事扔上台面,把 scope 变成一个 mutable dict 的单例,然后决定一下上下文是存到哪,是新开一个 dict 叫 state 或者 context,还是直接就存到 scope 里。

然后还得决定一下怎样让这个上下文在整个请求周期内都是可用的,怎样把它传到 receive 和 send 里。
2020-10-05 17:23:58 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran 老实说比较底层的部分每个框架的实现都有问题,比如没有一个框架和 Server 实现了 Websocket 的 Set-Cookie,明明 2.1 标准里就有了…这就扯远了。

但是 Socket 的问题我感觉不是特别大,因为目前其实也不推荐裸跑 ASGI 或者用 ASGI 传静态文件,大家都是外面套一个 Nginx 用的。

ASGI 还有一个问题就是它只是个纸面标准,没有针对每一项纸面规定的测试…也是比较遗憾了。
2020-10-05 17:16:18 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran ASGI 标准要求 Scope 是不可变的,每次修改都要复制 Scope 以避免污染上层 Middleware:
https://asgi.readthedocs.io/en/latest/specs/main.html#middleware

但是这样一来,Session 实际上是无法以纯 ASGI Middleware 可靠实现的,因为它需要一个上下文,在请求传至 Router 之前初始化上下文中的 Session (从 Cookie / 数据库中读取 Session 放入上下文),在 Endpoint 处理完之后将上下文中 Session 的最终状态进行存储。

而 ASGI 中不存在这样一个上下文存储,所以 Starlette 才会把 Scope 当作上下文,而最终的 Scope 又不会被传递至 send,就导致了一系列问题。
2020-10-05 13:22:32 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
@abersheeran ASGI 标准我感觉没什么前途,标准已经推到 3.0 了,但是各个实现都还很不完整,设计上也有点问题。

举例子说的话,比如 scope 明显应该是一个单例,但是 ASGI 里却将 Scope 定义为了一种 immutable,并且是在中间件之间可随意复制的。这埋下的一个巨坑就是对于一个中间件来说,根本没办法获取到最终的 Scope 引用,从而不能在 send 期间访问到一个稳定的上下文。

也就是说,这个半残的中间件机制甚至连一个稳定的,不需要在请求里操心存取的 Session 都实现不了。Starlette 里的 Session 实现是有坑的,他们把 Session 存到了 scope 里,违背了 immutable,然后使用了 ASGI 明确声明不可靠的闭包 scope 引用去在 send 期间检查和存储 scope 中的 session,这就使得 scope 一旦被复制,session 的管理就变得完全不可靠了。

而这根本就是一个 ASGI 标准的问题,因为基于性能的考量,一个上下文状态本就应该是单例,可变,不可复制的。
2020-10-04 23:44:13 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
所以总之就是,如果有心力的话,可以考虑把实际的性能对比拿出来,提一下 PR,测量点应该主要有这几个:

模拟一个简单的路由情况,提供树实现和遍历实现的性能对比(非 WSL 的 Linux 下内存、吞吐、延迟)。

模拟一个常规的大型网站的路由情况,提供性能对比。

模拟一个深层次的路由情况,提供性能对比,看一下你的实现是否会在深层次的时候性能跑不过遍历。

模拟一个树被压成单层扁平的路由情况,提供性能对比,看一下你的实现在做普通遍历的时候性能会不会跑不过当前的遍历实现。

如果能实现全面的性能提升,并且代码风格良好的话,我觉得 encode 社区会很乐意接纳的。但如果因为误解而没有心力了的话也不勉强。
2020-10-04 23:34:55 +08:00
回复了 abersheeran 创建的主题 Python 第一个基于 Radix Tree 进行路由查找的 Python web 框架发布了!
我仔细翻了一下你之前的讨论(在 7 月 13 日前后),实际上是没吵起来的。

社区成员 erewok 表达的意思仅仅是之前关于这件事就有讨论了,所以更希望有实际的实现和性能对比,而不是在要求一项功能。并且后面的意见也是希望能开 PR 出来,用性能实测数据说话。

Tom 的意见是简洁优先,但没有明确拒绝一项性能改善。所以你注释充足结构清晰,拿代码说话的话也是可以 PR 的,性能始终是 Encode 社区的很重要的考量。
2020-09-30 11:59:13 +08:00
回复了 myevery 创建的主题 程序员 求本站编辑器实现原理
“大哥哥,你的作业里的 dx 是什么意思呀,是解方程吗,好厉害!”
↑大约就这种欲言又止的感觉…
2020-09-26 15:06:07 +08:00
回复了 wensonsmith 创建的主题 问与答 菜单名称后面为什么要加三个点?
@geelaw
App Store 是没有迷惑点的,你试着把“App Store...”在脑内替换成“apt...”就可以理解了。
System Preferences 是一个约定俗成,即所有的综合设置入口都需要写成“Settings...”的形式。
2020-09-22 15:28:05 +08:00
回复了 wdhwg001 创建的主题 奇思妙想 为什么不能做一个公共 PT 呢?
@xgfan 但是 PT 网络与充钱加速是不合并的,也就是说充了钱并不能享用 PT 网络给予的加速,想使用 PT 网络还是只能依靠贡献值的积累。
2020-09-22 15:26:34 +08:00
回复了 wdhwg001 创建的主题 奇思妙想 为什么不能做一个公共 PT 呢?
@lvybupt 钱来自于订阅服务啊,两种加速是可以共存的,对于移动端用户和不喜欢挂机的用户来说,直接购买 VIP 加速就可以了,你可以用手游里的钻石和点券两种货币的想法去理解它。
2020-09-22 14:39:21 +08:00
回复了 wdhwg001 创建的主题 奇思妙想 为什么不能做一个公共 PT 呢?
@kop1989 但其实也未必,因为这样的运行是很积累社区口碑的,同时付费项也比单一会员制更明确,VIP 加速流量的单价也可以更高。
2020-09-22 14:37:17 +08:00
回复了 wdhwg001 创建的主题 奇思妙想 为什么不能做一个公共 PT 呢?
@lengyihan 我这边的定义的话,它依然属于一个 PT,因为它拥有自己的规则,并且是独立于 BT 去运行的。
2020-09-22 03:47:26 +08:00
回复了 hikaruchang 创建的主题 程序员 列举一下迅雷「子公司」玩物科技的一二事
我一直有个疑问,好端端地做一个不作恶的大众 PT 不好吗?普通地让用户进行多线程下载,然后让用户挂机做自动 CDN 获得分享率,根据分享的总流量去一比一地获得加速,氪金用户则直接按流量计费购买商用 CDN 加速,然后挂机分享率则使用 QOS 和进程识别确保不干扰上网和游戏,这样不香吗?
1 ... 15  16  17  18  19  20  21  22  23  24 ... 62  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1043 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 22:09 · PVG 06:09 · LAX 14:09 · JFK 17:09
Developed with CodeLauncher
♥ Do have faith in what you're doing.