$lang['tuto'] = "ట్యుటోరియల్స్"; ?>$lang['tuto'] = "ట్యుటోరియల్స్"; ?> రియాక్ట్ నేటివ్‌లో

రియాక్ట్ నేటివ్‌లో ఫ్లాష్‌లిస్ట్ పనితీరును ఆప్టిమైజ్ చేయడం: అనవసరమైన రీ-రెండర్‌లను నివారించడం

రియాక్ట్ నేటివ్‌లో ఫ్లాష్‌లిస్ట్ పనితీరును ఆప్టిమైజ్ చేయడం: అనవసరమైన రీ-రెండర్‌లను నివారించడం
రియాక్ట్ నేటివ్‌లో ఫ్లాష్‌లిస్ట్ పనితీరును ఆప్టిమైజ్ చేయడం: అనవసరమైన రీ-రెండర్‌లను నివారించడం

ఫ్లాష్‌లిస్ట్‌లో సమర్థవంతమైన రెండరింగ్ మాస్టరింగ్

రియాక్ట్ నేటివ్‌లో పెద్ద డేటాసెట్లతో పనిచేయడం ఒక సవాలుగా ఉంటుంది, ముఖ్యంగా ఉపయోగిస్తున్నప్పుడు ఫ్లాష్‌లిస్ట్ పనితీరు ఆప్టిమైజేషన్ కోసం. డెవలపర్లు ఎదుర్కొంటున్న ఒక సాధారణ సమస్య ఏమిటంటే, పైకి క్రిందికి స్క్రోల్ చేసేటప్పుడు భాగాల యొక్క అవాంఛిత తిరిగి రెండరింగ్. 🚀

ఇది లాగి పనితీరు, మినుకుమినుకుమనే UI మరియు మొత్తం ఉపశీర్షిక వినియోగదారు అనుభవానికి దారితీస్తుంది. చాలా మంది ప్రారంభకులు, మీలాగే, ఉపయోగించడం ద్వారా దీన్ని పరిష్కరించడానికి ప్రయత్నిస్తారు ప్యూరికాంపొనెంట్ లేదా React.memo, కానీ కొన్నిసార్లు ఈ పరిష్కారాలు .హించిన విధంగా పని చేయవు.

మీరు ఫుడ్ డెలివరీ అనువర్తనాన్ని నిర్మిస్తున్నారని g హించుకోండి, ఇక్కడ వినియోగదారులు వందలాది సమూహ మెను ఐటెమ్‌ల ద్వారా స్క్రోల్ చేయవచ్చు. ప్రతి స్క్రోల్ కదలిక అన్ని అంశాలను రిఫ్రెష్ చేయమని బలవంతం చేస్తే, అది అనువర్తనాన్ని నెమ్మదిస్తుంది మరియు వినియోగదారులను నిరాశపరుస్తుంది. ఈ గైడ్‌లో మేము పరిష్కరించబోతున్నాం.

ఈ వ్యాసంలో, ఫ్లాష్‌లిస్ట్ రీ-రెండర్లు ఎందుకు జరుగుతాయో, రియాక్ట్ కాంపోనెంట్ నవీకరణలను ఎలా నిర్వహిస్తుందో మరియు సున్నితమైన స్క్రోలింగ్ పనితీరును నిర్ధారించడానికి ఉత్తమమైన పద్ధతులను మేము అన్వేషిస్తాము. మీరు ఒక అనుభవశూన్యుడు లేదా అనుభవజ్ఞుడైన డెవలపర్ అయినా, ఈ అంతర్దృష్టులు అతుకులు లేని UI అనుభవాన్ని సృష్టించడానికి మీకు సహాయపడతాయి. ✅

