小编mar*_*lin的帖子

我对换能器的理解是否正确?

让我们从定义开始:A transducer是一个函数,它接受一个reducer函数并返回一个reducer函数.

A reducer是一个二元函数,它接受累加器和值并返回累加器.一个reducer可以用一个reduce函数执行(注意:所有函数都是curry但是我已经把它和它的定义pipe以及compose为了便于阅读 - 你可以在现场演示中看到它们):

const reduce = (reducer, init, data) => {
  let result = init;
  for (const item of data) {
    result = reducer(result, item);
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

随着reduce我们可以实现mapfilter功能:

const mapReducer = xf => (acc, item) => [...acc, xf(item)];
const map = (xf, arr) => reduce(mapReducer(xf), [], arr);

const filterReducer = predicate => (acc, item) => …
Run Code Online (Sandbox Code Playgroud)

javascript functional-programming transducer

10
推荐指数
1
解决办法
196
查看次数

默认情况下缓存控制是公共的还是私有的?

如果我不指定publicprivate在指令中Cache-Control标头中默认行为是什么?它是否可以被代理服务器缓存?

caching cache-control

5
推荐指数
1
解决办法
899
查看次数

Vue.js 3:当 `data()` 转换为 `setup()` 时,`v-model` 失去反应性

考虑这个基本示例,其中我们有一个input和 ap显示输入的值:

const App = {
  data() {
    return {
      message: "hello world!"
    };
  }
};


Vue.createApp(App).mount('#root');
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
  <input v-model="message"/>
  {{ message }}
</div>
Run Code Online (Sandbox Code Playgroud)

当您更改输入文本时,它会反映在p. 但是,如果您替换data()setup(),则对 的更改input不再反映在p

const App = {
  setup() {
    return {
      message: "hello world!"
    };
  }
};


Vue.createApp(App).mount('#root');
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
  <input v-model="message"/>
  {{ message }}
</div>
Run Code Online (Sandbox Code Playgroud)

一个简单的解决方法是refmessage

const App = {
  setup() { …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vue-component vuejs3 vue-composition-api

5
推荐指数
1
解决办法
226
查看次数

Vue:如何在不失去反应性的情况下合并两个反应性对象

考虑这个说明性示例:

const useFeatureX = () => {
  return Vue.reactive({
    x1: 2,
    x2: 3
  });
};

const useFeatureY = () => {
  return Vue.reactive({
    y1: 1,
    y2: 2
  });
};

const App = {
  setup() {
    return { ...useFeatureX(), ...useFeatureY() };
  }
};

Vue.createApp(App).mount("#root");
Run Code Online (Sandbox Code Playgroud)
input {
  max-width: 50px;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
  x1 + x2: <input type="number" v-model="x1"/> + <input type="number" v-model="x2"/> = {{ +x1 + +x2 }} <br/>
  y1 + y2: <input type="number" v-model="y1"/> + <input type="number" v-model="y2"/> = …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vuejs3 vue-composition-api

5
推荐指数
1
解决办法
788
查看次数

自定义事件会在 Vue 3 中沿着组件链向上传播吗?

自定义事件没有在 Vue 2 中传播。Vue 3 中是否有变化,因为如以下示例所示,自定义事件看起来像在组件链中冒泡:

const Comp1 = {
  template: `
    <button @click="this.$emit('my-event')">click me</button>
  `
}

const Comp2 = {
  components: {
    Comp1
  },
  template: `
    <Comp1/>
  `
}

const HelloVueApp = {
  components: {
    Comp2
  },
  methods: {
    log() {
      console.log("event handled");
    }
  }
}

Vue.createApp(HelloVueApp).mount('#hello-vue')
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@next"></script>

<div id="hello-vue" class="demo">
  <Comp2 @my-event="log"/>
</div>
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vuejs3

5
推荐指数
1
解决办法
2507
查看次数

V8的点火真正起什么作用?

https://v8.dev/docs/ignition上,我们可以看到:

Ignition是使用TurboFan后端编写的基于寄存器的快速底层解释器

https://docs.google.com/document/d/11T2CRex9hXxoJwbYqVQ32yIPMh0uouUZLdyrtmMoL44/edit?ts=56f27d9d#

Ignition项目的目的是为V8构建一个解释器,该解释器执行一个低级字节码,从而使运行一次或非热码以字节码形式更紧凑地存储。

解释器本身由一组字节码处理程序代码片段组成,每个片段均处理特定的字节码,并分派给下一个字节码的处理程序。这些字节码处理程序

为了将函数编译为字节码,将对JavaScript代码进行解析以生成其AST(抽象语法树)。BytecodeGenerator遍历此AST,并根据需要为每个AST节点生成字节码。

生成字节码处理程序的图形后,该图形将通过Turbofan管道的简化版本传递,并分配给解释器表中的相应条目。

因此,似乎点火工作是将BytecodeGenerator生成的字节码转换为字节码处理程序,然后通过执行Turbofan

但在这里: 在此处输入图片说明

和这里: 在此处输入图片说明

您可以看到是点火产生了字节码。

此外,在此视频中https://youtu.be/p-iiEDtpy6I?t=722点火被称为基准编译器。

那是什么 基准编译器?字节码解释器?AST转换为字节码转换器?

该图像似乎是最合适的: 在此处输入图片说明

在这里,点火只是一个解释器,之前的一切都是无名的字节码生成器/优化器。

在此处输入图片说明

javascript google-chrome v8

4
推荐指数
2
解决办法
331
查看次数

npm运行如何工作?

输入时会npm run <command>怎样?是<command>传递给sh shell的方法,例如:

sh -c <command>
Run Code Online (Sandbox Code Playgroud)

在外壳程序中添加了其他局部变量,即node_modules/.bin?的路径。

我认为npm仅可通过使用node在JavaScript Universe中工作,但似乎还有很多事情要做。如何&&&被处理的?是globstar安全使用?

shell sh node.js npm

3
推荐指数
1
解决办法
1409
查看次数

为什么返回类型“null”(或任何其他类型)可以分配给返回类型“void”?

如您所知,在严格模式下只能undefined分配给 type void。所以如果你尝试:

declare let _void: void;
_void = null; // error
_void = 5; // error
Run Code Online (Sandbox Code Playgroud)

你会得到错误

[type]不可分配给 void 类型。

但如果您尝试将此作为返回类型,则一切正常:

declare let voidReturn: () => void;
declare let nullReturn: () => null;
declare let numReturn: () => number;

voidReturn = numReturn;
voidReturn = nullReturn;
Run Code Online (Sandbox Code Playgroud)

void此处的行为就像any它可以容纳任何类型(但它只能以一种方式工作 - 分配void给任何其他返回类型会引发错误)。

这是为什么?这是一个错误还是一个功能?

typescript

3
推荐指数
1
解决办法
2026
查看次数

关于 http/2 的文章中关于双向和全双工的混淆

一些描述 http/2 的文章称赞它是双向和全双工的。

AFAIK 双向意味着通信是双向的,所以双工本质上是双向的,是吗?

双工可以由一个在某些特定点反转的单工流创建(半双工),也可以创建为两个相反的单工流(全双工)。

也许双向是关于如何发起消息交换?在 http/1 中,只有客户端可以通过向服务器发送请求来启动,服务器在其中返回响应。在 http/2 中,服务器可以发送(推送)一些资源而无需明确要求它。但是我们可以Server-sent events在http/1.1中使用(也就是说,在客户端和服务器上都做了一些配置后,如果它愿意,服务器可以推送消息,但它仍然是通过http/1.1协议)。

当您考虑它时,您可能会注意到 http/1 也是双向和全双工的(因为在半双工中流水线是不可能的)。所以从 http/2 的角度来看这里没有变化。

发生变化的是 http/1 要求响应按照请求的确切顺序到达。http/2 通过流和多路复用提升了这一点。

duplex bidirectional http2

2
推荐指数
1
解决办法
3168
查看次数

Vue 3:计算属性不跟踪其在组合 API 中的依赖关系

考虑这个说明性示例:

const App = {
 setup() {
  const name = Vue.ref("");
  let firstTime = true;
  const message = Vue.computed(() => {
    if (firstTime) {
      firstTime = false;
      return "Welcome stranger";
    }
    return `Hello ${name.value}`;
  });
  
  return {
    name,
    message
  }
 }
};

Vue.createApp(App).mount("#root");
Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue@next"></script>
<div id="root">
  name: <input v-model="name"/> <br/>
  message: {{ message }}
</div>
Run Code Online (Sandbox Code Playgroud)

如您所见,message存储一个计算值,该值应该跟踪更新,name但它不是。
为什么会这样以及如何解决?

javascript vue.js vue-component vuejs3 vue-composition-api

2
推荐指数
2
解决办法
1654
查看次数

对被 CORB 阻止的 html 资源获取的 no-cors 不透明请求

我正在尝试 从using模式中获取html位于 url 的文件,但响应被 CORB(跨源读取阻塞)阻止。https://sub.app.test/htmlhttps://app.testno-cors

fetch('https://sub.app.test/html', { mode: 'no-cors'})
Run Code Online (Sandbox Code Playgroud)

为什么?

fetch cors cross-origin-read-blocking

1
推荐指数
1
解决办法
750
查看次数