Fork me on GitHub

2017-11-19 JS: Firefox 57, JavaScript의 비용, moment와 Luxon

Translator: U-Yeong Ju Edit on GitHub See Revisions

JSer.info #358 - Firefox 57이 릴리즈 됐습니다.

Project Quantum이라고 불리던 Firefox의 대규모 개선 프로젝트의 첫 릴리즈 버전입니다.
Quantum CSS(Stylo)라고 불리는 새롭게 개발된 CSS 엔진이 포함된 릴리즈이기 때문에 기존 CSS와 동작(버그 수정을 포함해)이 다른 부분이 있을 수 있습니다.

자세한 내용은 아래 글을 참고해주세요.

PerformanceObserver의 효율성이 개선됐고 Fetch를 abort할 수 있는 AbortController가 대응됐습니다. 또, Windows Firefox의 기본 폰트가 변경됐습니다.


The Cost Of JavaScript – Dev Channel – Medium에는 JavaScript 실행 비용에 대해에 대해 작성돼 있습니다.

JavaScript의 비용은 네트워크에서의 로드, 파싱, 컴파일, 실행 순 으로 측정 됩니다.

이때 파싱과 컴파일이 낮은 사양의 디바이스에서는 큰 비율을 차지할 수 있습니다.
때문에, 같은 사이즈의 JavaScript, 이미지 파일이라 하더라도 실행 또는 렌더링까지의 시간이 다를 수 있습니다.

이러한 측면에 대해 이야기하고 대책 방법 중 대표적인 PRPL 패턴과 Performance Budget에 대해 소개합니다.


날짜와 시간을 처리할 수 있는 라이브러리인 moment/luxon: A library for working with dates and times in JS의 알파 버전이 릴리즈됐습니다.

본래 moment-lab 프로젝트에서 시작된 라이브러리로 moment의 문제점 중 하나인 mutable 특징을 해결한 라이브러리입니다.

For Moment users에도 작성돼 있습니다만 Moment API 와의 호환성은 없습니다.

특징적인 부분은 날짜 / 시간 / 인터벌 조작 / 파싱 / 포맷을 등을 지원한다는 점이며 moment와 다르게 Immutable 한 API로 디자인돼 있다는 것입니다. 또, TimeZone과 Intl을 사용한 국제화에도 대응하고 있습니다.

그리고 Luxon은 네이티브 Date, Moment, Date-fns와 달리 month를 1-indexed한 값으로 다루고 있습니다.

// 2017-01-01
const date20170101 = new Date("2017-01-01T00:00:00.000Z");
// Luxon - 1-index
const { DateTime }  = require('luxon');
console.log("Luxon:get:" + DateTime.fromJSDate(date20170101).month); // => 1
console.log("Luxon:set:" + DateTime.fromJSDate(date20170101).set({ month: 1 }).month); // => 1
// date-fns - 0-indexed
const {getMonth, setMonth} = require('date-fns');
console.log("date-fns:get:"+ getMonth(date20170101)); // => 0
console.log("date-fns:set:"+ getMonth(setMonth(new Date(2017, 1, 1), 0))); // => 0
// moment - 0-indexed
const moment = require('moment');
console.log("moment:get:"+ moment(date20170101).month()); // => 0
console.log("moment:set:"+ moment(date20170101).month(0).month()); // => 0

헤드라인


Release v0.59.0 · facebook/flow

github.com/facebook/flow/releases/tag/v0.59.0

flowtype ReleaseNote

Flow 0.59.0이 릴리즈 됐습니다.
$ReadOnly<T> utility type이 추가됐고 성능이 개선됐습니다. 또, /* flowlint sketchy-null:error */와 같이 코멘트로 Lint를 활성화할 수 있도록 변경됐습니다.


Node v9.2.0 (Current) | Node.js

nodejs.org/en/blog/release/v9.2.0/

node.js ReleaseNote

Node.js 9.2.0이 릴리즈 됐습니다.
fs.realpathSync.nativefs.realpath.native 그리고 process.ppid가 expose 됐습니다.


Release Notes for Safari Technology Preview 44 | WebKit

webkit.org/blog/8035/release-notes-for-safari-technology-preview-44/

safari ReleaseNote

Safari Technology Preview 44가 릴리즈 됐습니다.
Payment Request가 기본적으로 활성화 됐고, createImageBitmap() 메서드가 구현됐습니다. 또, OffscreenCanvas의 IDL이 추가됐습니다.


