가이드 개발 가이드

fibjs 란 무엇입니까?

Fibjs는 주로 웹 백엔드 개발 용으로 설계된 응용 프로그램 서버 개발 프레임 워크이며 Google v8 JavaScript 엔진을 기반으로하며 기존 콜백과 다른 동시성 솔루션을 선택합니다. Fibjs는 파이버를 사용하여 프레임 워크 계층에서 비동기 호출로 인한 비즈니스 복잡성을 분리하여 개발 어려움을 크게 줄이고 사용자 공간의 빈번한 비동기 처리로 인한 성능 문제를 줄입니다.

역사적으로 JavaScript는 주로 브라우저 UI 처리에 사용되며 UI 개발은 일반적인 단일 스레드 이벤트 중심 모드이므로 JavaScript는 주요 프로그래밍 패러다임으로 비동기식 프로그래밍을 형성합니다.

JavaScript의 성공으로 점점 더 많은 사람들이 다른 시나리오에 JavaScript를 적용하기 시작했습니다. 동시에 사람들은 많은 시나리오에서 비동기 처리가 가장 적합한 선택이 아니라는 것을 점점 더 많이 발견하고 있습니다.

원래 민첩한 개발로 돌아 가기

Fibjs는 프레임 워크 계층에서 파이버를 사용하여 비동기 호출로 인한 비즈니스 복잡성을 분리하고 io의 비동기 처리를보다 직관적 인 동기 호출로 캡슐화합니다. 엔지니어는 일반적인 동기식 비즈니스 로직에 따라 코드를 작성하면되므로 비동기 처리로 즐길 수 있습니다. 매우 편리합니다.

다음 코드는 mysql 모듈 설명서에서 가져온 것입니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
conn.beginTransaction(err => { if (err) { throw err; } conn.query('INSERT INTO posts SET title=?', title, (error, results, fields) => { if (error) { return conn.rollback(() => { throw error; }); } var log = 'Post ' + results.insertId + ' added'; conn.query('INSERT INTO log SET data=?', log, (error, results, fields) => { if (error) { return conn.rollback(() => { throw error; }); } conn.commit((err) => { if (err) { return conn.rollback(() => { throw err; }); } console.log('success!'); }); }); }); });

fibjs에서 동일한 작업을 수행하면 코드는 다음과 같습니다.

1 2 3 4 5 6
conn.trans(() => { var result = conn.execute('INSERT INTO posts SET title=?', title); var log = 'Post ' + results.insertId + ' added'; conn.execute('INSERT INTO log SET data=?', log); }); console.log('success!');

단순성을 추구한다면 다음과 같은 코드를 작성할 수도 있습니다.

1 2 3 4
conn.trans(() => conn.execute('INSERT INTO log SET data=?', 'Post ' + conn.execute('INSERT INTO posts SET title=?', title).insertId + ' added')); console.log('success!');

서로 다른 두 프로그래밍 스타일의 차이점을 명확하게 비교할 수 있습니다. 코드가 적을수록 오류가 줄어들고 코드가 줄어듦에 따라 코드의 논리가 명확 해지며 개발 및 유지 관리에 도움이됩니다.

고 에너지 포용

서버를 확장하여 응답 속도를 쉽게 높일 수 있지만 성능은 개발 프레임 워크를 선택하는 데 여전히 중요한 기초가되어야합니다. ES7이 도입되면서 async가 새로운 비동기 개발 모델로 도입되었습니다. 그러나 비동기로 가져온 동기화 스타일을 즐기면 성능에 영향을 미쳐야합니다.

테스트 코드를 사용하여 다양한 프로그래밍 스타일 간의 성능 차이를 비교할 수 있습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
var count = 1000; async function test_async(n) { if (n == count) return; await test_async(n + 1); } function test_callback(n, cb) { if (n == count) return cb(); test_callback(n + 1, () => { cb(); }); } function test_sync(n) { if (n == count) return; test_sync(n + 1); } async function test() { console.time("async"); await test_async(0); console.timeEnd("async"); console.time("callback"); test_callback(0, () => { console.timeEnd("callback"); }); console.time("sync"); test_sync(0); console.timeEnd("sync"); } test();

최신 v8 v6.7.192에서이 코드의 결과는 다음과 같습니다.

1 2 3
async: 5.276ms callback: 0.117ms sync: 0.038ms

테스트 결과에서 프로젝트에 비동기가 널리 사용되면 서버가 비동기 함수의 호출 및 리턴을 처리하는 데 많은 시간을 소비한다는 것을 분명히 알 수 있습니다. 또한 일부 서버 응용 프로그램의 실제 테스트에서도이 사실을 발견했습니다. 그리고 이러한 급격한 성능 저하는 완전히 용납 될 수 없습니다.

Fibjs는 파이버를 사용하여 JavaScript 언어의 기능을 최대한 활용하고 v8의 성능을 최대화합니다. 엔지니어는 서버 성능을 쉽게 극대화 할 수 있습니다.

납치되지 않고 유연한 패러다임 선택

fibjs 사용을 선택한다고해서 동기식 개발 스타일을 사용해야하는 것은 아니며 실제로 fibjs는 지금까지 본 비동기 프로그래밍 패러다임을 지원하며 동기식 스타일과 비동기식 스타일간에 전환 할 수있는 유연성이 있습니다.

콜백이든 비동기이든, 치명적인 결함이 있으며 이는 전염성이 있습니다. 함수가 콜백 또는 비동기 인 한 함수에 종속 된 다른 모든 함수는 콜백 또는 비동기 여야합니다. 이로 인해 대규모 소프트웨어 개발에 막대한 개발 비용이 발생합니다.

간단한 서버 개발 시나리오를 예로 들어 보겠습니다. 프로젝트 초기에는 세션 데이터 저장소로 메모리를 선택했으며, 이때 동기화 방법을 사용하여 데이터를 직접 읽고 저장하고이를 바탕으로 완전한 비즈니스를 개발할 수 있습니다. 비즈니스 규모가 커짐에 따라 세션 데이터를 redis 또는 mongodb에 저장해야합니다.이 시점에서 세션 관련 작업을 비동기 모드로 수정해야합니다.

이론적으로 우리는 각 기능을 의존하는 기능의 요구 사항에 맞게 차례로 수정할 수 있지만 모든 모듈을 완전히 이해하고 수정할 수 있어야합니다. 여러 사람이 공동으로 개발하거나 타사 모듈을 사용할 때는 불가능합니다.

따라서 모든 공통 모듈은 비동기 및 성능 간의 균형을 맞추기 위해 동기화 및 비동기 인터페이스를 모두 제공해야합니다. 보다 일반적인 개발자는 비동기 인터페이스 만 제공하도록 선택합니다. 성능이 저하됩니다.

fibjs에서는 유사한 문제를 쉽게 해결하고 제어되지 않는 비동기 비동기 감염을 피할 수 있습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var util = require('util'); function session_get(sid) { return sdata; } async function async_session_get(sid) { return sdata; } function callback_session_get(sid, cb) { cb(null, sdata); } data = session_get(sid); data = util.sync(async_session_get)(sid); data = util.sync(callback_session_get)(sid);

Fibj는 util.sync를 사용하여 콜백 또는 비동기 함수를 동기화 함수로 바꾸고 직접 호출 할 수 있습니다. 이러한 방식으로 다양한 프로그래밍 패러다임의 모듈을 쉽게 통합하고 최소한의 개발 비용으로 동기화 패러다임으로 변환하여 패러다임 감염으로 인한 재난을 효과적으로 피할 수 있습니다.

경험을 시작하십시오

쾌적한 개발 경험을 시작할 준비가 되셨습니까? 이제 설치부터 시작하겠습니다.

👉 [ 설치 및 운영 환경 ]