- Änderungsprotokoll
Verfolgen Sie neue Funktionen und Verbesserungen des STP-Datei-Betrachters
Kritische Import- und Messprobleme behoben, Dateiladegeschwindigkeit um bis zu 95% optimiert
2025/09/02
Plattform-Stabilitätserfolg - Lösung der finalen Integrationsprobleme und Erreichen bemerkenswerter Performance-Gewinne:
Diese Version behebt mehrere kritische Probleme, die die Benutzererfahrung erheblich beeinträchtigt haben:
Problem Gelöst: „Funktioniert beim ersten Mal, versagt anschließend" Problem vollständig behoben
window.OV Objekt wurde während der Komponenten-Bereinigung fälschlicherweise gelöschtProblem Gelöst: Messmarkierungen erscheinen nicht auf 3D-Modellen
window.OV Objekt implementiertProblem Gelöst: Mehr-Menü-Button reagiert nicht auf mobilen Geräten im Vollbildmodus
Problem 1: „Lokal funktionierend aber online nicht funktionierend" Störung
Benutzer-Feedback-Phänomen:
Grundursachen-Analyse: Durch systematisches Debugging entdeckt, Problem stammt von 37+ defer-Skripten mit unvorhersagbarer Ausführungsreihenfolge in der Produktionsumgebung:
// Problemcode (layout.tsx ursprüngliche Version)
<script type="text/javascript" src="/js/o3dv.min.js" defer></script>
// defer führt dazu, dass Skript asynchron nach DOM-Parsing ausgeführt wird, aber Ausführungsreihenfolge kann nicht garantiert werdenLösung: Intelligenten OV-Loader mit mehreren Fallback-Mechanismen implementiert:
// Lösung (layout.tsx aktuelle Version)
const fallbackFiles = [
'/js/o3dv.min.js',
'/js/o3dv.original.min.js',
'/js/o3dv.min.js.backup'
];
async function tryLoadOV() {
for (const file of fallbackFiles) {
try {
loadAttempt++;
await loadScript(file);
if (checkOV()) {
window.dispatchEvent(new CustomEvent('ovLoaded'));
return;
}
} catch (error) {
console.warn('Online3DViewer Datei-Ladefehler:', file);
continue;
}
}
}Wirksamkeitsverifikation:
Problem 2: Vollbild-Modus schwarzer Bildschirm Störung
Phänomen-Beschreibung:
Grundursachen-Analyse:
Durch detailliertes Debugging entdeckt, Problem liegt in storeIsFullscreen Abhängigkeit, die viewer bei Vollbild-Wechsel unnötig neu initialisiert:
// Problemcode (viewer-view.tsx ursprüngliche Version)
const getViewerBackgroundColor = useCallback((): [number, number, number] => {
const isDark = resolvedTheme === 'dark';
if (isDark) {
return storeIsFullscreen ? [15, 15, 15] : [10, 10, 10];
}
return storeIsFullscreen ? [250, 250, 250] : [255, 255, 255];
}, [resolvedTheme, storeIsFullscreen]); // ❌ storeIsFullscreen Abhängigkeit führt zu Neu-InitialisierungLösung: Unnötige Vollbild-Zustand-Abhängigkeit entfernt, statische Farbwerte verwendet:
// Lösung (viewer-view.tsx aktuelle Version)
const getViewerBackgroundColor = useCallback((): [number, number, number] => {
const isDark = resolvedTheme === 'dark';
if (isDark) {
return [10, 10, 10] as const;
}
return [255, 255, 255] as const;
}, [resolvedTheme]); // ✅ storeIsFullscreen Abhängigkeit entfernt, verhindert unnötige Neu-InitialisierungWichtige Reparaturstelle: src/components/stp-viewer/viewer-view.tsx:248 Zeile
Wirksamkeitsverifikation:
Kernproblem: Messwerkzeug-Markierungen benötigen 5-6 Klicks zum Anzeigen, beeinträchtigt Benutzererfahrung schwer
Debug-Geschichte - Drei falsche Richtungen:
Falsche Richtung 1: React-Rendering-Problem-Annahme
Falsche Richtung 2: THREE.js-Versionskonflik-Annahme
Falsche Richtung 3: Platzhalter-Objekt-Erstellung
Wahre Problemfindung: Grundursache: THREE.js nicht im globalen Gültigkeitsbereich
import * as THREE from 'three'Endgültige Lösung:
// In viewer-preloader.tsx
const THREE = await import('three');
(window as any).THREE = THREE;
// In MeasureToolCore.ts
const getTHREE = () => {
if (typeof window !== 'undefined' && (window as any).THREE) {
return (window as any).THREE;
}
return null;
};Wirksamkeitsverifikation:
Debug-Strategie-Verbesserung:
Entwicklungs-Best-Practices:
Technische Schulden-Warnung:
window.OV in Komponenten-Cleanup löschenErhebliche Performance-Verbesserungen beim Datei-Laden erreicht:
Ergebnisse: 60-95% Performance-Verbesserung über alle Dateigrößen
| Dateigröße | Vorher | Nachher | Verbesserung |
|---|---|---|---|
| 1MB | 840ms | 39ms | 95.4% schneller |
| 10MB | 1,380ms | 255ms | 81.5% schneller |
| 100MB | 6,780ms | 2,415ms | 64.4% schneller |
Diese Version verstärkte mehrere wichtige Entwicklungsprinzipien:
window.OV sollten niemals in Komponenten-Cleanup gelöscht werdenHintergrund: Basierend auf Benutzeranforderungen wurde eine linke schwebende Sharing-Werkzeugleiste erstellt, die eine dreistufige Architektur-Evolution durchlief
Design-Entscheidungsprozess:
lg:block)/Mobil-versteckt Design-AbwägungTechnische Implementierungsherausforderungen:
/* Feste Positionierung und Layer-Management */
.floating-share-bar {
position: fixed;
left: 1rem;
top: 50%;
transform: translateY(-50%);
z-index: 40; /* Kritisches Layer-Design */
}Schlüssel-Technische Entscheidungen:
scale(1.1) Interaktions-Feedback-DesignBenutzer-bedarfsgetrieben:
Technische Implementierungskomplexität:
// Status-Management-Herausforderungen
const [showMoreDialog, setShowMoreDialog] = useState(false);
// Spezielle Behandlung des More-Buttons
const platforms = [
// ... bestehende 7 Plattformen
{
name: 'More',
isMore: true,
onClick: () => setShowMoreDialog(true)
}
];Integrations-Herausforderungen:
Problem-Diagnose-Prozess:
Problem-Erscheinung: FloatingShareBar wird nicht auf der Startseite angezeigt
Architektur-Analyse: FloatingShareBar wurde in ViewerView platziert
Status-Abhängigkeit: ViewerView wird nur in loading/viewing-Zuständen gerendert
Startseiten-Status: STPViewer Standard ist upload-Zustand, zeigt UploadView
Grundursache: FloatingShareBar in falschem Komponenten-LayerAktuelles Architektur-Problem:
Startseite → HeroSection → HeroStpViewer → STPViewer
├── upload-Zustand → UploadView (keine FloatingShareBar) ❌
├── loading-Zustand → ViewerView (hat FloatingShareBar) ✅
└── viewing-Zustand → ViewerView (hat FloatingShareBar) ✅Lösungsarchitektur:
STPViewer (neue FloatingShareBar Layer)
├── upload-Zustand → UploadView + FloatingShareBar ✅
├── loading-Zustand → ViewerView + FloatingShareBar ✅
└── viewing-Zustand → ViewerView + FloatingShareBar ✅Kritische Code-Änderung:
// src/components/stp-viewer/stp-viewer.tsx
return (
<div className={cn('stp-viewer-container', className)}>
{/* Status-bezogener Hauptinhalt */}
{renderContent()}
{/* Globale schwebende Sharing-Werkzeugleiste */}
<FloatingShareBar file={viewerState.file} />
</div>
);Vergleichs-Analyse-Methode: Durch systematischen Vergleich Hauptseiten-Modus vs. Vollbild-Modus Funktions-Inkonsistenzen entdeckt:
| Funktion | Hauptseiten-Modus | Vollbild-Modus | Status |
|---|---|---|---|
| New File | ✅ | ✅ | Konsistent |
| Screenshot | ✅ | ✅ | Konsistent |
| Share | ❌ Fehlend | ✅ | Inkonsistent |
Code-Ebene Analyse:
// viewer-view.tsx:730-766 - Hauptseiten-Werkzeugleiste
const toolbarButtons: ToolbarButton[] = [
{ id: 'new-file', /* ... */ },
{ id: 'screenshot', /* ... */ },
// ❌ Share-Button fehlt
];
// FullscreenToolbar.tsx:132-139 - Vollbild-Modus Werkzeugleiste
const secondaryTools: ToolbarButton[] = [
{
id: 'share',
label: t('toolbar.share'),
// ✅ Vorhanden aber Funktionalität nicht implementiert
},
];Tiefgreifende Entdeckung technischer Grenzen:
// ✅ React-Share tatsächliche Fähigkeiten
- Link-Sharing: Alle Plattformen unterstützen URL-Sharing
- Text-Inhalt: Unterstützt Titel, Beschreibung und andere Text-Parameter
- Social-Media-Weiterleitung: Öffnet offizielle Sharing-Seiten der Plattformen
- Null externe Abhängigkeiten: Benötigt keine Third-Party-SDK-Ladung
// ❌ React-Share technische Grenzen
- Keine lokale Datei-Sharing-Unterstützung: Kann nicht direkt Screenshots, Dokumente teilen
- Keine Bild-Upload-Unterstützung: Mainstream-Plattformen unterstützen keine direkten Bild-Uploads
- Nur öffentliche Bild-URLs unterstützt: Wenige Plattformen benötigen öffentlich zugängliche Bild-Links
- Keine Backend-Funktionalität: Kann Datei-Uploads, Short-Link-Generierung nicht handhabenRealistische Anpassung des Entwicklungsplans:
Komponenten-Strategie:
src/components/stp-viewer/
├── shared/
│ └── SimpleShareDialog.tsx # Einheitlicher Sharing-Dialog (einzige Komponente)
├── viewer-view.tsx # Share-Button hinzufügen
└── fullscreen/
└── FullscreenToolbar.tsx # Tatsächliche Sharing-Funktionalität verbindenPraxis der Design-Prinzipien:
Problem 1: Fehlerhafte disabled-Button-Logik
// Fehlerhafte Logik
{
id: 'share',
disabled: !isViewerReady, // ❌ Seiten-Link-Sharing muss nicht auf Modell-Ladung warten
}
// Korrekte Logik
{
id: 'share',
disabled: false, // ✅ Seiten-Sharing-Funktionalität sollte immer verfügbar sein
}Grundursachen-Analyse:
isViewerReady ist false vor Modell-LadungProblem 2: Schnelle Reaktion auf unzureichende Plattform-Unterstützung
Erste Phase: Basis-Fix (15 Minuten)
// src/components/stp-viewer/viewer-view.tsx:754
- disabled: !isViewerReady,
+ disabled: false,Zweite Phase: Plattform-Erweiterung (20 Minuten)
// 6 neue Mainstream-Plattformen hinzugefügt
const newPlatforms = [
'WhatsApp', // Weltweit größte Instant-Messaging-Anwendung
'Telegram', // Bevorzugt von technischen Benutzergruppen
'Reddit', // Haupt-Sharing-Plattform der technischen Community
'Pinterest', // Visueller Content-Sharing, geeignet für 3D-Modelle
'Weibo', // Haupt-Social-Media-Plattform für chinesische Benutzer
'Line', // Beliebte Kommunikations-Anwendung in asiatischen Regionen
];Dritte Phase: Erfahrungs-Optimierung (10 Minuten)
Bedeutung der Architektur-Evolution:
Realistische technische Auswahl:
Schnelle Reaktions-Entwicklungsfähigkeit:
Diese Sharing-Funktionalitäts-Entwicklungsgeschichte zeigt vollständige Entwicklungsweisheit von Architektur-Evolution zu technischer Auswahl, von Problem-Diagnose zu schneller Reparatur und akkumuliert wertvolle praktische Erfahrungen für das Team.
Keine Breaking Changes. Alle Verbesserungen sind rückwärts kompatibel. Benutzer werden erleben:
Umfassende Code-Bereinigung und Leistungsverbesserungen bei Beibehaltung einer 18-Sekunden-Ladezeit
2025/08/28
Umfassende Bereinigung und Optimierung zur Verbesserung der Wartbarkeit und Leistung:
Intelligente Geräteerkennung mit adaptiven Bedienungshinweisen
2025/08/27
Mobile Benutzererfahrung mit gerätespezifischen Bedienungshinweisen optimiert:
useResponsive HookBehebung des Problems mit langen Dateinamen und Verbesserung des mobilen Layouts
2025/08/27
Lösung des Mobiltoolbar-Problems bei langen Dateinamen, die Werkzeugschaltflächen komprimieren:
3D-Viewer Theme-Wechsel-Synchronisationsprobleme behoben und visuelle Erfahrung verbessert
2025/08/26
Wir haben ein wichtiges Benutzererfahrungsproblem gelöst:
Revolutionäre Vollbildmodus-Framework - Transformation des STP Viewers in eine professionelle 3D-CAD-Plattform
2025/08/25
Dieser Meilenstein markiert den Beginn der Transformation des STP Viewers von einem einfachen Dateibetrachter zu einer professionellen 3D-CAD-Visualisierungsplattform. Wir haben die Grundlage für das umfassendste Online-STEP-Datei-Betrachtungserlebenis geschaffen.
Progressive Funktionsstrategie: Zweistufiges Erlebnisdesign
... [以下部分继续按照相同的专业和技术翻译风格] ...
IGES-Format-Unterstützung entfernt, Benutzerbewertungssystem und Homepage-Verbesserungen hinzugefügt
2025/08/20
Wir konzentrierten uns auf STEP-Format-Unterstützung für eine überlegene Erfahrung:
Dateigrößenlimit auf 100MB erhöht und Ladeleistung großer Dateien optimiert
2025/08/15
Wir haben bedeutende Leistungsoptimierungen am STP Viewer vorgenommen:
Erste Version des Online-STP-Dateibetrachters mit STEP-Format 3D-Vorschau
2025/08/01
Wir freuen uns, die erste Version des STP Viewers mit den folgenden Kernfunktionen zu veröffentlichen: