Fork me on GitHub

2019-03-12: TensorFlow.js 1.0, Cache-Control 설명, `JSON.stringify(-0)`

Translator: U-Yeong Ju Edit on GitHub See Revisions

JSer.info #426 - TensorFlow 모델을 브라우저와 Node.js에서도 사용할 수 있는 TensorFlow.js 1.0이 릴리스됐습니다.

1.0에 Tensor.array()Tensor.arraySync()가 추가됐고 API의 이름이 변경되는 등 비호환적 변경사항이 포함돼 있습니다.
또, 초기 릴리스한 버전에 비해 성능이 크게 개선 됐습니다.


Cache-Control for Civilians – CSS Wizardry – CSS Architecture, Web Performance Optimisation, and more, by Harry Roberts에는 Cache-Control HTTP 헤더에 관해 자세히 작성돼 있습니다.

public, private, max-age, no-store, no-cache, immutable, stale-while-revalidate 라는 각 프로퍼티의 동작 방식이나 유스케이를 설명합니다.
뿐만 아니라 Cache Busting 방법이나 Clear-Site-Data 헤더 그리고 라이브 전송 용 페이지 설정 등 다양한 내용을 다루고 있습니다.


이번주 이슈

ECMAScript 사양의 이슈로 JSON.stringify(-0)의 처리에 관한 이슈가 등록됐습니다.

현재의 사양에서 JSON.stringify(-0)할 경우 String(-0)의 경우와 같은 로직으로 동작하므로 -를 무시하여 "0" 문자열이 반환됩니다.
한편, JSON.parse("-0")을 할 경우엔 -를 고려하여 -0이 반환됩니다.

이로 인해 parse 한 후 stringify 한 결과를 본래의 값과 Object.is로 비교 시 일치하지 않는 경우가 있습니다.
이 사양은 JSON 포맷을 발견한 douglascrockford/JSON-js에 근거한 것입니다.

// 현재 사양
Object.is(JSON.parse(JSON.stringify(-0)), -0); // => false

JSON.stringify(-0)"-0"을 반환하도록 하는 사양을 수정한 PR이 등록됐습니다.

// PR로 제안한 사양
Object.is(JSON.parse(JSON.stringify(-0)), -0); // => true

하지만 ===로 비교할 때 -00 차이를 무시하는 동작, String()의 동작 방식과 통일하는 문제 등이 제기 됐으며 JSON.stringify(-0)의 동작이 현업에서 그다지 문제될 일이 없다는 의견이 있어 일단은 PR이 취하됐습니다.

// === 는 -0과 0의 차이를 무시함
JSON.parse(JSON.stringify(-0)) === -0; // => true

이 문제에 관심 있는 분들은 위 이슈를 살펴보면 좋을 것 같습니다.
===Object.is의 비교 방식에 대해선 아래 문서를 통해 알 수 있습니다.


헤드라인


Release 1.0.0 · tensorflow/tfjs

github.com/tensorflow/tfjs/releases/tag/v1.0.0

MachineLearning library JavaScript

TensorFlow.js 1.0이 릴리스됐습니다.
성능 개선이 이뤄졌고 Tensor.array()Tensor.arraySync()가 추가 됐습니다.


Release: [email protected] - 📣 announcements - npm forum

npm.community/t/release-npm-6-9-0/5911

npm ReleaseNote

npm 6.9.0이 릴리스됐습니다.
지정한 날짜 보다 이전 버전을 설치하는 --before 옵션이 추가됐고 패키지의 이름을 alias 하여 설치할 수 있는 package alias를 지원합니다.


rmdm/rmgr: Release resources gracefully

github.com/rmdm/rmgr

JavaScript library

리소스를 관리하는 라이브러리 입니다.
리소스 별로 initialize와 dispose 시의 처리를 정의하고 리소스를 배포할 수 있는 라이브러리입니다.


Marble.js 2.0 🔥 — reactive, better, functional, stronger

medium.com/@jflakus/marble-2-reactive-better-functional-stronger-5924119d3098

JavaScript library ReleaseNote

RxJS를 사용한 Node.js 용 HTTP 프레임워크인 Marble.js 2.0이 릴리스됐습니다. WebSockets 대응, Context를 사용한 DI 구조, io-ts를 사용한 검증(validation)을 지원합니다.


jsdom/Changelog.md at master · jsdom/jsdom

github.com/jsdom/jsdom/blob/master/Changelog.md#1400

JavaScript DOM library ReleaseNote

JSDOM 14.0.0이 릴리스됐습니다.
JSDOM.fragment()가 browsing context를 갖지 않는 framents를 생성하도록 변경됐으며 element.blur()가 회귀(regression) 수정됐습니다.


아티클


Cache-Control for Civilians – CSS Wizardry – CSS Architecture, Web Performance Optimisation, and more, by Harry Roberts

csswizardry.com/2019/03/cache-control-for-civilians/

HTTP article

Cache-Control HTTP 헤더에 관한 설명 글입니다.
public, private, max-age, no-store, no-cache, immutable, stale-while-revalidate 등 각각 항목을 설명하고 Cache Busting 방법 등에 대해서 이야기합니다.


JavaScript loose comparison (==) step by step

felix-kling.de/js-loose-comparison/

ECMAScript JavaScript spec

==이 어떻게 값을 비교하는지 ECMAScript 사양에 정의된 알고리즘 단계에 따라 체크하는 도구입니다.


What's New In DevTools (Chrome 74)  |  Web  |  Google Developers

developers.google.com/web/updates/2019/03/devtools

Chrome debug article

Chrome 74 개발자 도구 변경 사항을 정리한 글입니다. CSS property의 영향이 강조 표현되며 Lighthouse v4로 갱신됐습니다. 이어 WebSocket 바이너리 메시지 표현 기능이 추가됐으며 퍼포먼스 패널에서 Long task를 기록할 수 있게 됐습니다.


A Complete Guide to useEffect — Overreacted

overreacted.io/a-complete-guide-to-useeffect/

React article

React Hooks의 useEffect 동작과 사용 방법에 대해 설명하며 자주 있는 질문에 대해 이야기합니다.


사이트, 서비스, 문서


Request Map Generator

requestmap.webperf.tools/

webservice performance Tools

지정한 URL의 요청 관계(흐름)을 맵으로 출력 / 시각화 하는 도구입니다.
WebPageTest 결과를 이용합니다.


twbs/rfs: Automated responsive font sizes

github.com/twbs/rfs

CSS library PostCSS

반응형 폰트 사이즈를 지정하는 CSS 세트입니다.
Sass, PostCSS, less, stylus 버전이 준비돼 있습니다.


Feature policy

featurepolicy.info/

JavaScript browser example document

Feature Policy 데모 사이트입니다. 각각의 정책의 지원 상황과 문서, 샘플 등이 정리돼 있습니다.


소프트웨어, 도구, 라이브러리


dyatko/arkit: Visualises JavaScript, TypeScript and Flow codebases as meaningful and committable architecture diagrams

github.com/dyatko/arkit

JavaScript Tools SVG UML

파일로 부터 아키텍처 다이어그램을 생성하는 도구입니다. 코드 베이스가 되는 파일을 지정해 그 구조를 Plant UML이나 SVG 등의 그림으로 변환해 줍니다.


Introduction · AnyProxy

anyproxy.io/en/

node.js proxy Tools

HTTPS나 WebSocket 등에 대응한 로컬 프록시 도구입니다.
Proxy한 로그를 살펴볼 수 있는 GUI도 제공합니다.


jaames/iro.js: 🎨 Color wheel widget for JavaScript - with zero dependencies and a lovely SVG-based UI

github.com/jaames/iro.js

SVG color library

의존 모듈 없는 색상 추출 라이브러리입니다. SVG를 기반으로 한 색상 추출 UI를 제공합니다.


vladocar/femtoJS: femtoJS - Really small JavaScript (ES6) library for DOM manipulation.

github.com/vladocar/femtoJS

JavaScript jQuery library

jQuery와 비슷한 일부 DOM API를 제공하는 라이브러리입니다.
ES2015+를 지원하는 브라우저를 대상으로 개발됐습니다.


Pull Request to this article
JSer.info Slackに参加する