కమాండ్ ఉపయోగం యొక్క ఉదాహరణ
FlashList షాపిఫై యొక్క ఫ్లాష్‌లిస్ట్ లైబ్రరీ నుండి అధిక-పనితీరు గల జాబితా భాగం, అనవసరమైన రీ-రిండర్లను తగ్గించడం ద్వారా పెద్ద డేటాసెట్ల కోసం ఆప్టిమైజ్ చేయబడింది.
memo() భాగం యొక్క ఆధారాలు మారనప్పుడు అనవసరమైన రీ-రిండర్‌లను నివారించడం ద్వారా ఫంక్షనల్ భాగాలను ఆప్టిమైజ్ చేయడానికి ఉపయోగిస్తారు.
useCallback() ప్రతి రెండర్‌పై ఫంక్షన్‌ను తిరిగి సృష్టించకుండా నిరోధించడానికి జ్ఞాపకం ఉన్న ఫంక్షన్‌ను అందిస్తుంది, రెండెటెమ్ కాల్‌బ్యాక్‌లలో పనితీరును మెరుగుపరుస్తుంది.
useMemo() ఫ్లాష్‌లిస్ట్ భాగం కోసం పెద్ద డేటాసెట్లను ఉత్పత్తి చేయడం వంటి ఖరీదైన లెక్కలను జ్ఞాపకం చేయడం ద్వారా పనితీరును ఆప్టిమైజ్ చేస్తుంది.
estimatedItemSize అంశాల పరిమాణాన్ని అంచనా వేయడం ద్వారా, స్క్రోలింగ్ పనితీరును మెరుగుపరచడం ద్వారా రెండరింగ్‌ను ఆప్టిమైజ్ చేయడానికి సహాయపడే ఫ్లాష్‌లిస్ట్-నిర్దిష్ట ఆస్తి.
keyExtractor ప్రతి జాబితా అంశానికి ఒక ప్రత్యేకమైన కీని కేటాయిస్తుంది, డేటా మారినప్పుడు అనవసరమైన రీ-రెండర్‌లను నిరోధిస్తుంది.
useEffect() భాగం మౌంట్ అయినప్పుడు ప్రారంభ డేటాసెట్‌ను ఫ్లాష్‌లిస్ట్ కాంపోనెంట్‌లో సెట్ చేయడం వంటి దుష్ప్రభావాలను నిర్వహిస్తుంది.
StyleSheet.create() రియాక్ట్ స్థానిక భాగాల రెండరింగ్ సామర్థ్యాన్ని మెరుగుపరచడానికి ఆప్టిమైజ్ మరియు మార్పులేని శైలి వస్తువులను సృష్టిస్తుంది.
showsVerticalScrollIndicator నిలువు స్క్రోల్ బార్ యొక్క దృశ్యమానతను నియంత్రించే ఫ్లాష్‌లిస్ట్‌లోని ఆస్తి, వినియోగదారు అనుభవాన్ని మెరుగుపరుస్తుంది.

రియాక్ట్ నేటివ్‌లో ఫ్లాష్‌లిస్ట్ రెండరింగ్‌ను ఆప్టిమైజ్ చేయడం

లో పెద్ద డేటాసెట్లతో వ్యవహరించేటప్పుడు రియాక్ట్ నేటివ్, సున్నితమైన వినియోగదారు అనుభవాన్ని నిర్ధారించడానికి డేటా ఇవ్వబడిన విధానాన్ని ఆప్టిమైజ్ చేయడం చాలా ముఖ్యం. మునుపటి ఉదాహరణలలో అందించిన స్క్రిప్ట్‌లు ఫ్లాష్‌లిస్ట్ భాగం ద్వారా స్క్రోలింగ్ చేసేటప్పుడు అనవసరమైన రీ-రెండర్‌లను నివారించడం లక్ష్యంగా పెట్టుకుంటాయి. మొదటి పద్ధతి ఉపయోగించుకుంటుంది జ్ఞాపకం ద్వారా మెమో () ఫంక్షన్, ఇది జాబితా అంశాలను చుట్టేస్తుంది మరియు వాటి ఆధారాలు మారకపోతే వాటిని తిరిగి అందించకుండా నిరోధిస్తుంది. ఇది ప్రాసెసింగ్‌ను గణనీయంగా తగ్గిస్తుంది మరియు పనితీరును మెరుగుపరుస్తుంది. వందలాది వస్తువులతో ఫుడ్ డెలివరీ అనువర్తనం ద్వారా స్క్రోలింగ్ చేయడాన్ని g హించుకోండి -ఆప్టిమైజేషన్ లేకుండా, ప్రతి స్క్రోల్ లాగి ఇంటర్‌ఫేస్‌కు కారణం కావచ్చు. 🚀

రెండవ విధానం చేర్చడం ద్వారా ఆప్టిమైజేషన్‌ను ఒక అడుగు ముందుకు వేస్తుంది usecallback () మరియు usememo (). ప్రతి రెండర్‌పై విధులు మరియు ఖరీదైన గణనల యొక్క పున creation- సృష్టిని నివారించడానికి ఈ హుక్స్ అవసరం. usememo () డేటాసెట్ ఒక్కసారి మాత్రమే ఉత్పత్తి అవుతుందని నిర్ధారిస్తుంది, అయితే usecallback () ప్రతి జాబితా అంశం కోసం రెండర్ ఫంక్షన్ రెండర్లలో స్థిరంగా ఉందని నిర్ధారించుకోండి. ఈ ఆప్టిమైజేషన్లు చాలా పెద్ద వ్యత్యాసాన్ని కలిగిస్తాయి, ప్రత్యేకించి సంక్లిష్టమైన సమూహ నిర్మాణాలను నిర్వహించేటప్పుడు, బహుళ ఉప-అంశాలతో ఆహార వర్గాలు వంటివి.

స్క్రిప్ట్ యొక్క మరొక ముఖ్య అంశం అంచనా ఆస్తి. ఇది ఫ్లాష్‌లిస్ట్‌కు ప్రత్యేకమైనది మరియు సిస్టమ్ ప్రీకాంప్యూట్ ఐటెమ్ హైట్స్‌కు సహాయపడుతుంది, సమర్థవంతమైన మెమరీ వినియోగాన్ని నిర్ధారిస్తుంది మరియు స్క్రోలింగ్ సమయంలో మినుకుమినుకుమనేది. ఈ ఆస్తి లేకుండా, ఫ్లాష్‌లిస్ట్ సున్నితమైన స్క్రోలింగ్ అనుభవాన్ని కొనసాగించడానికి కష్టపడవచ్చు, ముఖ్యంగా లోయర్-ఎండ్ పరికరాల్లో. ఆన్‌లైన్ కిరాణా దుకాణం గురించి ఆలోచించండి, ఇక్కడ మీరు వేలాది ఉత్పత్తుల ద్వారా సజావుగా స్క్రోల్ చేయవచ్చు -ఈ ఆప్టిమైజేషన్లు దానిని సాధ్యం చేస్తాయి. ✅

చివరగా, స్టైల్ ఆప్టిమైజేషన్ కూడా ముఖ్యం. ఇన్లైన్ శైలులను నేరుగా నిర్వచించే బదులు, స్క్రిప్ట్ ఉపయోగిస్తుంది Stalesheet.create (), ఇది రియాక్ట్ స్థానికంగా ఆప్టిమైజ్ చేయడానికి మరియు కాష్ శైలులను సమర్ధవంతంగా అనుమతిస్తుంది. ఇది రీ-రెండర్స్ సమయంలో శైలులను తిరిగి దరఖాస్తు చేయడానికి తీసుకున్న సమయాన్ని తగ్గిస్తుంది, పనితీరును మరింత పెంచుతుంది. కలిపినప్పుడు, ఈ పద్ధతులు అత్యంత సమర్థవంతమైన జాబితా రెండరింగ్ యంత్రాంగాన్ని సృష్టిస్తాయి, పెద్ద-స్థాయి అనువర్తనాల్లో అతుకులు లేని వినియోగదారు అనుభవాన్ని నిర్ధారిస్తాయి. ఈ ఉత్తమ పద్ధతులను అనుసరించడం ద్వారా, డెవలపర్లు అనవసరమైన రీ-రెండర్‌లను నిరోధించవచ్చు మరియు అధిక పనితీరు గల మొబైల్ అనువర్తనాలను నిర్మించవచ్చు. 📱

ఆప్టిమైజ్ చేసిన పనితీరు కోసం ఫ్లాష్‌లిస్ట్‌లో అవాంఛిత తిరిగి రుణాలను నిరోధించడం

ఆప్టిమైజ్డ్ రెండరింగ్ పద్ధతులతో రియాక్ట్ నేటివ్‌లో ఫ్లాష్‌లిస్ట్ అమలు