Introducing security alerts on GitHub

github.com/blog/2470-introducing-security-alerts-on-github

github security JavaScript ruby news

GitHub 저장소에 npm이나 gem의 보안 경보 기능이 추가됐습니다.


Release v4.0.0-beta.1 · reactjs/redux

github.com/reactjs/redux/releases/tag/v4.0.0-beta.1

redux JavaScript TypeScript ReleaseNote

Redux v4.0.0-beta.1이 릴리즈 됐습니다.
TypeScript의 재작성이 이뤄졌고 INIT가 랜덤한 값으로 변경됐습니다. 또, IE11 미만 브라우저에 대한 지원이 종료됐으며 Dispatch의 성능이 개선 됐습니다.


Firefox — Notes (57.0) — Mozilla

www.mozilla.org/en-US/firefox/57.0/releasenotes/

firefox ReleaseNote

Firefox 57이 릴리즈 됐습니다.
CSS엔진의 교체가 이뤄져 일부 동작이 변경됐고 성능이 개선됐으며 watch/unwatch 메서드가 비권장 됐고 PerformanceObserver의 효율성이 개선됐습니다. 그리고 Fetch의 abort를 지원하며
WebRTC RTCDataChannel의 메시지 파일 크기를 지정할 수 있도록 변경됐습니다.


Release 2.6.0 · GoogleChrome/lighthouse

github.com/GoogleChrome/lighthouse/releases/tag/v2.6.0

Chrome performance ReleaseNote

lighthouse 2.6.0이 릴리즈됐습니다.
redirects 검사 도구 추가 됐으며 각 스크립트의 동작 시간을 측정하는 bootup-time, 페이지의 실행 시간을 측정하는 mainthread-work-breakdown 등의 Audit이 추가됐습니다.


아티클


Refactoring React Components with Jest’s Snapshot – Michael Romani – Medium

medium.com/@mr4227/refactoring-react-components-with-jests-snapshot-7ed1b9d332cc

React testing article

Jest의 snapshot 테스트를 사용한 React 컴포넌트의 리팩터링에 대해 소개돼 있습니다.
스탭샷을 찍고 테스트를 진행하며 거대한 컴포넌트를 세분화하는 과정을 이야기 합니다.


How Redux Works: A Counter-Example

daveceddia.com/how-does-redux-work/

redux tutorial article

Redux로 카운터 앱을 만들어 가며 Redux의 사용법이나 구조에 대해 배울 수 있는 튜토리얼 입니다.


The Cost Of JavaScript – Dev Channel – Medium

medium.com/dev-channel/the-cost-of-javascript-84009f51e99e

JavaScript performance article

JavaScript의 실행까지의 비용에 대해 소개돼 있는 글입니다.
다운로드, 파싱, 실행 과정과 같은 사이즈의 JavaScript, 이미지 파일이라 하더라도 실행 또는 렌더링까지의 비용이 다를 수 있는 점에 대해 소개돼 있습니다. 또, PRPL 패턴, Performance Budget에 관해서 이야기합니다.


JavaScript. The Core: 2nd Edition – ds.laboratory

dmitrysoshnikov.com/ecmascript/javascript-the-core-2nd-edition/

JavaScript ECMAScript article

ECMAScript / JavaScript의 용어 정의와 각 개념에 대해 소개돼 있습니다.
ECMAScript의 사양에 가까운 코어한 내용이 작성돼 있습니다.


Clean Code vs. Dirty Code: React Best Practices - American Express Engineering Blog

americanexpress.io/clean-code-dirty-code/

React opinion article

React를 소재로 클린한 코드에 관해 이야기합니다.
네이밍과 컴포넌트 분할, 기본 값의 취급 방법 등 좋지 않은 예와 그것을 개선한 예를 이용해 알기 쉽게 작성 돼 있습니다.


슬라이드, 영상


React Redux를 사용한 SPA 신규 서비스를 운용하며 얻은 식견과 구현 사례 - 랜서즈(Lancers) 엔지니어 블로그(일본어)

engineer.blog.lancers.jp/2017/11/react-redux-spa-manage-tips/

React redux slide JavaScript

