小编Igo*_*Vuk的帖子

Chrome内存缓存与磁盘缓存

我对chrome内存缓存与磁盘缓存感兴趣?我使用webpack,common chunks插件并使用chunkhash生成我的所有文件.

内存与磁盘缓存有何不同.当我重新加载我的页面时,一些文件从内存缓存加载,一些文件从磁盘缓存加载(bundle.js和image.jpg来自内存缓存,css来自磁盘缓存).有时它会有所不同.我们可以控制它,从哪里选择加载的东西吗?内存缓存似乎比磁盘缓存更快.

caching google-chrome webpack

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

为什么我必须将babel-presets放在.babelrc和webpack.config.js中?

好.我正在引导一个简单的应用程序.我正在使用flow.js. 我使用的预设是babel-preset-2015,babel-preset-react和babel-preset-stage-0.我必须在我的.babelrc和我的webpack.config中放置相同的预设才能完成所有工作.如果我例如从webpack.config中删除它我得到一个错误'React is not defined'.如果我删除.babelrc和babel-register我得到一个错误,因为我使用import和Flow.js注释.为什么会这样?如果我在webpack.config中放置预设我应该能够删除.babelrc或反之.这就是我的代码现在看起来如何工作(减去一些对问题不重要的文件).

启动dev.js

require('babel-register')
require('./src/server/index.js')
Run Code Online (Sandbox Code Playgroud)

index.js

/* @flow */

import Express from 'express'
import path from 'path'
import conf from '../conf/'

const APP_PORT: number = conf.APP_PORT
const PORT = process.env.PORT || APP_PORT

const app: Express = new Express()

// Middleware
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')
app.use(Express.static(path.join(__dirname, '../', 'client', 'dist')))

// Routes
app.get('*', function (req: Object, res: Object) {
  res.render('index')
})

app.listen(PORT, function () {
  console.log(`Express server is up on port ${PORT}`)
})
Run Code Online (Sandbox Code Playgroud)

app.js

import React from …
Run Code Online (Sandbox Code Playgroud)

reactjs webpack babeljs

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

Cloudflare CDN 和 NGINX 的区别

我正在阅读,但很难理解两者之间的区别。我在我的应用程序中使用 Heroku,直到现在我使用 NGINX 来提供我的内容。我将我的静态文件预压缩为 gzip 并像这样提供它们,关闭 NGINX 配置文件中的动态压缩。

现在我正在学习 Cloudflare CDN。正如我所见,它也提供静态内容。同时使用 NGINX 和 Cloudflare 有什么意义,有什么好处?

当用户访问网站时,流量如何?

可不可能是:

最终用户 -> Cloudflare DNS -> CDN -> NGINX -> Heroku

最终用户 <- Cloudflare DNS <- CDN <- NGINX <- Heroku

dns cdn nginx static-content cloudflare

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

在 React 中声明静态数据的最佳位置/方式

我正在通过互联网阅读,试图找到一些声明静态数据的性能坚决或首选方法,反应中的变量,所以我想听听你的意见。

这适用于无状态和类组件。

假设我有一个带有颜色的数组,我想在 React 中的某处使用它return()

const colors = ["red, "green", "blue"];
Run Code Online (Sandbox Code Playgroud)

1)在里面声明它 render()

我想这不是首选,因为它会在每次渲染时重新创建。

2)在构造函数中将其声明为全局变量

this.colors = ["red, "green", "blue"];
Run Code Online (Sandbox Code Playgroud)

很好,但在某些情况下可能不喜欢使用全局变量。

3) 将其声明为放置在 React 组件内部但在render(). 我们从 React 调用函数return()

4)我想我在某处看到了使用 defaultProps。

有最佳实践吗?

variables render class reactjs

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

Cypress,从 API 响应中读取数据

我发现的所有示例都是调用 API 并定义方法和 URL。例如

  cy.server()

  cy.route({
    method: 'GET',
    url: 'https://www.something.com', 
  }).as('get_jobs')

  cy.get('[data-cy="job-search-input"] button').click()

  cy.wait('@get_jobs').then((xhr) => {
     cy.log(xhr.response.body.data)
  })
Run Code Online (Sandbox Code Playgroud)

我想要的只是选择按钮,按单击并阅读它给我的响应。我不想再次定义 url 和方法,而是使用代码中已经使用的那个,并在按下按钮后检查它给我的响应。

我怎样才能做到这一点?

javascript testing reactjs cypress

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

在 Node.js 中使用 AJAX 和 ejs

我想弄清楚如何在 node.js 中使用 ajax 我现在有这个。当我按下名为 Press 的按钮时,如何在我的 div id="champ" 中显示例如 order[0].name 和 order[1].name。

应用程序.js

var express = require("express");
var app = express();
app.use(express.static("public"));
app.set("view engine", "ejs");

var order = [
    {
        id: 1,
        name: "James",
        drink: "Coffee"
    },
    {
        id: 2,
        name: "John",
        drink: "Latte"
    }
];

app.get("/", function (req, res) {
    res.render("home", {order: order});
});
Run Code Online (Sandbox Code Playgroud)

主页.ejs

<!DOCTYPE html>

<html>
    <head>
        <title>
            AJAX calls
        </title>
    </head>
    <body>
        <h1>Ajax</h1>

        <% for (var i = 0; i< order.length; i++) { %>
            <div …
Run Code Online (Sandbox Code Playgroud)

javascript ajax ejs node.js

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

forEach函数内部的对象

我对这段代码有疑问.

var names = ["John", "Jen", "Tony"];

var obj = {
	prob: function () {
		for (var i = 0; i < names.length; i++) {
			document.write(names[i]);
			console.log(names[i]);
		}
	},
	trim: names.forEach(function(name) {
		document.write(name)
		console.log(name)
	})
}

console.log("*********")
console.log(obj.prob());
console.log("*********")
Run Code Online (Sandbox Code Playgroud)

如果我在我的控制台中运行此代码,我会得到这个:

John
Jen
Tony
*********
John
Jen
Tony
undefined
*********
Run Code Online (Sandbox Code Playgroud)

这意味着在我的prob函数之前,我调用我的trim函数运行.这是为什么?我没有打电话给它?我可以将它保存为对象的方法,并在以后需要时调用它吗?

javascript foreach

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

gzip和webpack压缩

我不能让gzip工作.我想事先制作gzip文件.我用compression-webpack-plugin做到了.我通常在服务器上使用这些文件.

app.use(Express.static(path.join(__dirname, '../', 'dist')))

app.get('*', (req: Object, res: Object) => {
  res.render('index')
})
Run Code Online (Sandbox Code Playgroud)

我用我的模板来赞美这些文件.

<head>
    <meta charset="UTF-8" />
    <title>Q</title>
      <link rel='stylesheet' type='text/css' href="stylesLocal.29kf81a60pl57850llfi.js.gz">
</head>

  <body>
      <div id="app"><%- app %></div>
      <script src="bundle.2720b1a98103167676ac.js.gz"></script>
      <script src="vendor.57erz1a981hk5786756u.js.gz"></script>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果我没有gzip文件但是当我发送.gz文件时,一切都有效.我正在读取我应该设置Content-Encoding:gzipContent-Type,我尝试了但是无论文件内容类型如何我都抱怨它,因为我发送css,js和文本文件.不知道如何使这项工作?

compression gzip webpack

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

Mongoose 仅​​更新已更改的值

我有一个 PUT 路由来更新值。我从两个地方走这条路线。一种是发送有关详细信息的信息,另一种是发送有关已完成的信息。问题是猫鼬正在更新展位,尽管它只从一个展位获得价值。

因此,如果我发送有关已完成的信息,它是真的,后来我使用新的详细信息(没有已完成的值)点击此路线,它也会将已完成更新为假。如何仅更新已更改的值?

router.put('/:id', (req, res) => {
  Todo.findOne({_id:req.body.id}, (err, foundObject) => {
      foundObject.details = req.body.details
      foundObject.completed = req.body.completed
    foundObject.save((e, updatedTodo) => {
      if(err) {
        res.status(400).send(e)
      } else {
        res.send(updatedTodo)
      }
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

编辑: 感谢杰克逊的暗示我才得以做到这一点。

router.put('/:id', (req, res) => {
  Todo.findOne({_id:req.body.id}, (err, foundObject) => {
    if(req.body.details !== undefined) {
      foundObject.details = req.body.details
    }
    if(req.body.completed !== undefined) {
      foundObject.completed = req.body.completed
    }
    foundObject.save((e, updatedTodo) => {
      if(err) {
        res.status(400).send(e)
      } else {
        res.send(updatedTodo)
      }
    }) …
Run Code Online (Sandbox Code Playgroud)

routes mongoose mongodb express

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

在webpack中使用CommonsChunkPlugin时是否需要Etag和Last-Modified头

我正在使用webpack捆绑我所有的资产文件,所以我得到了类似的东西。

bundle.7fb44c37b0db67437e35.js
vendor.495e9142a1f8334dcc8c.js
styles.bc5b7548c97362b683f5582818914909.css
Run Code Online (Sandbox Code Playgroud)

我在名称中使用了chunkhash,因此当浏览器缓存某些内容时,它不会再次缓存,直到哈希发生变化为止。例如,如果我更改样式,捆绑文件并部署,则仅样式中的哈希值会更改,其他样式则不会,因此浏览器将再次从服务器请求样式文件,其余的将从内存缓存中使用。

在响应标头中,我还具有EtagLast-Modified,每次我为每个文件部署应用程序时,它们都会更改。我应该从响应中删除它们吗?这可以使浏览器无法联系服务器并查看文件是否已更改,即使哈希值仍然相同吗?

caching header nginx webpack

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