import React, { useState, useEffect, memo } from "react";
import { View, Text, Image, StyleSheet } from "react-native";
import { FlashList } from "@shopify/flash-list";
const generateSampleData = () => {
  return Array.from({ length: 100 }, (_, index) => ({
    id: index.toString(),
    name: `Food Item ${index + 1}` ,
    image: `https://source.unsplash.com/80x80/?food&random=${index}` ,
    price: (Math.random() * 50 + 5).toFixed(2),
    rating: (Math.random() * 5).toFixed(1),
  }));
};
const MemoizedItem = memo(({ item }) => {
  return (
    <View style={styles.itemContainer}>
      <Image source={{ uri: item.image }} style={styles.image} />
      <Text>{item.name}</Text>
    </View>
  );
});
const FlashListScreen = () => {
  const [data, setData] = useState([]);
  useEffect(() => {
    setData(generateSampleData());
  }, []);
  return (
    <View style={styles.container}>
      <FlashList
        data={data}
        renderItem={({ item }) => <MemoizedItem item={item} />}
        keyExtractor={(item) => item.id}
        estimatedItemSize={100}
      />
    </View>
  );
};
const styles = StyleSheet.create({
  container: { flex: 1, backgroundColor: "#fff", paddingHorizontal: 10 },
  itemContainer: { flexDirection: "row", alignItems: "center", padding: 10 },
  image: { width: 50, height: 50, borderRadius: 25, marginRight: 10 },
});
export default FlashListScreen;

యూజ్‌కాల్‌బ్యాక్ మరియు యూస్‌మెమోతో ఫ్లాష్‌లిస్ట్ పనితీరును ఆప్టిమైజ్ చేయడం

రీ-రిండర్లను తగ్గించడం ద్వారా రియాక్ట్ స్థానిక ఫ్లాష్‌లిస్ట్‌లో పనితీరును మెరుగుపరచడం

import React, { useState, useEffect, useCallback, useMemo } from "react";
import { View, Text, Image, StyleSheet } from "react-native";
import { FlashList } from "@shopify/flash-list";
const generateSampleData = useMemo(() => {
  return () => Array.from({ length: 100 }, (_, index) => ({
    id: index.toString(),
    name: `Food Item ${index + 1}` ,
    image: `https://source.unsplash.com/80x80/?food&random=${index}` ,
    price: (Math.random() * 50 + 5).toFixed(2),
    rating: (Math.random() * 5).toFixed(1),
  }));
}, []);
const RenderItem = useCallback(({ item }) => (
  <View style={styles.itemContainer}>
    <Image source={{ uri: item.image }} style={styles.image} />
    <Text>{item.name}</Text>
  </View>
), []);
const FlashListScreen = () => {
  const [data, setData] = useState([]);
  useEffect(() => {
    setData(generateSampleData());
  }, [generateSampleData]);
  return (
    <View style={styles.container}>
      <FlashList
        data={data}
        renderItem={({ item }) => <RenderItem item={item} />}
        keyExtractor={(item) => item.id}
        estimatedItemSize={100}
      />
    </View>
  );
};
const styles = StyleSheet.create({
  container: { flex: 1, backgroundColor: "#fff", paddingHorizontal: 10 },
  itemContainer: { flexDirection: "row", alignItems: "center", padding: 10 },
  image: { width: 50, height: 50, borderRadius: 25, marginRight: 10 },
});
export default FlashListScreen;

ఫ్లాష్‌లిస్ట్‌లో అనవసరమైన రీ-రెండర్‌లను నివారించడానికి అధునాతన పద్ధతులు

ఉపయోగించడం దాటి ప్యూరికాంపొనెంట్ మరియు జ్ఞాపకం, ఆప్టిమైజ్ చేయడానికి మరొక ప్రభావవంతమైన విధానం ఫ్లాష్‌లిస్ట్ రెండరింగ్ అనేది అమలు వర్చువలైజేషన్. వర్చువలైజేషన్ ఏ సమయంలోనైనా వస్తువుల ఉపసమితి మాత్రమే ఇవ్వబడిందని నిర్ధారిస్తుంది, అనువర్తనం యొక్క మెమరీ మరియు సిపియు వినియోగాన్ని గణనీయంగా తగ్గిస్తుంది. లోతుగా సమూహ నిర్మాణాలను నిర్వహించేటప్పుడు ఈ సాంకేతికత ముఖ్యంగా ఉపయోగపడుతుంది, ఇక్కడ ప్రతి మాతృ భాగం బహుళ పిల్లల అంశాలను కలిగి ఉంటుంది. వర్చువలైజేషన్ లేకుండా, ఒకేసారి వేలాది వస్తువులను అందించడం వల్ల పనితీరు అడ్డంకి వస్తుంది, ఇది నెమ్మదిగా స్క్రోలింగ్ మరియు UI లాగ్‌కు దారితీస్తుంది.