React + Redux + Saga를 사용한 프로젝트를 진행하며 알게 된 여러가지 사실에 대해 소개하는 슬라이드 입니다.
디렉터리 구성이나 기본적인 처리 흐름, HOC를 사용한 컴포넌트 확장, 다이얼로그와 스토리지 등 유즈케이스 별 구현 방법에 관해 이야기합니다.
또, 테스트, Sentry를 사용한 에러 해석, SEO, API 관리에 대해서도 작성돼 있습니다.


JS Kongress 2017 - YouTube

www.youtube.com/playlist?list=PL8ajgHZ7PoCt3l5RXoyqVu_r7gYJU0dMx

JavaScript 이벤트 video

JS Kongress 2017의 발표 영상이 공개 됐습니다.


사이트, 서비스, 문서


What Web Can Do Today

whatwebcando.today/

WebPlatformAPI browser

사용하고 있는 브라우저가 다양한 Web Platform API 중 무엇무엇을 지원하고 있는지 알려주는 사이트입니다.


`performance.mark` with metadata is useful for Real user monitoring

dev.to/ben/we-welcome-a-wonderful-influx-of-new-members-from-japan-1k0

performance browser library JavaScript

performance.mark 에 메타데이터로써 FPS를 전달하여 측정하고, 병목을 일으키는 동작을 로깅하여 해석 및 시각화하는 방법에 대해 이야기합니다.


stereobooster/react-snap: A zero-configuration static pre-renderer for Single Page Applications

github.com/stereobooster/react-snap

React library server

React 애플리케이션을 정적 HTML로 pre-render할 수 있는 라이브러리입니다.
특별한 설정 없이 create-react-app 구조에 동작하는 것을 목표로 개발됐으며 SSR에서 다루기가 힘든 3rd 파티 스크립트나 WebGL 등을 옵션으로 대처할 수 있도록 디자인돼 있습니다.


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


moment/luxon: A library for working with dates and times in JS

github.com/moment/luxon

JavaScript library

날짜나 시간, 인터벌을 다루는 라이브러리입니다. 날짜 조작 뿐 아니라 파싱 또는 포맷을 지원합니다. Immutable 하며 TimeZone이나 Intl를 사용한 국제화에 대응하고 있습니다. Moment와의 차이를 정리한 문서도 공개돼 있으니 함께 살펴보시길 바랍니다.


jaredpalmer/react-fns: Browser API's turned into declarative React components and HoC's

github.com/jaredpalmer/react-fns

React library

React의 High Order Component의 컬렉션 라이브러리입니다.
디바이스의 회전과 동작, 온라인/오프라인, Geo, 미디어 쿼리, 스크롤, 로케일을 다루는 컴포넌트 등이 준비돼 있습니다.


goto-bus-stop/tinyify: a browserify plugin that runs various optimizations, so you don't have to install them all manually. makes your bundles tiny!

github.com/goto-bus-stop/tinyify

browserify plugin Tools

Browserify 환경에서 플랫 bundle, unassert, production 빌드, minify 등 다양한 최적화 작업을 한 데 수행하는 플러그인입니다.


jaredpalmer/razzle: ✨ Create server-rendered universal JavaScript applications with no configuration

github.com/jaredpalmer/razzle

isomorphic JavaScript Tools

Universal한 JavaScript 애플리케이션을 설정 없이 개발을 시작할 수 있는 개발 환경 도구입니다.
create-react-app와 비슷한 도구지만 React 이 외의 환경에서도 사용할 수 있습니다.


도서


Pure React

daveceddia.com/pure-react/

React book

React를 스텝 바이 스텝으로 배울 수 있는 예제 코드를 중심으로 작성됀 도서입니다.


Manning | Vue.js in Action

www.manning.com/books/vue-js-in-action

Vue book

2018년 5월 30일 출간 예정인 Vue를 주제로 한 도서입니다.


초단기! Web 페이지 속도 개선 가이드── 사용성은 「속도」에서 시작된다(WEB+DB PRESS plus 시리즈)|gihyo.jp … 기술평론사(일본어)

gihyo.jp/magazine/wdpress/plus/978-4-7741-9400-4

browser performance book

2017년 11월 23일 출간 예정인 웹페이지의 성능 개선을 주제로 한 도서입니다. 네트워크, 렌더링, 스크립트 항목별 측정 방법과 개선 방법에 대해 작성돼 있습니다.


Manning | React Native in Action

www.manning.com/books/react-native-in-action

React book

2018년 4월 30일에 출간 예정인 React Native를 주제로한 도서입니다.


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