-
Notifications
You must be signed in to change notification settings - Fork 71
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Andrey Melikhov
committed
May 5, 2020
1 parent
cec558b
commit d8dd989
Showing
55 changed files
with
28,764 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
FROM alpine:latest | ||
|
||
RUN apk add --update nginx && rm -rf /var/cache/apk/* | ||
COPY config/nginx.conf /etc/nginx/nginx.conf | ||
COPY config/vhost.conf /etc/nginx/conf.d/vhost.conf | ||
|
||
# forward request and error logs to docker log collector | ||
RUN ln -svf /dev/stdout /var/log/nginx/access.log \ | ||
&& ln -svf /dev/stderr /var/log/nginx/error.log | ||
|
||
EXPOSE 80 443 | ||
|
||
CMD ["nginx", "-g", "daemon off;"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
Пример продвинутного приложения nest + react. | ||
Видео: https://youtu.be/MP6NYi6UC8M |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
user nginx; | ||
worker_processes 1; | ||
pid /run/nginx.pid; | ||
|
||
events { | ||
worker_connections 512; | ||
} | ||
|
||
http { | ||
sendfile off; | ||
keepalive_timeout 10; | ||
server_tokens off; | ||
|
||
include /etc/nginx/mime.types; | ||
default_type application/octet-stream; | ||
|
||
access_log /var/log/nginx/access.log; | ||
error_log /var/log/nginx/error.log; | ||
|
||
include /etc/nginx/conf.d/*.conf; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
upstream backend { | ||
server host.docker.internal:3000; | ||
} | ||
|
||
server { | ||
listen 80; | ||
server_name 127.0.0.1; | ||
root /www/public; | ||
|
||
location / { | ||
try_files $uri @backend; | ||
} | ||
|
||
location @backend { | ||
proxy_pass http://backend; | ||
proxy_set_header X-Real-IP $remote_addr; | ||
proxy_set_header Host $host; | ||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||
} | ||
} |
677 changes: 677 additions & 0 deletions
677
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/README.md
Large diffs are not rendered by default.
Oops, something went wrong.
Binary file added
BIN
+7.02 MB
...eact-advanced/data/articles/bmsdave-auth-vulnerabilities/ezgif.com-optimize.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+408 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/github-reg.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+126 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/katoolin.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+134 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/osi.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+115 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/request-bad.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+112 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/request-good.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+118 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/request-hacked.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+132 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/request-hmm.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+154 KB
nest-react-advanced/data/articles/bmsdave-auth-vulnerabilities/talk.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+337 KB
...eact-advanced/data/articles/bmsdave-auth-vulnerabilities/wireshark_http_get.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+310 KB
...act-advanced/data/articles/bmsdave-auth-vulnerabilities/wireshark_http_post.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+332 KB
...act-advanced/data/articles/bmsdave-auth-vulnerabilities/wireshark_https_get.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+333 KB
...ct-advanced/data/articles/bmsdave-auth-vulnerabilities/wireshark_https_post.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
97 changes: 97 additions & 0 deletions
97
nest-react-advanced/data/articles/melikhov-3-tips-about-javascript/README.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
|
||
# Пишем производительный JavaScript. 3 совета. | ||
![](https://cdn-images-1.medium.com/max/1600/1*CV60sHknbBWu54ydmw9XCg.jpeg) | ||
Эта статья основана на советах [Бенедикта Маурера](https://twitter.com/bmeurer), встреченных мной в статьях, комментариях и лекциях. Почему эта информация интересна и важна? Бенедикт принимает непосредственное участие в разработке V8 и досконально знает, как именно интерпретатор и компилятор обрабатывают наш код. | ||
|
||
--- | ||
|
||
## Помогите JavaScript понять, что на самом деле вы хотите сделать | ||
Избегайте неопределённости. Например, если у вас есть значение `obj`, которое может быть `undefined` или объектом, рассмотрите возможность исключения неопределенности через явное условие: | ||
|
||
```javascript | ||
if (obj !== undefined) { | ||
// … | ||
} | ||
``` | ||
|
||
Тогда компилятору не придётся делать множество лишних проверок, как в случае, если вы напишите: | ||
|
||
```javascript | ||
if (obj) { | ||
// … | ||
} | ||
``` | ||
|
||
Что должен сделать компилятор в этом случае? Проверить, что `obj` не является пустой строкой, `false`, `0` или `undefined`. Всё это порождает лишние проверки в байткоде. Кажется, достаточно понимать, что перед нами объект, а объект всегда возвращает **true** на `toBoolean`. Но, к сожалению, в нашем динамически типизируемом языке компилятору придётся следить за всем циклом жизни переменной `obj`, чтобы убедиться, что на вход условия действительно пришёл объект. | ||
|
||
![](https://cdn-images-1.medium.com/max/2000/1*0my1ZiCSFkinC6HB5eY4Fw.png) | ||
*Первый вариант в среднем на 15% быстрее* | ||
|
||
Дополнительная польза: когда вы будете читать свой код через год (или это будет делать кто-то другой), вам будет гораздо проще понять, что на самом деле проверяет ваше условие. | ||
|
||
## Осторожнее с `&&` и `||` | ||
![](https://cdn-images-1.medium.com/max/1600/1*8CZN4PG7s565SftA60yWCw.png) | ||
*[https://github.com/developit/preact/pull/610](https://github.com/developit/preact/pull/610)* | ||
|
||
Это пример из реального коммита в репозитории preact. Изменение логического выражения на тернарный оператор сделано для повышения производительности кода (автор сообщает об 1–5% ускорении). Но за счёт чего? | ||
|
||
Мы помогли компилятору, указав, что значением `vlen` всегда будет `Number`. В негативном сценарии первого случая мы получим тип `Boolean` для `vlen`, что и приводит к деоптимизации, а так же добавляет ещё одну дорогостоящую проверку позже, чтобы убедиться, что `vlen` на самом деле число. | ||
|
||
Воспользовавшись советом из первой части статьи, можно получить дополнительное ускорение: | ||
|
||
```javascript | ||
vlen = (vchildren !== undefined) ? vchildren.length : 0; | ||
``` | ||
|
||
В целом, использование `&&` или `||` в небулевом контексте (особенно с числами) не слишком хорошее решение, из-за семантики `&&` и `||` в JavaScript. | ||
|
||
Ещё один интересный пример неправильного использования `||`: | ||
|
||
```javascript | ||
function foo(a, b) { | ||
a = a || "value"; | ||
b = b || 4; | ||
// … | ||
} | ||
``` | ||
|
||
В данном случае ошибочно отсекаются допустимые значения, такие как пустая строка `''` для `a` и `0` для `b`. | ||
|
||
## Не доверяйте `undefined` | ||
Выше мы использовали проверку | ||
|
||
```javascript | ||
if (obj !== undefined) { | ||
// … | ||
} | ||
``` | ||
|
||
Но всё ли с ней хорошо? Давайте проведём небольшой эксперимент | ||
|
||
```javascript | ||
const isDefined = (function() { | ||
const undefined = 1; | ||
return x => x !== undefined; | ||
})(); | ||
console.log(isDefined(undefined)); // true | ||
console.log(isDefined(1)); // false | ||
``` | ||
|
||
На самом деле `undefined` не является ключевым словом в JavaScript. Это просто поле в глобальном объекте, и движок JS вынужден это учитывать. К счастью, в V8 уже присутствует неплохая оптимизация и если в цепочке видимости отсутствуют `eval` или `with`, компилятор не будет производить поиск значения `undefined` в глобальном объекте. Но вот в браузере Safari такая оптимизация отсутствует. | ||
|
||
Защититься от подмены `undefined` (и немного упростить жизнь компилятору) можно путём вызова оператора `void`, который всегда возвращает настоящий `undefined`. | ||
|
||
```javascript | ||
if (obj !== void 0) { | ||
// … | ||
} | ||
``` | ||
Я не призываю использовать эту конструкцию, потому что она может поставить в тупик менее опытных коллег, столкнувшихся с вашим кодом. Но в случае необходимости достижения максимальной производительности стоит подумать о таком подходе. Также void 0 пригодится, если в вашем проекте включено [правило no-undefined в ESlint](http://eslint.org/docs/rules/no-undefined). | ||
|
||
Подробнее читайте в статье «[Иногда undefined это defined](https://medium.com/devschacht/benedikt-meurer-sometimes-undefined-is-defined-91f32af4532c)» | ||
|
||
--- | ||
|
||
*Слушайте наш подкаст в [iTunes](https://itunes.apple.com/ru/podcast/девшахта/id1226773343) и [SoundCloud](https://soundcloud.com/devschacht), читайте нас на [Medium](https://medium.com/devschacht), контрибьютьте на [GitHub](https://github.com/devSchacht), общайтесь в [группе Telegram](https://t.me/devSchacht), следите в [Twitter](https://twitter.com/DevSchacht) и [канале Telegram](https://t.me/devSchachtChannel), рекомендуйте в [VK](https://vk.com/devschacht) и [Facebook](https://www.facebook.com/devSchacht).* | ||
|
||
[Статья на Medium](https://medium.com/devschacht/3-tips-about-javascript-597c33a219d6) |
Oops, something went wrong.