పరిగణించవలసిన మరో ముఖ్య అంశం సరైన ఉపయోగం getItemtype ఫంక్షన్. ఇన్ ఫ్లాష్‌లిస్ట్, ఈ ఫంక్షన్ డెవలపర్‌లను వేర్వేరు ఐటెమ్ రకాలను వర్గీకరించడానికి అనుమతిస్తుంది, నిర్దిష్ట అంశాలు మాత్రమే మారినప్పుడు మొత్తం జాబితాకు అనవసరమైన నవీకరణలను నిరోధించవచ్చు. ఉదాహరణకు, మార్కెట్ ప్లేస్ అనువర్తనంలో, ఉత్పత్తులను వర్గం ద్వారా వర్గీకరించారు getItemtype మొత్తం జాబితాను తిరిగి అందించడానికి బదులుగా సవరించిన వర్గాన్ని మాత్రమే నవీకరించడంలో సహాయపడుతుంది. ఇది పనితీరును గణనీయంగా పెంచుతుంది, ముఖ్యంగా లోయర్-ఎండ్ పరికరాల్లో. 🚀

చివరగా, ఆప్టిమైజ్ సందర్భ వినియోగం రియాక్ట్ అనువర్తనాల్లో మెరుగుపరచడంలో కీలక పాత్ర పోషిస్తుంది ఫ్లాష్‌లిస్ట్ సామర్థ్యం. రీడక్స్ లేదా కాంటెక్స్ట్ API వంటి గ్లోబల్ స్టేట్ మేనేజ్‌మెంట్ సాధనాలను ఉపయోగిస్తున్నప్పుడు, రాష్ట్ర నవీకరణల వల్ల అనవసరమైన రీ-రిండర్లను నివారించడం చాలా అవసరం. స్థితిని చిన్న, స్వతంత్ర సందర్భాలుగా విభజించడం ద్వారా మరియు అవసరమైన డేటాను మాత్రమే సేకరించేందుకు సెలెక్టర్లను ఉపయోగించడం ద్వారా, డెవలపర్లు రీ-రిండర్లను తగ్గించవచ్చు. ఉదాహరణకు, క్రొత్త సందేశాన్ని స్వీకరించిన తర్వాత మొత్తం జాబితాను నవీకరించడానికి బదులుగా, చాట్ థ్రెడ్‌లను ప్రదర్శించే సందేశ అనువర్తనంలో, ప్రభావిత సంభాషణ థ్రెడ్‌ను మాత్రమే తిరిగి అందించాలి. ఈ చిన్న ఇంకా ప్రభావవంతమైన వ్యూహాలు సున్నితమైన, అధిక-పనితీరు గల వినియోగదారు అనుభవాన్ని నిర్ధారించడానికి సహాయపడతాయి. ✅

ఫ్లాష్‌లిస్ట్ ఆప్టిమైజేషన్ గురించి తరచుగా అడిగే ప్రశ్నలు

  1. ఎందుకు FlashList ఫ్లాట్‌లిస్ట్‌పై సిఫార్సు చేయబడిందా?
  2. FlashList పెద్ద డేటాసెట్ల కోసం ఆప్టిమైజ్ చేయబడింది, ఫ్లాట్‌లిస్ట్‌తో పోలిస్తే మెరుగైన పనితీరు, సున్నితమైన స్క్రోలింగ్ మరియు తగ్గించిన మెమరీ వినియోగాన్ని అందిస్తుంది.
  3. ఎలా చేస్తుంది memo() తిరిగి రుణాలను నివారించడంలో సహాయం చేయాలా?
  4. memo() అనవసరమైన నవీకరణలను నివారించడానికి ఫంక్షనల్ భాగాన్ని చుట్టేస్తుంది, దాని ఆధారాలు మారకపోతే, రీ-రెండర్‌లను తగ్గిస్తాయి.
  5. యొక్క పాత్ర ఏమిటి useCallback() ఫ్లాష్‌లిస్ట్‌ను ఆప్టిమైజ్ చేయడంలో?
  6. useCallback() అదే ఫంక్షన్ రిఫరెన్స్ రెండర్‌లలో ఉపయోగించబడుతుందని నిర్ధారిస్తుంది, ఫ్లాష్‌లిస్ట్‌లో అనవసరమైన నవీకరణలను నిరోధిస్తుంది renderItem.
  7. కెన్ estimatedItemSize పనితీరును మెరుగుపరచాలా?
  8. అవును, సెట్టింగ్ estimatedItemSize ఫ్లాష్‌లిస్ట్ ప్రీకాంప్యూట్ ఐటెమ్ హైట్స్‌కు సహాయపడుతుంది, లేఅవుట్ పరిమాణాలను డైనమిక్‌గా లెక్కించడానికి గడిపిన సమయాన్ని తగ్గిస్తుంది.
  9. ఎలా చేయవచ్చు getItemType రెండరింగ్ ఆప్టిమైజ్ చేయాలా?
  10. getItemType జాబితా అంశాలను వర్గీకరిస్తుంది, మొత్తం జాబితాను తిరిగి అందించడానికి బదులుగా నిర్దిష్ట రకాలు మాత్రమే నవీకరించబడతాయని నిర్ధారిస్తుంది.

