성능 향상을 위해 로컬에서 Microsoft-Webchat 구축
그것은 반응으로 개발되었으며 웹 페이지에서 직접 사용할 수 있는 패키지와 함께 제공됩니다. 그러나 실제 사용자 정의를 수행하려면 반응 응용 프로그램에서 사용해야 합니다.
이로 인해 배포된 애플리케이션의 패키지 크기가 평소보다 커집니다. 더 나은 성능을 원하는 경우 문제가 될 수 있습니다.
이 블로그에서는 로컬에서 웹 채팅을 빌드하고 일부 수정을 수행하여 더 나은 성능을 제공할 수 있는 방법을 보여 드리겠습니다.
가정
먼저 우리는 기본 설정으로 볼 것입니다
반응 설정으로 웹 채팅을 실행하려면 botframework-webchat을 설치해야 합니다.
npm install botframework-webchat
//import as a dynamic module so this will load only when it is needed
const ReactWebChat = dynamic(
() => {
return import('botframework-webchat');
},
{ ssr: false }
);
//the directline
let directLine = useMemo(() => createDirectLine({
secret: 'Mytoken',
domain: 'http://directline endpoint',
webSocket: true,
conversationId: 'conversationId',
pollingInterval: 2000
}), []);
//redux store
let store=useMemo(() => createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'DIRECT_LINE/POST_ACTIVITY') {
//your code here
}
}), []);
<ReactWebChat directLine={directLine}
userID={userId}
username={userName}
locale='en-us'
sendTypingIndicator={true}
resize="detect"
bot={bot}
styleOptions={styleOptionsState}
store={store}
/>
With this setup we can run the chat app,for details you can check an example from Microsoft-Webchat
다음 구성
개발 종속성 설치
앱 분석
패키지 풋프린트를 분석하기 위해 package.json의 스크립트에서 다음을 사용합니다.
"analyse": "cross-env ANALYZE=true next build"
next.config 내부
const withBundleAnalyzer = require('@next/bundle-analyzer')({
enabled: process.env.ANALYZE === 'true',
})
const config={
future: {
webpack5: true,
},
}
그런 다음 실행
npm run-script analyse
내 설정의 경우 이것이 내가 얻는 것입니다.
botframework-webchat-api/lib가 현지화를 위해 얼마나 많은 공간을 차지하는지 확인하세요.
또한 microsoft-cognitiveservices-speech-sdk 배포가 얼마나 큰지, 음성이 필요하지 않으면 음성도 제거할 수 있으므로 정리하겠습니다.
작게 만들자
botframework-webchat-api 최소화
botframework-webchat-api\src\localization\getAllLocalizedStrings.ts에서 필요한 언어를 제외한 모든 언어를 제거합니다. 제 경우에는 en_US만 필요합니다.
// Strings commented out are pending official translations
import enUS from './en-US.json';
import bundledOverrides from './overrides.json';
import LocalizedStrings from '../types/LocalizedStrings';
import mergeLocalizedStrings from './mergeLocalizedStrings';
let localizedStrings;
function getAllLocalizedStrings(): { [language: string]: LocalizedStrings } {
return (
localizedStrings ||
(localizedStrings = mergeLocalizedStrings(
{
'en-US': enUS,
},
bundledOverrides
))
);
}
export default getAllLocalizedStrings;
{
"en-US": {
"COGNITIVE_SERVICES_SPEECH_TO_TEXT": true,
"COGNITIVE_SERVICES_TEXT_TO_SPEECH": "neural",
"GLOBALIZE_LANGUAGE": "en",
"SPEECH_LANGUAGE": "en-US"
}
}
npm i
npm run-script build
Microsoft-cognitiveservices-speech-sdk 제거
react: resolve(__dirname, '../isomorphic-react/dist/react.js'),
react-dom': resolve(__dirname, '../isomorphic-react-dom/dist/react-dom.js')
"isomorphic-react": "4.13.0",
"isomorphic-react-dom": "4.13.0",
"microsoft-cognitiveservices-speech-sdk": "1.15.1",
"botframework-directlinespeech-sdk": "4.13.0",
createCognitiveServicesSpeechServicesPonyfillFactory,createDirectLineSpeechAdapters에 대한 주석 참조
npm i
npm run-script build
botframework-webchat-api,botframework-webchat에서 node_modules 제거
다음 구성에서
config.resolve.alias['microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.browser/Exports']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.browser/Exports.js'
),
config.resolve.alias['microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.speech/Exports']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common.speech/Exports.js'
),
config.resolve.alias['microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common/Exports']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/src/common/Exports.js'
),
config.resolve.alias['microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/AudioStreamFormat']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Audio/AudioStreamFormat.js'
),
config.resolve.alias['microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Exports']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/src/sdk/Exports.js'
),
config.resolve.alias['microsoft-cognitiveservices-speech-sdk/distrib/lib/microsoft.cognitiveservices.speech.sdk']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/microsoft.cognitiveservices.speech.sdk.js'
),
// This line must be placed after other specific imports.
config.resolve.alias['microsoft-cognitiveservices-speech-sdk']= resolve(
__dirname,
'node_modules/microsoft-cognitiveservices-speech-sdk/distrib/lib/microsoft.cognitiveservices.speech.sdk.js'
),
config.resolve.alias['botframework-webchat-api'] = resolve(
__dirname,
'botframework-webchat-api'
)
config.resolve.alias['botframework-webchat'] = resolve(
__dirname,
'botframework-webchat'
)
이제 다시 실행하자
npm run-script analyse
이것이 내가 얻는 것입니다.
그게 다야
우리는 패키지의 크기를 줄였습니다.
보너스
lodash 또는 moment에 대한 감소 패키지의 경우 다음을 사용할 수 있습니다.
다음 구성 내부의 순간
config.plugins.push(new webpack.IgnorePlugin({
resourceRegExp: /^\.\/locale$/,
contextRegExp: /moment$/,
}))
lodash의 경우 다음과 같은 코드에서 사용하십시오.
import cloneDeep from 'lodash/cloneDeep';
import isEmpty from 'lodash/isEmpty';
IE11용으로 트랜스파일하려면
const withTM = require('next-transpile-modules')(['react-markdown', 'react-markdown/node_modules/is-plain-obj',
'postcss','sanitize-html','sanitize-html/node_modules/escape-string-regexp']);
let withAnalyzer = withBundleAnalyzer(config)
let final = withAnalyzer
if (!process.env.NODE_ENV || process.env.NODE_ENV === 'production') {
final = withTM(withAnalyzer)
}
중복 패키지를 찾으려면
const DuplicatePackageCheckerPlugin = require('duplicate-package-checker-webpack-plugin')
config.plugins.push(new DuplicatePackageCheckerPlugin())
// then you can use for duplicate packages,to pickup only from default path
config.resolve.alias['core-js'] = resolve(
__dirname,
'node_modules',
'core-js'
)
적절한 소스 코드 사용으로 크롬 콘솔에서 오류를 보려면
config.optimization.minimize = false
Reference
이 문제에 관하여(성능 향상을 위해 로컬에서 Microsoft-Webchat 구축), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dlmohan/build-microsoft-webchat-locally-for-performance-improvement-314p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)