ఫ్లాష్‌లిస్ట్‌లో పనితీరును ఆప్టిమైజ్ చేయడం

పెద్ద జాబితాలతో వ్యవహరించేటప్పుడు, సున్నితమైన పనితీరు గొప్ప వినియోగదారు అనుభవానికి కీలకం. వంటి పద్ధతులను ఉపయోగించడం ద్వారా React.memo మరియు useCallback. ఉత్పత్తి కేటలాగ్‌లు లేదా సోషల్ మీడియా ఫీడ్‌ల వంటి పెద్ద డేటాసెట్లను నిర్వహించే అనువర్తనాలకు ఈ ఆప్టిమైజేషన్లు అవసరం. 📱

అదనంగా, ఫ్లాష్‌లిస్ట్-నిర్దిష్ట లక్షణాలు వంటివి అంచనా మరియు getItemtype స్క్రోలింగ్ ద్రవత్వాన్ని మరింత మెరుగుపరచండి. డేటాను సరిగ్గా రూపొందించడం ద్వారా మరియు కాంపోనెంట్ నవీకరణలను ఆప్టిమైజ్ చేయడం ద్వారా, డెవలపర్లు అధిక పనితీరు గల అనువర్తనాలను సృష్టించవచ్చు. ఈ పద్ధతులను మాస్టరింగ్ చేయడం సంక్లిష్టమైన, డేటా-భారీ అనువర్తనాలు కూడా సజావుగా నడుస్తుందని నిర్ధారిస్తుంది, ఇది వినియోగదారులకు అతుకులు మరియు సమర్థవంతమైన అనుభవాన్ని అందిస్తుంది. ✅

విశ్వసనీయ మూలాలు మరియు సూచనలు
  1. అధికారిక డాక్యుమెంటేషన్ ఫ్లాష్‌లిస్ట్ Shopify నుండి, దాని అమలు మరియు ఆప్టిమైజేషన్ పద్ధతులను వివరిస్తుంది: షాపిఫై ఫ్లాష్‌లిస్ట్ డాక్స్ .
  2. ఫ్లాట్‌లిస్ట్ మరియు వర్చువలైజేషన్‌ను ఉపయోగించి పెద్ద జాబితాలను సమర్థవంతంగా నిర్వహించడంపై స్థానిక అధికారిక మార్గదర్శిని రియాక్ట్ చేయండి: రియాక్ట్ నేటివ్ ఫ్లాట్లిస్ట్ డాక్స్ .
  3. మెమోలైజేషన్ పద్ధతులను ఉపయోగించి రియాక్ట్ అనువర్తనాలలో అనవసరమైన రీ-రెండర్‌లను నివారించడంపై సమగ్ర ట్యుటోరియల్: React.memo డాక్యుమెంటేషన్ .
  4. రియాక్ట్ నేటివ్ కోసం పనితీరు ఆప్టిమైజేషన్ వ్యూహాలు, రాష్ట్రాన్ని నిర్వహించడానికి మరియు రెండరింగ్ కోసం ఉత్తమ పద్ధతులతో సహా: లాగ్రోకెట్ పెర్ఫార్మెన్స్ గైడ్ .